[PATCH v7 00/19] Add Rikomagic MK808 board

Johan Jonker jbx6244 at gmail.com
Tue Jan 11 22:18:24 CET 2022


MK808 is a RK3066-based board with 1 USB host and 1 USB OTG port,
HDMI and a micro-SD card slot. It also includes on-board NAND
and 1GB of SDRAM.

===

Boot procedure flow for a Rockchip rk3066 SoC:

1.Read 2K SDRAM initialization image code to internal SRAM
2.Run image code to do SDRAM initialization
3.Transfer boot image code to SDRAM
4.Run boot image code

Supported system boot from the following devices:
Nand Flash
SPI nor Flash
eMMC device
UART interface

If all boot options fail then enter into BootROM mode on the USB OTG port.
Unlike later SoC models the rk3066 BootROM doesn't have SDMMC support.

The size of a full U-boot binary is too large for the internal SDRAM memory.
Of that 64k size only 32kb sram - 2kb bootrom is available for the first stage.

Similar to the already supported rk3188, the BootROM will attempt to load up the first stage
image in two steps: first 1KB to offset 0x800 in the SRAM and
then the remainder to offset 0xc00 in the SRAM.
It always enters at offset 0x804 after a 4 ASCII character "RK30" header.

With CONFIG_TPL_ROCKCHIP_EARLYRETURN_TO_BROM=y this first stage is combined with
the U-boot TPL binary (u-boot-tpl.bin).

For rk3066 with NAND flash and U-boot this gives the following stages:

- TPL: init external SDRAM
- SPL: init SDMMC and read U-boot from SD CARD.
- U-boot: read Linux kernel from SD CARD.
- Kernel

Additionally the rk3066 requires everything the BootROM loads to be
RC4-encrypted.

===

Boot solution with full U-boot stored on SD CARD:

Compile commands(U-boot):

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make mk808_defconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make all

===

Size of SPL and TPL must be aligned to 2kb.
If bricked and no BootROM mode shows up then connect pin 8 and 9 of the NAND flash
with a needle while reconnecting to the USB OTG port to a PC.

===

Show connected devices with:

lsusb

Bus 001 Device 004: ID 2207:300a Fuzhou Rockchip Electronics Company RK3066 in Mask ROM mode

===

Program commands with ./flash.sh:

#!/bin/sh

printf "RK30" > tplspl.bin
dd if=u-boot-tpl.bin >> tplspl.bin
truncate -s %2048 tplspl.bin
truncate -s %2048 u-boot-spl.bin
../tools/boot_merger --verbose config-flash.ini
../tools/upgrade_tool ul ./RK30xxLoader_uboot.bin

===

config-flash.ini:

[CHIP_NAME]
NAME=RK30
[VERSION]
MAJOR=2
MINOR=21
[CODE471_OPTION]
NUM=1
Path1=30_LPDDR2_300MHz_DD.bin
[CODE472_OPTION]
NUM=1
Path1=rk30usbplug.bin
[LOADER_OPTION]
NUM=2
LOADER1=FlashData
LOADER2=FlashBoot
FlashData=tplspl.bin
FlashBoot=u-boot-spl.bin
[OUTPUT]
PATH=RK30xxLoader_uboot.bin

===

Partition Map for MMC device 0  --   Partition Type: EFI

Part	Start LBA	End LBA		Name
	Attributes
	Type GUID
	Partition GUID
  1	0x00000040	0x00001f7f	"loader1"
  2	0x00004000	0x00005fff	"loader2"
  3	0x00006000	0x00007fff	"trust"
  4	0x00008000	0x0003ffff	"boot"
  5	0x00040000	0x00ed7fde	"rootfs"

Make sure boot and esp flag are set for boot partition.
Loader1 not used by

===

Boot partition:

extlinux -- extlinux.conf
zImage
rk3066a-mk808.dtb

===

extlinux.conf:

label kernel
    kernel /zImage
    fdt /rk3066a-mk808.dtb
    append root=LABEL=linuxroot init=/sbin/init rootfstype=ext4 rootwait

===

Program commands (SD CARD with GPT partition):

sudo dd if=u-boot-dtb.img of=/dev/sda seek=16384

===

TODO:
  Get rid of message: set_state_simple op missing
  Better program flow/tools
  USB
  NAND
  etc etc

===

Johan Jonker (15):
  rockchip: rk3066-power: sync power domain dt-binding header from Linux
  rockchip: include: add GRF_GPIO3B_IOMUX to grf_rk3066.h
  rockchip: clk: add SCLK_TIMER[0..2] to clk_rk3066.c
  rockchip: clk: add SCLK_UART[0..3] to clk_rk3066.c
  rockchip: rk3066: fix assigned-clocks rk3066_clk_set_rate
  arm: dts: rockchip: fix rk3xxx-u-boot.dtsi
  arm: dts: rockchip: add rk3066a.dtsi
  arm: dts: rockchip: add rk3066a-mk808.dts
  rockchip: rk3066: add include
  rockchip: rk3066: add rk3066_common.h include
  rockchip: rk3066: add core support
  rockchip: rk3066: add Rikomagic MK808 board
  rockchip: rk3066: add mk808_defconfig
  rockchip: tools: add rk3066 support to rkcommon.c
  doc: rockchip: add rk3066 Rikomagic MK808

Paweł Jarosz (4):
  rockchip: rk3066: add grf header file
  rockchip: rk3066: add clock driver for rk3066 soc
  rockchip: rk3066: add rk3066 pinctrl driver
  rockchip: rk3066: add sdram driver

 arch/arm/dts/Makefile                         |   3 +
 arch/arm/dts/rk3066a-mk808-u-boot.dtsi        |  42 +
 arch/arm/dts/rk3066a-mk808.dts                | 224 +++++
 arch/arm/dts/rk3066a-u-boot.dtsi              |   3 +
 arch/arm/dts/rk3066a.dtsi                     | 899 ++++++++++++++++++
 arch/arm/dts/rk3xxx-u-boot.dtsi               |   8 +-
 arch/arm/include/asm/arch-rk3066/boot0.h      |   8 +
 arch/arm/include/asm/arch-rk3066/gpio.h       |   8 +
 arch/arm/include/asm/arch-rk3066/timer.h      |   6 +
 .../include/asm/arch-rockchip/cru_rk3066.h    | 203 ++++
 .../include/asm/arch-rockchip/grf_rk3066.h    | 249 +++++
 arch/arm/mach-rockchip/Kconfig                |  23 +
 arch/arm/mach-rockchip/Makefile               |   1 +
 arch/arm/mach-rockchip/rk3066/Kconfig         |  39 +
 arch/arm/mach-rockchip/rk3066/Makefile        |   5 +
 arch/arm/mach-rockchip/rk3066/clk_rk3066.c    |  33 +
 arch/arm/mach-rockchip/rk3066/rk3066.c        |  49 +
 arch/arm/mach-rockchip/rk3066/syscon_rk3066.c |  55 ++
 board/rikomagic/mk808/Kconfig                 |  15 +
 board/rikomagic/mk808/MAINTAINERS             |   6 +
 board/rikomagic/mk808/Makefile                |   3 +
 board/rikomagic/mk808/mk808.c                 |   3 +
 configs/mk808_defconfig                       | 101 ++
 doc/board/rockchip/rockchip.rst               |   2 +
 drivers/clk/rockchip/Makefile                 |   1 +
 drivers/clk/rockchip/clk_rk3066.c             | 717 ++++++++++++++
 drivers/pinctrl/rockchip/Makefile             |   1 +
 drivers/pinctrl/rockchip/pinctrl-rk3066.c     | 113 +++
 drivers/ram/rockchip/Makefile                 |   1 +
 drivers/ram/rockchip/sdram_rk3066.c           | 892 +++++++++++++++++
 include/configs/mk808.h                       |   9 +
 include/configs/rk3066_common.h               |  56 ++
 include/dt-bindings/power/rk3066-power.h      |  22 +
 tools/rkcommon.c                              |   1 +
 34 files changed, 3797 insertions(+), 4 deletions(-)
 create mode 100644 arch/arm/dts/rk3066a-mk808-u-boot.dtsi
 create mode 100644 arch/arm/dts/rk3066a-mk808.dts
 create mode 100644 arch/arm/dts/rk3066a-u-boot.dtsi
 create mode 100644 arch/arm/dts/rk3066a.dtsi
 create mode 100644 arch/arm/include/asm/arch-rk3066/boot0.h
 create mode 100644 arch/arm/include/asm/arch-rk3066/gpio.h
 create mode 100644 arch/arm/include/asm/arch-rk3066/timer.h
 create mode 100644 arch/arm/include/asm/arch-rockchip/cru_rk3066.h
 create mode 100644 arch/arm/include/asm/arch-rockchip/grf_rk3066.h
 create mode 100644 arch/arm/mach-rockchip/rk3066/Kconfig
 create mode 100644 arch/arm/mach-rockchip/rk3066/Makefile
 create mode 100644 arch/arm/mach-rockchip/rk3066/clk_rk3066.c
 create mode 100644 arch/arm/mach-rockchip/rk3066/rk3066.c
 create mode 100644 arch/arm/mach-rockchip/rk3066/syscon_rk3066.c
 create mode 100644 board/rikomagic/mk808/Kconfig
 create mode 100644 board/rikomagic/mk808/MAINTAINERS
 create mode 100644 board/rikomagic/mk808/Makefile
 create mode 100644 board/rikomagic/mk808/mk808.c
 create mode 100644 configs/mk808_defconfig
 create mode 100644 drivers/clk/rockchip/clk_rk3066.c
 create mode 100644 drivers/pinctrl/rockchip/pinctrl-rk3066.c
 create mode 100644 drivers/ram/rockchip/sdram_rk3066.c
 create mode 100644 include/configs/mk808.h
 create mode 100644 include/configs/rk3066_common.h
 create mode 100644 include/dt-bindings/power/rk3066-power.h

-- 
2.20.1



More information about the U-Boot mailing list