.. SPDX-License-Identifier: GPL-2.0+

SOM-RK3588-Q7 Tiger
===================

The RK3588-Q7 SoM is a Qseven-compatible (70mm x 70mm, MXM-230
connector) system-on-module from Theobroma Systems, featuring the
Rockchip RK3588.

It provides the following feature set:

 * up to 16GB LPDDR4x
 * on-module eMMC
 * SD card (on a baseboard) via edge connector
 * Gigabit Ethernet with on-module GbE PHY
 * HDMI/eDP
 * MIPI-DSI
 * 4x MIPI-CSI (3x on FPC connectors, 1x over Q7)
 * HDMI input over FPC connector
 * CAN
 * USB

   - 1x USB 3.0 dual-role (direct connection)
   - 2x USB 3.0 host + 1x USB 2.0 host

 * PCIe

   - 1x PCIe 2.1 Gen3, 4 lanes
   - 2xSATA / 2x PCIe 2.1 Gen1, 2 lanes

 * on-module ATtiny816 companion controller, implementing:

   - low-power RTC functionality (ISL1208 emulation)
   - fan controller (AMC6821 emulation)

 * on-module Secure Element with Global Platform 2.2.1 compliant
   JavaCard environment

Here is the step-by-step to boot to U-Boot on SOM-RK3588-Q7 Tiger from Theobroma
Systems.

Get DDR init (TPL) binary
-------------------------

.. prompt:: bash

   git clone https://github.com/rockchip-linux/rkbin
   cd rkbin
   export ROCKCHIP_TPL=$(readlink -f bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v*.bin | head -1)
   sed -i 's/^uart baudrate=.*$/uart baudrate=115200/' tools/ddrbin_param.txt
   sed -i 's/^uart iomux=.*$/uart iomux=2/' tools/ddrbin_param.txt
   python3 ./tools/ddrbin_tool.py rk3588 tools/ddrbin_param.txt "$ROCKCHIP_TPL"
   ./tools/boot_merger RKBOOT/RK3588MINIALL.ini
   export RKDB=$(readlink -f rk3588_spl_loader_v*.bin | head -1)

This will setup all required external dependencies for compiling U-Boot. This will
be updated in the future once U-Boot gains support for open-source DRAM initialization
in TPL.

Get TF-A
--------

There are two possible options, pick one or the other. Note that the instructions need
to be run from the ``rkbin`` directory.

Prebuilt binary from Rockchip
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. prompt:: bash

   export BL31=$(readlink -f bin/rk35/rk3588_bl31_v*.elf | head -1)

Upstream
~~~~~~~~

.. prompt:: bash

   cd ../
   git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
   cd trusted-firmware-a
   make CROSS_COMPILE=aarch64-linux-gnu- PLAT=rk3588 bl31
   export BL31=$PWD/build/rk3588/release/bl31/bl31.elf

Build U-Boot
------------

.. prompt:: bash

   cd ../u-boot
   make CROSS_COMPILE=aarch64-linux-gnu- tiger-rk3588_defconfig all

.. note::
   If using upstream TF-A, one should disable ``SPL_ATF_NO_PLATFORM_PARAM`` symbol in
   U-Boot config (via e.g. ``make CROSS_COMPILE=aarch64-linux-gnu- menuconfig``) which
   will, among other things, enable console output in TF-A.

This will build ``u-boot-rockchip.bin`` which can be written to an MMC device
(eMMC or SD card).

Flash the image
---------------

Copy ``u-boot-rockchip.bin`` to offset 32k for SD/eMMC.

SD-Card
~~~~~~~

.. prompt:: bash

   dd if=u-boot-rockchip.bin of=/dev/sdX seek=64

.. note::

   Replace ``/dev/sdX`` to match your SD card kernel device.

eMMC
~~~~

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

To enter the USB flashing mode on Haikou baseboard, remove any SD card, insert a
micro-USB cable in the ``Q7 USB P1`` connector (P8), move ``SW5`` switch into
``BIOS Disable`` mode, power cycle or reset the board and move ``SW5`` switch
back to ``Normal Boot`` mode. A new USB device should have appeared on your PC
(check with ``lsusb -d 2207:350b``).

To flash U-Boot on the eMMC with ``rkdeveloptool``:

.. prompt:: bash

   git clone https://github.com/rockchip-linux/rkdeveloptool
   cd rkdeveloptool
   autoreconf -i && CPPFLAGS=-Wno-format-truncation ./configure && make
   ./rkdeveloptool db "$RKDB"
   ./rkdeveloptool wl 64 ../u-boot-rockchip.bin
