u-boot/board/theobroma-systems/puma_rk3399
Heiko Stuebner 9bbc13e790 rockchip: puma: remove separate fit generator
The introduction of the puma-specific generator was mainly a way
to split the pmu firmware from the ATF binary and not having to
distribute that 4GB (sparse) image that was created before moving
to the bl31.elf as base.

Looking at the publically available repository for that separate
pmu firmware
    https://git.theobroma-systems.com/rk3399-cortex-m0.git/
there is also no activity for 3 years and apart from some build
customizations no other changes were done.

And even then, if changes need to be made, this can very well also
happen in the atf context itself, so there is no real need to
diverge from the established build procedure and we can just go
back to using the main make_fit_atf.py script.

Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
2020-06-07 18:57:16 +08:00
..
Kconfig rockchip: puma: reorganize devicetrees to actually work and match upstream 2020-06-07 18:57:16 +08:00
MAINTAINERS rockchip: ARM64: split RK3399-Q7 board off the RK3399-EVB board 2017-04-15 10:13:17 -06:00
Makefile rockchip: ARM64: split RK3399-Q7 board off the RK3399-EVB board 2017-04-15 10:13:17 -06:00
puma-rk3399.c rockchip: puma: fix indentation of misc_init_r 2020-06-07 18:57:16 +08:00
README Kconfig: Add u-boot.itb BUILD_TARGET for Rockchip 2019-06-26 21:11:27 +08:00

Introduction
============

The RK3399-Q7 (Puma) is a system-on-module featuring the Rockchip
RK3399 in a Qseven-compatible form-factor.

RK3399-Q7 features:
	* CPU: ARMv8 64bit Big-Little architecture,
		* Big: dual-core Cortex-A72
		* Little: quad-core Cortex-A53
		* IRAM: 200KB
	* DRAM: 4GB-128MB dual-channel
	* eMMC: onboard eMMC
	* SD/MMC
	* GbE (onboard Micrel KSZ9031) Gigabit ethernet PHY
	* USB:
		* USB3.0 dual role port
		* 2x USB3.0 host, 1x USB2.0 host via onboard USB3.0 hub
	* Display: HDMI/eDP/MIPI
	* Camera: 2x CSI (one on the edge connector, one on the Q7 specified CSI ZIF)
	* NOR Flash: onboard SPI NOR
	* Companion Controller: onboard additional Cortex-M0 microcontroller
		* RTC
		* fan controller
		* CAN

Here is the step-by-step to boot to U-Boot on rk3399.

Get the Source and build ATF/Cortex-M0 binaries
===============================================

  > git clone git://git.theobroma-systems.com/arm-trusted-firmware.git
  > git clone git://git.theobroma-systems.com/rk3399-cortex-m0.git

Compile the ATF
===============

  > cd arm-trusted-firmware
  > make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3399 bl31
  > cp build/rk3399/release/bl31.bin ../u-boot/bl31-rk3399.bin

Compile the M0 firmware
=======================

  > cd ../rk3399-cortex-m0
  > make CROSS_COMPILE=arm-cortex_m0-eabi-
  > cp rk3399m0.bin ../u-boot

Compile the U-Boot
==================

  > cd ../u-boot
  > make CROSS_COMPILE=aarch64-linux-gnu- puma-rk3399_defconfig all

Package the image
=================

Creating a SPL image for SD-Card/eMMC
  > tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin spl_mmc.img
Creating a SPL image for SPI-NOR
  > tools/mkimage -n rk3399 -T rkspi -d spl/u-boot-spl.bin spl_nor.img
Create the FIT image containing U-Boot proper, ATF, M0 Firmware, devicetree
  > make CROSS_COMPILE=aarch64-linux-gnu-

Flash the image
===============

Copy the SPL to offset 32k for SD/eMMC, offset 0 for NOR-Flash and the FIT
image to offset 256k card.

SD-Card
-------

  > dd if=spl_mmc.img of=/dev/sdb seek=64
  > dd if=u-boot.itb of=/dev/sdb seek=512

eMMC
----

rkdeveloptool allows to flash the on-board eMMC via the USB OTG interface with
help of the Rockchip loader binary.

  > git clone https://github.com/rockchip-linux/rkdeveloptool
  > cd rkdeveloptool
  > autoreconf -i && ./configure && make
  > git clone https://github.com/rockchip-linux/rkbin.git
  > ./rkdeveloptool db rkbin/rk33/rk3399_loader_v1.08.106.bin
  > ./rkdeveloptool wl 64 ../spl_mmc.img
  > ./rkdeveloptool wl 512 ../u-boot.itb

NOR-Flash
---------

Writing the SPI NOR Flash requires a running U-Boot. For the sake of simplicity
we assume you have a SD-Card with a partition containing the required files
ready.

  > load mmc 1:1 ${kernel_addr_r} spl_nor.img
  > sf probe
  > sf erase 0 +$filesize
  > sf write $kernel_addr_r 0 ${filesize}
  > load mmc 1:1 ${kernel_addr_r} u-boot.itb
  > sf erase 0x40000 +$filesize
  > sf write $kernel_addr_r 0x40000 ${filesize}


Reboot the system and you should see a U-Boot console on UART0 (115200n8).