uboot/doc/README.rockchip
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0+
   2#
   3# Copyright (C) 2015 Google. Inc
   4# Written by Simon Glass <sjg@chromium.org>
   5
   6U-Boot on Rockchip
   7==================
   8
   9A wide range of Rockchip SoCs are supported in mainline U-Boot
  10
  11Warning
  12=======
  13This document is being moved to doc/board/rockchip, so information on it
  14might be incomplete or outdated.
  15
  16Prerequisites
  17=============
  18
  19You will need:
  20
  21   - Firefly RK3288 board or something else with a supported RockChip SoC
  22   - Power connection to 5V using the supplied micro-USB power cable
  23   - Separate USB serial cable attached to your computer and the Firefly
  24        (connect to the micro-USB connector below the logo)
  25   - rkflashtool [3]
  26   - openssl (sudo apt-get install openssl)
  27   - Serial UART connection [4]
  28   - Suitable ARM cross compiler, e.g.:
  29        sudo apt-get install gcc-4.7-arm-linux-gnueabi
  30
  31Building
  32========
  33
  341. To build RK3288 board:
  35
  36   CROSS_COMPILE=arm-linux-gnueabi- make O=firefly firefly-rk3288_defconfig all
  37
  38    (or you can use another cross compiler if you prefer)
  39
  402. To build RK3308 board:
  41   - Get the rkbin
  42     => git clone https://github.com/rockchip-linux/rkbin.git
  43
  44   - Compile U-Boot
  45     => cd /path/to/u-boot
  46     => export BL31=/path/to/rkbin/bin/rk33/rk3308_bl31_v2.22.elf
  47     => make roc-cc-rk3308_defconfig
  48     => make CROSS_COMPILE=aarch64-linux-gnu- all
  49     => ./tools/mkimage -n rk3308 -T rksd -d /path/to/rkbin/bin/rk33/rk3308_ddr_589MHz_uart2_m0_v1.26.bin idbloader.img
  50     => cat spl/u-boot-spl.bin  >> idbloader.img
  51
  523. To build RK3399 board:
  53
  54   Option 1: Package the image with Rockchip miniloader:
  55
  56   - Compile U-Boot
  57
  58     => cd /path/to/u-boot
  59     => make nanopi-neo4-rk3399_defconfig
  60     => make
  61
  62   - Get the rkbin
  63
  64     => git clone https://github.com/rockchip-linux/rkbin.git
  65
  66   - Create trust.img
  67
  68     => cd /path/to/rkbin
  69     => ./tools/trust_merger RKTRUST/RK3399TRUST.ini
  70
  71   - Create uboot.img
  72
  73     => cd /path/to/rkbin
  74     => ./tools/loaderimage --pack --uboot /path/to/u-boot/u-boot-dtb.bin uboot.img
  75
  76     (Get trust.img and uboot.img)
  77
  78   Option 2: Package the image with SPL:
  79
  80   - Export cross compiler path for aarch64
  81
  82   - Compile ATF
  83
  84     => git clone https://github.com/ARM-software/arm-trusted-firmware.git
  85     => cd arm-trusted-firmware
  86
  87     (export cross compiler path for Cortex-M0 MCU likely arm-none-eabi-)
  88     => make realclean
  89     => make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399
  90
  91    (export bl31.elf)
  92    => export BL31=/path/to/arm-trusted-firmware/build/rk3399/release/bl31/bl31.elf
  93
  94   - Compile PMU M0 firmware
  95
  96     This is optional for most of the rk3399 boards.
  97
  98     => git clone git://git.theobroma-systems.com/rk3399-cortex-m0.git
  99     => cd rk3399-cortex-m0
 100
 101     (export cross compiler path for Cortex-M0 PMU)
 102     => make CROSS_COMPILE=arm-cortex_m0-eabi-
 103
 104     (export rk3399m0.bin)
 105     => export PMUM0=/path/to/rk3399-cortex-m0/rk3399m0.bin
 106
 107   - Compile U-Boot
 108
 109     => cd /path/to/u-boot
 110     => make orangepi-rk3399_defconfig
 111     => make
 112
 113     (Get spl/u-boot-spl-dtb.bin, u-boot.itb images and some boards would get
 114      spl/u-boot-spl.bin since it doesn't enable CONFIG_SPL_OF_CONTROL
 115
 116      If TPL enabled on the target, get tpl/u-boot-tpl-dtb.bin or tpl/u-boot-tpl.bin
 117      if CONFIG_TPL_OF_CONTROL not enabled)
 118
 119Writing to the board with USB
 120=============================
 121
 122For USB to work you must get your board into ROM boot mode, either by erasing
 123your MMC or (perhaps) holding the recovery button when you boot the board.
 124To erase your MMC, you can boot into Linux and type (as root)
 125
 126   dd if=/dev/zero of=/dev/mmcblk0 bs=1M
 127
 128Connect your board's OTG port to your computer.
 129
 130To create a suitable image and write it to the board:
 131
 132   ./firefly-rk3288/tools/mkimage -n rk3288 -T rkimage -d \
 133        ./firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
 134   cat out | openssl rc4 -K 7c4e0304550509072d2c7b38170d1711 | rkflashtool l
 135
 136If all goes well you should something like:
 137
 138   U-Boot SPL 2015.07-rc1-00383-ge345740-dirty (Jun 03 2015 - 10:06:49)
 139   Card did not respond to voltage select!
 140   spl: mmc init failed with error: -17
 141   ### ERROR ### Please RESET the board ###
 142
 143You will need to reset the board before each time you try. Yes, that's all
 144it does so far. If support for the Rockchip USB protocol or DFU were added
 145in SPL then we could in principle load U-Boot and boot to a prompt from USB
 146as several other platforms do. However it does not seem to be possible to
 147use the existing boot ROM code from SPL.
 148
 149
 150Writing to the eMMC with USB on ROC-RK3308-CC
 151=============================================
 152For USB to work you must get your board into Bootrom mode,
 153either by erasing the eMMC or short circuit the GND and D0
 154on core board.
 155
 156Connect the board to your computer via tyepc.
 157=> rkdeveloptool db rk3308_loader_v1.26.117.bin
 158=> rkdeveloptool wl 0x40 idbloader.img
 159=> rkdeveloptool wl 0x4000 u-boot.itb
 160=> rkdeveloptool rd
 161
 162Then you will see the boot log from Debug UART at baud rate 1500000:
 163DDR Version V1.26
 164REGFB: 0x00000032, 0x00000032
 165In
 166589MHz
 167DDR3
 168 Col=10 Bank=8 Row=14 Size=256MB
 169msch:1
 170Returning to boot ROM...
 171
 172U-Boot SPL 2020.01-rc1-00225-g34b681327f (Nov 14 2019 - 10:58:04 +0800)
 173Trying to boot from MMC1
 174INFO:    Preloader serial: 2
 175NOTICE:  BL31: v1.3(release):30f1405
 176NOTICE:  BL31: Built : 17:08:28, Sep 23 2019
 177INFO:    Lastlog: last=0x100000, realtime=0x102000, size=0x2000
 178INFO:    ARM GICv2 driver initialized
 179INFO:    Using opteed sec cpu_context!
 180INFO:    boot cpu mask: 1
 181INFO:    plat_rockchip_pmu_init: pd status 0xe b
 182INFO:    BL31: Initializing runtime services
 183WARNING: No OPTEE provided by BL2 boot loader, Booting device without OPTEE initialization. SMC`s destined for OPTEE will rK
 184ERROR:   Error initializing runtime service opteed_fast
 185INFO:    BL31: Preparing for EL3 exit to normal world
 186INFO:    Entry point address = 0x600000
 187INFO:    SPSR = 0x3c9
 188
 189
 190U-Boot 2020.01-rc1-00225-g34b681327f (Nov 14 2019 - 10:58:47 +0800)
 191
 192Model: Firefly ROC-RK3308-CC board
 193DRAM:  254 MiB
 194MMC:   dwmmc@ff480000: 0, dwmmc@ff490000: 1
 195rockchip_dnl_key_pressed read adc key val failed
 196Net:   No ethernet found.
 197Hit any key to stop autoboot:  0
 198Card did not respond to voltage select!
 199switch to partitions #0, OK
 200mmc1(part 0) is current device
 201Scanning mmc 1:4...
 202Found /extlinux/extlinux.conf
 203Retrieving file: /extlinux/extlinux.conf
 204151 bytes read in 3 ms (48.8 KiB/s)
 2051:      kernel-mainline
 206Retrieving file: /Image
 20714737920 bytes read in 377 ms (37.3 MiB/s)
 208append: earlycon=uart8250,mmio32,0xff0c0000 console=ttyS2,1500000n8
 209Retrieving file: /rk3308-roc-cc.dtb
 21028954 bytes read in 4 ms (6.9 MiB/s)
 211Flattened Device Tree blob at 01f00000
 212Booting using the fdt blob at 0x1f00000
 213## Loading Device Tree to 000000000df3a000, end 000000000df44119 ... OK
 214
 215Starting kernel ...
 216[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd042]
 217[    0.000000] Linux version 5.4.0-rc1-00040-g4dc2d508fa47-dirty (andy@B150) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-209
 218[    0.000000] Machine model: Firefly ROC-RK3308-CC board
 219[    0.000000] earlycon: uart8250 at MMIO32 0x00000000ff0c0000 (options '')
 220[    0.000000] printk: bootconsole [uart8250] enabled
 221
 222Booting from an SD card
 223=======================
 224
 225To write an image that boots from an SD card (assumed to be /dev/sdc):
 226
 227   ./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
 228        firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
 229   sudo dd if=out of=/dev/sdc seek=64 && \
 230   sudo dd if=firefly-rk3288/u-boot-dtb.img of=/dev/sdc seek=16384
 231
 232This puts the Rockchip header and SPL image first and then places the U-Boot
 233image at block 16384 (i.e. 8MB from the start of the SD card). This
 234corresponds with this setting in U-Boot:
 235
 236   #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR      0x4000
 237
 238Put this SD (or micro-SD) card into your board and reset it. You should see
 239something like:
 240
 241   U-Boot 2016.01-rc2-00309-ge5bad3b-dirty (Jan 02 2016 - 23:41:59 -0700)
 242
 243   Model: Radxa Rock 2 Square
 244   DRAM:  2 GiB
 245   MMC:   dwmmc@ff0f0000: 0, dwmmc@ff0c0000: 1
 246   *** Warning - bad CRC, using default environment
 247
 248   In:    serial
 249   Out:   vop@ff940000.vidconsole
 250   Err:   serial
 251   Net:   Net Initialization Skipped
 252   No ethernet found.
 253   Hit any key to stop autoboot:  0
 254   =>
 255
 256The rockchip bootrom can load and boot an initial spl, then continue to
 257load a second-stage bootloader (ie. U-Boot) as soon as the control is returned
 258to the bootrom. Both the RK3288 and the RK3036 use this special boot sequence.
 259The configuration option enabling this is:
 260
 261        CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
 262
 263You can create the image via the following operations:
 264
 265   ./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
 266        firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
 267   cat firefly-rk3288/u-boot-dtb.bin >> out && \
 268   sudo dd if=out of=/dev/sdc seek=64
 269
 270Or:
 271   ./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
 272        firefly-rk3288/spl/u-boot-spl-dtb.bin:firefly-rk3288/u-boot-dtb.bin \
 273        out && \
 274   sudo dd if=out of=/dev/sdc seek=64
 275
 276If you have an HDMI cable attached you should see a video console.
 277
 278For evb_rk3036 board:
 279        ./evb-rk3036/tools/mkimage -n rk3036 -T rksd  -d evb-rk3036/spl/u-boot-spl.bin out && \
 280        cat evb-rk3036/u-boot-dtb.bin >> out && \
 281        sudo dd if=out of=/dev/sdc seek=64
 282
 283Or:
 284        ./evb-rk3036/tools/mkimage -n rk3036 -T rksd -d \
 285                evb-rk3036/spl/u-boot-spl.bin:evb-rk3036/u-boot-dtb.bin out && \
 286        sudo dd if=out of=/dev/sdc seek=64
 287
 288Note: rk3036 SDMMC and debug uart use the same iomux, so if you boot from SD, the
 289      debug uart must be disabled
 290
 291
 292Booting from an SD card on RK3288 with TPL
 293==========================================
 294
 295Since the size of SPL can't be exceeded 0x8000 bytes in RK3288, it is not possible add
 296new SPL features like Falcon mode or etc.
 297
 298So introduce TPL so-that adding new features to SPL is possible because now TPL should
 299run minimal with code like DDR, clock etc and rest of new features in SPL.
 300
 301As of now TPL is added on Vyasa-RK3288 board.
 302
 303To write an image that boots from an SD card (assumed to be /dev/mmcblk0):
 304
 305    sudo dd if=idbloader.img of=/dev/mmcblk0 seek=64 &&
 306    sudo dd if=u-boot-dtb.img of=/dev/mmcblk0 seek=16384
 307
 308Booting from an SD card on RK3188
 309=================================
 310
 311For rk3188 boards the general storage onto the card stays the same as
 312described above, but the image creation needs a bit more care.
 313
 314The bootrom of rk3188 expects to find a small 1kb loader which returns
 315control to the bootrom, after which it will load the real loader, which
 316can then be up to 29kb in size and does the regular ddr init.  This is
 317handled by a single image (built as the SPL stage) that tests whether
 318it is handled for the first or second time via code executed from the
 319boot0-hook.
 320
 321Additionally the rk3188 requires everything the bootrom loads to be
 322rc4-encrypted. Except for the very first stage the bootrom always reads
 323and decodes 2kb pages, so files should be sized accordingly.
 324
 325# copy tpl, pad to 1020 bytes and append spl
 326tools/mkimage -n rk3188 -T rksd -d spl/u-boot-spl.bin out
 327
 328# truncate, encode and append u-boot.bin
 329truncate -s %2048 u-boot.bin
 330cat u-boot.bin | split -b 512 --filter='openssl rc4 -K 7C4E0304550509072D2C7B38170D1711' >> out
 331
 332Booting from an SD card on Pine64 Rock64 (RK3328)
 333=================================================
 334
 335For Rock64 rk3328 board the following three parts are required:
 336TPL, SPL, and the u-boot image tree blob.
 337
 338  - Write TPL/SPL image at 64 sector
 339
 340    => sudo dd if=idbloader.img of=/dev/mmcblk0 seek=64
 341
 342  - Write u-boot image tree blob at 16384 sector
 343
 344    => sudo dd if=u-boot.itb of=/dev/mmcblk0 seek=16384
 345
 346Booting from an SD card on RK3399
 347=================================
 348
 349To write an image that boots from an SD card (assumed to be /dev/sdc):
 350
 351Option 1: Package the image with Rockchip miniloader:
 352
 353  - Create idbloader.img
 354
 355    => cd /path/to/u-boot
 356    => ./tools/mkimage  -n rk3399 -T rksd -d /path/to/rkbin/bin/rk33/rk3399_ddr_800MHz_v1.20.bin idbloader.img
 357    => cat /path/to/rkbin/bin/rk33/rk3399_miniloader_v1.19.bin >> idbloader.img
 358
 359  - Write idbloader.img at 64 sector
 360
 361    => sudo dd if=idbloader.img of=/dev/sdc seek=64
 362
 363  - Write trust.img at 24576
 364
 365    => sudo dd if=trust.img of=/dev/sdc seek=24576
 366
 367  - Write uboot.img at 16384 sector
 368
 369    => sudo dd if=uboot.img of=/dev/sdc seek=16384
 370    => sync
 371
 372Put this SD (or micro-SD) card into your board and reset it. You should see
 373something like:
 374
 375DDR Version 1.20 20190314
 376In
 377Channel 0: DDR3, 933MHz
 378Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
 379no stride
 380ch 0 ddrconfig = 0x101, ddrsize = 0x20
 381pmugrf_os_reg[2] = 0x10006281, stride = 0x17
 382OUT
 383Boot1: 2019-03-14, version: 1.19
 384CPUId = 0x0
 385ChipType = 0x10, 239
 386mmc: ERROR: SDHCI ERR:cmd:0x102,stat:0x18000
 387mmc: ERROR: Card did not respond to voltage select!
 388emmc reinit
 389mmc: ERROR: SDHCI ERR:cmd:0x102,stat:0x18000
 390mmc: ERROR: Card did not respond to voltage select!
 391emmc reinit
 392mmc: ERROR: SDHCI ERR:cmd:0x102,stat:0x18000
 393mmc: ERROR: Card did not respond to voltage select!
 394SdmmcInit=2 1
 395mmc0:cmd5,20
 396SdmmcInit=0 0
 397BootCapSize=0
 398UserCapSize=60543MB
 399FwPartOffset=2000 , 0
 400StorageInit ok = 45266
 401SecureMode = 0
 402SecureInit read PBA: 0x4
 403SecureInit read PBA: 0x404
 404SecureInit read PBA: 0x804
 405SecureInit read PBA: 0xc04
 406SecureInit read PBA: 0x1004
 407SecureInit read PBA: 0x1404
 408SecureInit read PBA: 0x1804
 409SecureInit read PBA: 0x1c04
 410SecureInit ret = 0, SecureMode = 0
 411atags_set_bootdev: ret:(0)
 412GPT 0x3380ec0 signature is wrong
 413recovery gpt...
 414GPT 0x3380ec0 signature is wrong
 415recovery gpt fail!
 416LoadTrust Addr:0x4000
 417No find bl30.bin
 418Load uboot, ReadLba = 2000
 419hdr 0000000003380880 + 0x0:0x88,0x41,0x3e,0x97,0xe6,0x61,0x54,0x23,0xe9,0x5a,0xd1,0x2b,0xdc,0x2f,0xf9,0x35,
 420
 421Load OK, addr=0x200000, size=0x9c9c0
 422RunBL31 0x10000
 423NOTICE:  BL31: v1.3(debug):370ab80
 424NOTICE:  BL31: Built : 09:23:41, Mar  4 2019
 425NOTICE:  BL31: Rockchip release version: v1.1
 426INFO:    GICv3 with legacy support detected. ARM GICV3 driver initialized in EL3
 427INFO:    Using opteed sec cpu_context!
 428INFO:    boot cpu mask: 0
 429INFO:    plat_rockchip_pmu_init(1181): pd status 3e
 430INFO:    BL31: Initializing runtime services
 431INFO:    BL31: Initializing BL32
 432INF [0x0] TEE-CORE:init_primary_helper:337: Initializing (1.1.0-195-g8f090d20 #6 Fri Dec  7 06:11:20 UTC 2018 aarch64)
 433
 434INF [0x0] TEE-CORE:init_primary_helper:338: Release version: 1.2
 435
 436INF [0x0] TEE-CORE:init_teecore:83: teecore inits done
 437INFO:    BL31: Preparing for EL3 exit to normal world
 438INFO:    Entry point address = 0x200000
 439INFO:    SPSR = 0x3c9
 440
 441
 442U-Boot 2019.04-rc4-00136-gfd121f9641-dirty (Apr 16 2019 - 14:02:47 +0530)
 443
 444Model: FriendlyARM NanoPi NEO4
 445DRAM:  1022 MiB
 446MMC:   dwmmc@fe310000: 2, dwmmc@fe320000: 1, sdhci@fe330000: 0
 447Loading Environment from MMC... *** Warning - bad CRC, using default environment
 448
 449In:    serial@ff1a0000
 450Out:   serial@ff1a0000
 451Err:   serial@ff1a0000
 452Model: FriendlyARM NanoPi NEO4
 453Net:   eth0: ethernet@fe300000
 454Hit any key to stop autoboot:  0
 455=>
 456
 457Option 2: Package the image with SPL:
 458
 459  - Prefix rk3399 header to SPL image
 460
 461    => cd /path/to/u-boot
 462    => ./tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl-dtb.bin out
 463
 464  - Write prefixed SPL at 64th sector
 465
 466    => sudo dd if=out of=/dev/sdc seek=64
 467
 468  - Write U-Boot proper at 16384 sector
 469
 470    => sudo dd if=u-boot.itb of=/dev/sdc seek=16384
 471    => sync
 472
 473Put this SD (or micro-SD) card into your board and reset it. You should see
 474something like:
 475
 476U-Boot SPL board init
 477Trying to boot from MMC1
 478
 479
 480U-Boot 2019.01-00004-g14db5ee998 (Mar 11 2019 - 13:18:41 +0530)
 481
 482Model: Orange Pi RK3399 Board
 483DRAM:  2 GiB
 484MMC:   dwmmc@fe310000: 2, dwmmc@fe320000: 1, sdhci@fe330000: 0
 485Loading Environment from MMC... OK
 486In:    serial@ff1a0000
 487Out:   serial@ff1a0000
 488Err:   serial@ff1a0000
 489Model: Orange Pi RK3399 Board
 490Net:   eth0: ethernet@fe300000
 491Hit any key to stop autoboot:  0
 492=>
 493
 494Option 3: Package the image with TPL:
 495
 496  - Write tpl+spl at 64th sector
 497
 498    => sudo dd if=idbloader.img of=/dev/sdc seek=64
 499
 500  - Write U-Boot proper at 16384 sector
 501
 502    => sudo dd if=u-boot.itb of=/dev/sdc seek=16384
 503    => sync
 504
 505Put this SD (or micro-SD) card into your board and reset it. You should see
 506something like:
 507
 508U-Boot TPL board init
 509Trying to boot from BOOTROM
 510Returning to boot ROM...
 511
 512U-Boot SPL board init
 513Trying to boot from MMC1
 514
 515
 516U-Boot 2019.07-rc1-00241-g5b3244767a (May 08 2019 - 10:51:06 +0530)
 517
 518Model: Orange Pi RK3399 Board
 519DRAM:  2 GiB
 520MMC:   dwmmc@fe310000: 2, dwmmc@fe320000: 1, sdhci@fe330000: 0
 521Loading Environment from MMC... OK
 522In:    serial@ff1a0000
 523Out:   serial@ff1a0000
 524Err:   serial@ff1a0000
 525Model: Orange Pi RK3399 Board
 526Net:   eth0: ethernet@fe300000
 527Hit any key to stop autoboot:  0
 528=>
 529
 530Using fastboot on rk3288
 531========================
 532- Write GPT partition layout to mmc device which fastboot want to use it to
 533store the image
 534
 535        => gpt write mmc 1 $partitions
 536
 537- Invoke fastboot command to prepare
 538
 539        => fastboot 1
 540
 541- Start fastboot request on PC
 542
 543        fastboot -i 0x2207 flash loader evb-rk3288/spl/u-boot-spl-dtb.bin
 544
 545You should see something like:
 546
 547        => fastboot 1
 548        WARNING: unknown variable: partition-type:loader
 549        Starting download of 357796 bytes
 550        ..
 551        downloading of 357796 bytes finished
 552        Flashing Raw Image
 553        ........ wrote 357888 bytes to 'loader'
 554
 555Booting from SPI
 556================
 557
 558To write an image that boots from SPI flash (e.g. for the Haier Chromebook or
 559Bob):
 560
 561   ./chromebook_jerry/tools/mkimage -n rk3288 -T rkspi \
 562        -d chromebook_jerry/spl/u-boot-spl-dtb.bin spl.bin && \
 563   dd if=spl.bin of=spl-out.bin bs=128K conv=sync && \
 564   cat spl-out.bin chromebook_jerry/u-boot-dtb.img >out.bin && \
 565   dd if=out.bin of=out.bin.pad bs=4M conv=sync
 566
 567This converts the SPL image to the required SPI format by adding the Rockchip
 568header and skipping every second 2KB block. Then the U-Boot image is written at
 569offset 128KB and the whole image is padded to 4MB which is the SPI flash size.
 570The position of U-Boot is controlled with this setting in U-Boot:
 571
 572   #define CONFIG_SYS_SPI_U_BOOT_OFFS   0x20000
 573
 574If you have a Dediprog em100pro connected then you can write the image with:
 575
 576      sudo em100 -s -c GD25LQ32 -d out.bin.pad -r
 577
 578When booting you should see something like:
 579
 580   U-Boot SPL 2015.07-rc2-00215-g9a58220-dirty (Jun 23 2015 - 12:11:32)
 581
 582
 583   U-Boot 2015.07-rc2-00215-g9a58220-dirty (Jun 23 2015 - 12:11:32 -0600)
 584
 585   Model: Google Jerry
 586   DRAM:  2 GiB
 587   MMC:
 588   Using default environment
 589
 590   In:    serial@ff690000
 591   Out:   serial@ff690000
 592   Err:   serial@ff690000
 593   =>
 594
 595Future work
 596===========
 597
 598Immediate priorities are:
 599
 600- USB host
 601- USB device
 602- Run CPU at full speed (code exists but we only see ~60 DMIPS maximum)
 603- NAND flash
 604- Boot U-Boot proper over USB OTG (at present only SPL works)
 605
 606
 607Development Notes
 608=================
 609
 610There are plenty of patches in the links below to help with this work.
 611
 612[1] https://github.com/rkchrome/uboot.git
 613[2] https://github.com/linux-rockchip/u-boot-rockchip.git branch u-boot-rk3288
 614[3] https://github.com/linux-rockchip/rkflashtool.git
 615[4] http://wiki.t-firefly.com/index.php/Firefly-RK3288/Serial_debug/en
 616
 617rkimage
 618-------
 619
 620rkimage.c produces an SPL image suitable for sending directly to the boot ROM
 621over USB OTG. This is a very simple format - just the string RK32 (as 4 bytes)
 622followed by u-boot-spl-dtb.bin.
 623
 624The boot ROM loads image to 0xff704000 which is in the internal SRAM. The SRAM
 625starts at 0xff700000 and extends to 0xff718000 where we put the stack.
 626
 627rksd
 628----
 629
 630rksd.c produces an image consisting of 32KB of empty space, a header and
 631u-boot-spl-dtb.bin. The header is defined by 'struct header0_info' although
 632most of the fields are unused by U-Boot. We just need to specify the
 633signature, a flag and the block offset and size of the SPL image.
 634
 635The header occupies a single block but we pad it out to 4 blocks. The header
 636is encoding using RC4 with the key 7c4e0304550509072d2c7b38170d1711. The SPL
 637image can be encoded too but we don't do that.
 638
 639The maximum size of u-boot-spl-dtb.bin which the boot ROM will read is 32KB,
 640or 0x40 blocks. This is a severe and annoying limitation. There may be a way
 641around this limitation, since there is plenty of SRAM, but at present the
 642board refuses to boot if this limit is exceeded.
 643
 644The image produced is padded up to a block boundary (512 bytes). It should be
 645written to the start of an SD card using dd.
 646
 647Since this image is set to load U-Boot from the SD card at block offset,
 648CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR, dd should be used to write
 649u-boot-dtb.img to the SD card at that offset. See above for instructions.
 650
 651rkspi
 652-----
 653
 654rkspi.c produces an image consisting of a header and u-boot-spl-dtb.bin. The
 655resulting image is then spread out so that only the first 2KB of each 4KB
 656sector is used. The header is the same as with rksd and the maximum size is
 657also 32KB (before spreading). The image should be written to the start of
 658SPI flash.
 659
 660See above for instructions on how to write a SPI image.
 661
 662rkmux.py
 663--------
 664
 665You can use this script to create #defines for SoC register access. See the
 666script for usage.
 667
 668
 669Device tree and driver model
 670----------------------------
 671
 672Where possible driver model is used to provide a structure to the
 673functionality. Device tree is used for configuration. However these have an
 674overhead and in SPL with a 32KB size limit some shortcuts have been taken.
 675In general all Rockchip drivers should use these features, with SPL-specific
 676modifications where required.
 677
 678GPT partition layout
 679----------------------------
 680
 681Rockchip use a unified GPT partition layout  in open source support.
 682With this GPT partition layout, uboot can be compatilbe with other components,
 683like miniloader, trusted-os, arm-trust-firmware.
 684
 685There are some documents about partitions in the links below.
 686http://rockchip.wikidot.com/partitions
 687
 688--
 689Jagan Teki <jagan@amarulasolutions.com>
 69027 Mar 2019
 691Simon Glass <sjg@chromium.org>
 69224 June 2015
 693