Experimental U-Boot SPL Support

There’s some experimental support for some Amlogic SoCs, in U-Boot SPL. It replaces the proprietary bl2.bin blob used for DRAM init. Currently Meson GX SoCs (GXBB, GXL) are supported.

A subset of Amlogic boards have SPL enabled. These boards have been tested and are known to work to an extent.

Building Arm Trusted Firmware (TF-A)

This U-Boot SPL port requires the BL31 stage of mainline Arm Trusted Firmware-A firmware. It provides an open source implementation of secure software for Armv8-A. Build it with:

$ git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
$ cd trusted-firmware-a
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=your_soc AML_STDPARAMS=1

Replace your_soc with the SoC target you wish to build for. For GXBB it’s gxbb and for GXL it’s gxl.

Building a bl30_new.bin binary

bl30_new.bin has both bl30.bin and bl301.bin binary blobs bundled. The former is the proper system control processor firmware and the latter is a “plug-in” for board-specific DVFS/suspend-resume parameters. For more info you may wish to read this page: Pre-Generated FIP File Repo.

To build using the FIP file repo, simply issue the following commands:

$ cd amlogic-boot-fip/your_board
$ make bl30_new.bin

U-Boot compilation

U-Boot SPL is not enabled by default, instead there are config fragments that can be used to enable it, with per-board configuration:

  • spl-libretech-cc-1gb.config: 1 GB LePotato board

  • spl-libretech-cc-2gb.config: 2 GB LePotato board

  • spl-odroid-c2.config: ODROID-C2

  • spl-videostrong-kii-pro.config: Videostrong KII Pro

Pick one of them then:

$ export CROSS_COMPILE=aarch64-linux-gnu-
$ export BL31=path/to/tf-a/bl31.bin                 # Upstream TF-A BL31 binary
$ export SCP=path/to/bl30_new.bin                   # bl30_new.bin binary
$ make <yourboardname>_defconfig spl-<yourboardname>.config
$ make

Write to SD:

$ DEV=/dev/boot_device
$ dd if=u-boot-meson-with-spl.bin of=$DEV conv=fsync,notrunc bs=512 seek=1