The current mainline support is experimental only and is not useful for
anything. It should provide a base on which to build.
-So far only support for the RK3288 is provided.
+So far only support for the RK3288 and RK3036 is provided.
Prerequisites
You will need:
- - Firefly RK3288 baord
+ - Firefly RK3288 board or something else with a supported RockChip SoC
- Power connection to 5V using the supplied micro-USB power cable
- Separate USB serial cable attached to your computer and the Firefly
(connect to the micro-USB connector below the logo)
Building
========
-At present three RK3288 boards are supported:
+At present nine RK3288 boards are supported:
+ - EVB RK3288 - use evb-rk3288 configuration
+ - Fennec RK3288 - use fennec-rk3288 configuration
- Firefly RK3288 - use firefly-rk3288 configuration
- - Radxa Rock 2 - also uses firefly-rk3288 configuration
- - Haier Chromebook - use chromebook_jerry configuration
+ - Hisense Chromebook - use chromebook_jerry configuration
+ - MiQi RK3288 - use miqi-rk3288 configuration
+ - phyCORE-RK3288 RDK - use phycore-rk3288 configuration
+ - PopMetal RK3288 - use popmetal-rk3288 configuration
+ - Radxa Rock 2 - use rock2 configuration
+ - Tinker RK3288 - use tinker-rk3288 configuration
-one RK3036 board is support:
+Two RK3036 board are supported:
- - EVB RK3036 - use evb-rk3036_defconfig configuration
+ - EVB RK3036 - use evb-rk3036 configuration
+ - Kylin - use kylin_rk3036 configuration
For example:
(or you can use another cross compiler if you prefer)
-Note that the Radxa Rock 2 uses the Firefly configuration for now as
-device tree files are not yet available for the Rock 2. Clearly the two
-have hardware differences, so this approach will break down as more drivers
-are added.
-
Writing to the board with USB
=============================
./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
sudo dd if=out of=/dev/sdc seek=64 && \
- sudo dd if=firefly-rk3288/u-boot-dtb.img of=/dev/sdc seek=256
+ sudo dd if=firefly-rk3288/u-boot-dtb.img of=/dev/sdc seek=16384
This puts the Rockchip header and SPL image first and then places the U-Boot
-image at block 256 (i.e. 128KB from the start of the SD card). This
+image at block 16384 (i.e. 8MB from the start of the SD card). This
corresponds with this setting in U-Boot:
- #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 256
+ #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x4000
Put this SD (or micro-SD) card into your board and reset it. You should see
something like:
- U-Boot SPL 2015.07-rc1-00383-ge345740-dirty (Jun 03 2015 - 11:04:40)
+ U-Boot 2016.01-rc2-00309-ge5bad3b-dirty (Jan 02 2016 - 23:41:59 -0700)
+ Model: Radxa Rock 2 Square
+ DRAM: 2 GiB
+ MMC: dwmmc@ff0f0000: 0, dwmmc@ff0c0000: 1
+ *** Warning - bad CRC, using default environment
+
+ In: serial
+ Out: vop@ff940000.vidconsole
+ Err: serial
+ Net: Net Initialization Skipped
+ No ethernet found.
+ Hit any key to stop autoboot: 0
+ =>
- U-Boot 2015.07-rc1-00383-ge345740-dirty (Jun 03 2015 - 11:04:40)
+The rockchip bootrom can load and boot an initial spl, then continue to
+load a second-level bootloader(ie. U-BOOT) as soon as it returns to bootrom.
+Therefore RK3288 has another loading sequence like RK3036. The option of
+U-Boot is controlled with this setting in U-Boot:
- DRAM: 2 GiB
- MMC:
- Using default environment
+ #define CONFIG_SPL_ROCKCHIP_BACK_TO_BROM
- In: serial@ff690000
- Out: serial@ff690000
- Err: serial@ff690000
- =>
+You can create the image via the following operations:
+
+ ./firefly-rk3288/tools/mkimage -n rk3288 -T rksd -d \
+ firefly-rk3288/spl/u-boot-spl-dtb.bin out && \
+ cat firefly-rk3288/u-boot-dtb.bin >> out && \
+ sudo dd if=out of=/dev/sdc seek=64
+
+If you have an HDMI cable attached you should see a video console.
For evb_rk3036 board:
./evb-rk3036/tools/mkimage -n rk3036 -T rksd -d evb-rk3036/spl/u-boot-spl.bin out && \
Note: rk3036 SDMMC and debug uart use the same iomux, so if you boot from SD, the
debug uart must be disabled
+
+Booting from an SD card on RK3288 with TPL
+==========================================
+
+Since the size of SPL can't be exceeded 0x8000 bytes in RK3288, it is not possible add
+new SPL features like Falcon mode or etc.
+
+So introduce TPL so-that adding new features to SPL is possible because now TPL should
+run minimal with code like DDR, clock etc and rest of new features in SPL.
+
+As of now TPL is added on Vyasa-RK3288 board.
+
+To write an image that boots from an SD card (assumed to be /dev/mmcblk0):
+
+ ./tools/mkimage -n rk3288 -T rksd -d ./tpl/u-boot-tpl.bin out &&
+ cat ./spl/u-boot-spl-dtb.bin >> out &&
+ sudo dd if=out of=/dev/mmcblk0 seek=64 &&
+ sudo dd if=u-boot-dtb.img of=/dev/mmcblk0 seek=16384
+
+Booting from an SD card on RK3188
+=================================
+
+For rk3188 boards the general storage onto the card stays the same as
+described above, but the image creation needs a bit more care.
+
+The bootrom of rk3188 expects to find a small 1kb loader which returns
+control to the bootrom, after which it will load the real loader, which
+can then be up to 29kb in size and does the regular ddr init. This is
+handled by a single image (built as the SPL stage) that tests whether
+it is handled for the first or second time via code executed from the
+boot0-hook.
+
+Additionally the rk3188 requires everything the bootrom loads to be
+rc4-encrypted. Except for the very first stage the bootrom always reads
+and decodes 2kb pages, so files should be sized accordingly.
+
+# copy tpl, pad to 1020 bytes and append spl
+tools/mkimage -n rk3188 -T rksd -d spl/u-boot-spl.bin out
+
+# truncate, encode and append u-boot.bin
+truncate -s %2048 u-boot.bin
+cat u-boot.bin | split -b 512 --filter='openssl rc4 -K 7C4E0304550509072D2C7B38170D1711' >> out
+
+
+Using fastboot on rk3288
+========================
+- Write GPT partition layout to mmc device which fastboot want to use it to
+store the image
+
+ => gpt write mmc 1 $partitions
+
+- Invoke fastboot command to prepare
+
+ => fastboot 1
+
+- Start fastboot request on PC
+
+ fastboot -i 0x2207 flash loader evb-rk3288/spl/u-boot-spl-dtb.bin
+
+You should see something like:
+
+ => fastboot 1
+ WARNING: unknown variable: partition-type:loader
+ Starting download of 357796 bytes
+ ..
+ downloading of 357796 bytes finished
+ Flashing Raw Image
+ ........ wrote 357888 bytes to 'loader'
+
Booting from SPI
================
Err: serial@ff690000
=>
-
Future work
===========
Immediate priorities are:
-- GPIO (driver exists but is lightly tested)
-- I2C (driver exists but is non-functional)
- USB host
- USB device
-- PMIC and regulators (only ACT8846 is supported at present)
-- LCD and HDMI
-- Run CPU at full speed
-- Ethernet
+- Run CPU at full speed (code exists but we only see ~60 DMIPS maximum)
- NAND flash
- Support for other Rockchip parts
- Boot U-Boot proper over USB OTG (at present only SPL works)
In general all Rockchip drivers should use these features, with SPL-specific
modifications where required.
+GPT partition layout
+----------------------------
+
+Rockchip use a unified GPT partition layout in open source support.
+With this GPT partition layout, uboot can be compatilbe with other components,
+like miniloader, trusted-os, arm-trust-firmware.
+
+There are some documents about partitions in the links below.
+http://rockchip.wikidot.com/partitions
--
Simon Glass <sjg@chromium.org>