mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-24 03:53:31 +00:00
6b403ca4dc
Add code to support FWU_MULTI_BANK_UPDATE. The platform does not have gpt-partition storage for Banks and MetaData, rather it used SPI-NOR backed mtd regions for the purpose. Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
229 lines
7.4 KiB
ReStructuredText
229 lines
7.4 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0+
|
|
|
|
Introduction
|
|
============
|
|
|
|
DeveloperBox is a certified 96boards Enterprise Edition board. The board/SoC has: -
|
|
|
|
* Socionext SC2A11 24-cores ARM Cortex-A53 on tbe Mini-ATX form factor motherboard
|
|
* 4 DIMM slots (4GB DDR4-2400 UDIMM shipped by default)
|
|
* 1 4xPCIe Gen2 slot and 2 1xPCIe Gen2 slots
|
|
(1x slots are connected via PCIe bridge chip)
|
|
* 4 USB-3.0 ports
|
|
* 2 SATA ports
|
|
* 1 GbE network port
|
|
* 1 USB-UART serial port (micro USB)
|
|
* 64MB SPI NOR Flash
|
|
* 8GB eMMC Flash Storage
|
|
* 96boards LS connector
|
|
|
|
The DeveloperBox schematic can be found here: -
|
|
https://www.96boards.org/documentation/enterprise/developerbox/hardware-docs/mzsc2am_v03_20180115_a.pdf
|
|
|
|
And the other documents can be found here: -
|
|
https://www.96boards.org/documentation/enterprise/developerbox/
|
|
|
|
|
|
Currently, the U-Boot port supports: -
|
|
|
|
* USB
|
|
* eMMC
|
|
* SPI-NOR
|
|
* SATA
|
|
* GbE
|
|
|
|
The DeveloperBox boots the TF-A and EDK2 as a main bootloader by default.
|
|
The DeveloperBox U-Boot port will replace the EDK2 and boot from TF-A as
|
|
BL33, but no need to combine with it.
|
|
|
|
Compile from source
|
|
===================
|
|
|
|
You can build U-Boot without any additinal source code.::
|
|
|
|
cd u-boot
|
|
export ARCH=arm64
|
|
export CROSS_COMPILE=aarch64-linux-gnu-
|
|
make SynQuacer_defconfig
|
|
make -j `noproc`
|
|
|
|
Then, expand the binary to 1MB for preparing flash.::
|
|
|
|
cp u-boot.bin SPI_NOR_UBOOT.fd
|
|
truncate -s 1M SPI_NOR_UBOOT.fd
|
|
|
|
Installation
|
|
============
|
|
|
|
You can install the SNI_NOR_UBOOT.fd via NOR flash writer.
|
|
|
|
Flashing the U-Boot image on DeveloperBox requires a 96boards UART mezzanine
|
|
or other mezzanine which can connect to the LS-UART0 port.
|
|
Connect USB cable from host to the LS-UART0 and set DSW2-7 to ON, and turn the
|
|
board on again. The flash writer program will be started automatically;
|
|
don't forget to turn the DSW2-7 off again after flashing.
|
|
|
|
*!!CAUTION!! If you write the U-Boot image on wrong address, the board can
|
|
be bricked. See below page if you need to recover the bricked board. See
|
|
the following page for more details*
|
|
|
|
https://www.96boards.org/documentation/enterprise/developerbox/installation/board-recovery.md.html
|
|
|
|
When the serial flasher is running correctly it will show the following boot
|
|
messages printed to the LS-UART0 console::
|
|
|
|
|
|
/*------------------------------------------*/
|
|
/* SC2A11 "SynQuacer" series Flash writer */
|
|
/* */
|
|
/* Version: cd254ac */
|
|
/* Build: 12/15/17 11:25:45 */
|
|
/*------------------------------------------*/
|
|
|
|
Command Input >
|
|
|
|
Once the flasher tool is running we are ready flash the UEFI image::
|
|
|
|
flash rawwrite 200000 100000
|
|
>> Send SPI_NOR_UBOOT.fd via XMODEM (Control-A S in minicom) <<
|
|
|
|
*!!NOTE!! The flasher command parameter is different from the command for
|
|
board recovery. U-Boot uses the offset 200000 (2-five-0, 2M in hex) and the
|
|
size 100000 (1-five-0, 1M in hex).*
|
|
|
|
After transferring the SPI_NOR_UBOOT.fd, turn off the DSW2-7 and
|
|
reset the board.
|
|
|
|
|
|
Enable FWU Multi Bank Update
|
|
============================
|
|
|
|
DeveloperBox supports the FWU Multi Bank Update. You *MUST* update both
|
|
*SCP firmware* and *TF-A* for this feature. This will change the layout and
|
|
the boot process but you can switch back to the normal one by changing
|
|
the DSW 1-4 off.
|
|
|
|
Configure U-Boot
|
|
----------------
|
|
|
|
To enable the FWU Multi Bank Update on the DeveloperBox board the
|
|
configs/synquacer_developerbox_defconfig enables default FWU configuration ::
|
|
|
|
CONFIG_FWU_MULTI_BANK_UPDATE=y
|
|
CONFIG_FWU_MDATA=y
|
|
CONFIG_FWU_MDATA_MTD=y
|
|
CONFIG_FWU_NUM_BANKS=2
|
|
CONFIG_FWU_NUM_IMAGES_PER_BANK=1
|
|
CONFIG_CMD_FWU_METADATA=y
|
|
|
|
And build it::
|
|
|
|
cd u-boot/
|
|
export ARCH=arm64
|
|
export CROSS_COMPILE=aarch64-linux-gnu-
|
|
make synquacer_developerbox_defconfig
|
|
make -j `noproc`
|
|
cd ../
|
|
|
|
By default, the CONFIG_FWU_NUM_BANKS and CONFIG_FWU_NUM_IMAGES_PER_BANKS are
|
|
set to 2 and 1 respectively. This uses FIP (Firmware Image Package) type image
|
|
which contains TF-A, U-Boot and OP-TEE (the OP-TEE is optional).
|
|
You can use fiptool to compose the FIP image from those firmware images.
|
|
|
|
Rebuild SCP firmware
|
|
--------------------
|
|
|
|
Rebuild SCP firmware which supports FWU Multi Bank Update as below::
|
|
|
|
cd SCP-firmware/
|
|
OUT=./build/product/synquacer
|
|
ROMFW_FILE=$OUT/scp_romfw/$SCP_BUILD_MODE/bin/scp_romfw.bin
|
|
RAMFW_FILE=$OUT/scp_ramfw/$SCP_BUILD_MODE/bin/scp_ramfw.bin
|
|
ROMRAMFW_FILE=scp_romramfw_release.bin
|
|
|
|
make CC=arm-none-eabi-gcc PRODUCT=synquacer MODE=release
|
|
tr "\000" "\377" < /dev/zero | dd of=${ROMRAMFW_FILE} bs=1 count=196608
|
|
dd if=${ROMFW_FILE} of=${ROMRAMFW_FILE} bs=1 conv=notrunc seek=0
|
|
dd if=${RAMFW_FILE} of=${ROMRAMFW_FILE} bs=1 seek=65536
|
|
cd ../
|
|
|
|
And you can get the `scp_romramfw_release.bin` file.
|
|
|
|
Rebuild OPTEE firmware
|
|
----------------------
|
|
|
|
Rebuild OPTEE to use in new-layout FIP as below::
|
|
|
|
cd optee_os/
|
|
make -j`nproc` PLATFORM=synquacer ARCH=arm \
|
|
CROSS_COMPILE64=aarch64-linux-gnu- CFG_ARM64_core=y \
|
|
CFG_CRYPTO_WITH_CE=y CFG_CORE_HEAP_SIZE=524288 CFG_CORE_DYN_SHM=y \
|
|
CFG_CORE_ARM64_PA_BITS=48 CFG_TEE_CORE_LOG_LEVEL=1 CFG_TEE_TA_LOG_LEVEL=1
|
|
cp out/arm-plat-synquacer/core/tee-pager_v2.bin ../arm-trusted-firmware/
|
|
|
|
The produced `tee-pager_v2.bin` is to be used while building TF-A next.
|
|
|
|
|
|
Rebuild TF-A and FIP
|
|
--------------------
|
|
|
|
Rebuild TF-A which supports FWU Multi Bank Update as below::
|
|
|
|
cd arm-trusted-firmware/
|
|
make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` PLAT=synquacer \
|
|
TRUSTED_BOARD_BOOT=1 SPD=opteed SQ_RESET_TO_BL2=1 GENERATE_COT=1 \
|
|
MBEDTLS_DIR=../mbedtls BL32=tee-pager_v2.bin \
|
|
BL33=../u-boot/u-boot.bin all fip fiptool
|
|
|
|
And make a FIP image.::
|
|
|
|
cp build/synquacer/release/fip.bin SPI_NOR_NEWFIP.fd
|
|
tools/fiptool/fiptool update --tb-fw build/synquacer/release/bl2.bin SPI_NOR_NEWFIP.fd
|
|
|
|
UUIDs for the FWU Multi Bank Update
|
|
-----------------------------------
|
|
|
|
FWU multi-bank update requires some UUIDs. The DeveloperBox platform uses
|
|
following UUIDs.
|
|
|
|
- Location UUID for the FIP image: 17e86d77-41f9-4fd7-87ec-a55df9842de5
|
|
- Image type UUID for the FIP image: 10c36d7d-ca52-b843-b7b9-f9d6c501d108
|
|
- Image UUID for Bank0 : 5a66a702-99fd-4fef-a392-c26e261a2828
|
|
- Image UUID for Bank1 : a8f868a1-6e5c-4757-878d-ce63375ef2c0
|
|
|
|
These UUIDs are used for making a FWU metadata image.
|
|
|
|
u-boot$ ./tools/mkfwumdata -i 1 -b 2 \
|
|
17e86d77-41f9-4fd7-87ec-a55df9842de5,10c36d7d-ca52-b843-b7b9-f9d6c501d108,5a66a702-99fd-4fef-a392-c26e261a2828,a8f868a1-6e5c-4757-878d-ce63375ef2c0 \
|
|
../devbox-fwu-mdata.img
|
|
|
|
Create Accept & Revert capsules
|
|
|
|
u-boot$ ./tools/mkeficapsule -A -g 7d6dc310-52ca-43b8-b7b9-f9d6c501d108 NEWFIP_accept.Cap
|
|
u-boot$ ./tools/mkeficapsule -R NEWFIP_revert.Cap
|
|
|
|
Install via flash writer
|
|
------------------------
|
|
|
|
As explained in above section, the new FIP image and the FWU metadata image
|
|
can be installed via NOR flash writer.
|
|
|
|
Once the flasher tool is running we are ready to flash the images.::
|
|
Write the FIP image to the Bank-0 & 1 at 6MB and 10MB offset.::
|
|
|
|
flash rawwrite 600000 180000
|
|
flash rawwrite a00000 180000
|
|
>> Send SPI_NOR_NEWFIP.fd via XMODEM (Control-A S in minicom) <<
|
|
|
|
flash rawwrite 500000 1000
|
|
flash rawwrite 530000 1000
|
|
>> Send devbox-fwu-mdata.img via XMODEM (Control-A S in minicom) <<
|
|
|
|
And write the new SCP firmware.::
|
|
|
|
flash write cm3
|
|
>> Send scp_romramfw_release.bin via XMODEM (Control-A S in minicom) <<
|
|
|
|
At last, turn on the DSW 3-4 on the board, and reboot.
|
|
Note that if DSW 3-4 is turned off, the DeveloperBox will boot from
|
|
the original EDK2 firmware (or non-FWU U-Boot if you already installed).
|