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