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

U-Boot for Qnap TS433 Devices
=================================

This allows U-Boot to boot the Qnap TS433 NAS

Preparing the serial
--------------------

Qnap devices run their serial console with a 115200 baudrate. As the
binary DDR-init and maskrom-downloader expect a 1500000 rate, it is
necessary to adapt the binaries if their output is needed.

This can be done with a binary provided in the rkbin repository.
First the ddrbin_param.txt in the rkbin repo needs to be modified:

.. code-block:: bash

    diff --git a/tools/ddrbin_param.txt b/tools/ddrbin_param.txt
    index 0dfdd318..82ade7e7 100644
    --- a/tools/ddrbin_param.txt
    +++ b/tools/ddrbin_param.txt
    @@ -11,7 +11,7 @@ lp5_freq=

     uart id=
     uart iomux=
    -uart baudrate=
    +uart baudrate=115200

     sr_idle=
     pd_idle=

And after that the ddrbin_tool binary can be used to modify apply this
modification and also a new maskrom downloader can be build:

.. code-block:: bash

    $ tools/ddrbin_tool rk3568 tools/ddrbin_param.txt bin/rk35/rk3568_ddr_1560MHz_v1.21.bin
    $ tools/boot_merger RKBOOT/RK3568MINIALL.ini

Building U-Boot
---------------

.. code-block:: bash

    $ export CROSS_COMPILE=aarch64-linux-gnu-
    $ export BL31=../rkbin/bin/rk35/rk3568_bl31_v1.34.elf
    $ export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3568_ddr_1056MHz_v1.13.bin
    $ make qnap-ts433-rk3568_defconfig
    $ make

This will build ``u-boot-rockchip.bin`` which can be written to the
on-board eMMC.

Image installation
------------------

The Qnap thankfully provides an easily accessible serial header as well as
a very user-friendly jumper-header to bring the device into maskrom mode.

To access both, the drive trays need to be removed. Looking at the board,
through the upper cutout of the metal frame the white 4-port serial-header
can be seen next to a barcode sticker. It's pinout is as follows:

.. code-block:: none

   ,_  _.
   |1234|  1=TX 2=VCC
   `----'  3=RX 4=GND


Directly below it, the mentioned 2-pin jumper header can be seen.

To write your u-boot to the device, it needs to be powered off first. Then
a jumper or suitable cable needs to be used to connect the two pins of the
maskrom header. Turning on the device now will start it in maskrom mode.

It is important that the jumper gets removed after that stop and before
actually trying to write to the emmc.

The front usb-port needs to be connected to the host with an USB-A-to-A
cable to allow flashing.

The flashing itself is done via rkdeveloptool, which can be found for
example as package of that name in Debian-based distributions:

.. code-block:: bash

    $ rkdeveloptool db rk356x_spl_loader_v1.21.113.bin
    $ rkdeveloptool wl 64 u-boot-rockchip.bin
