mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-30 15:03:18 +00:00
115 lines
4.8 KiB
ReStructuredText
115 lines
4.8 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0
|
||
|
.. Copyright (C) 2021 Arm Ltd.
|
||
|
|
||
|
Arm Juno development platform
|
||
|
=============================
|
||
|
|
||
|
The `Juno development board`_ is an open, vendor-neutral, Armv8-A development
|
||
|
platform, made by Arm Ltd. It is part of the Versatile Express family.
|
||
|
There are three revisions of the board:
|
||
|
|
||
|
* Juno r0, with two Cortex-A57 and four Cortex-A53 cores, without PCIe.
|
||
|
* Juno r1, with two Cortex-A57 and four Cortex-A53 cores, in later silicon
|
||
|
revisions, and with PCIe slots, Gigabit Ethernet and two SATA ports.
|
||
|
* Juno r2, with two Cortex-A72 and four Cortex-A53 cores, otherwise the
|
||
|
same as r1.
|
||
|
|
||
|
Among other things, the motherboard contains a management controller (MCC),
|
||
|
an FPGA providing I/O interfaces (IOFPGA) and 64MB of NOR flash. The provided
|
||
|
platform devices resemble the VExpress peripherals.
|
||
|
The actual SoC also contains a Cortex-M3 based System Control Processor (SCP).
|
||
|
The `V2M-Juno TRM`_ contains more technical details.
|
||
|
|
||
|
U-Boot build
|
||
|
------------
|
||
|
There is only one defconfig and one binary build that covers all three board
|
||
|
revisions, so to generate the needed ``u-boot.bin``:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
$ make vexpress_aemv8a_juno_defconfig
|
||
|
$ make
|
||
|
|
||
|
The automatic distro boot sequence looks for UEFI boot applications and
|
||
|
``boot.scr`` scripts on various boot media, starting with USB, then on disks
|
||
|
connected to the two SATA ports, PXE, DHCP and eventually on the NOR flash.
|
||
|
|
||
|
U-Boot installation
|
||
|
-------------------
|
||
|
This assumes there is some firmware on the SD card or NOR flash (see below
|
||
|
for more details). The U-Boot binary is included in the Trusted Firmware
|
||
|
FIP image, so after building U-Boot, this needs to be repackaged or recompiled.
|
||
|
|
||
|
The NOR flash will be updated by the MCC, based on the content of a micro-SD
|
||
|
card, which is exported as a USB mass storage device via the rear USB-B
|
||
|
socket. So to access that SD card, connect a cable to some host computer, and
|
||
|
mount the FAT16 partition of the UMS device.
|
||
|
If there is no device, check the upper serial port for a prompt, and
|
||
|
explicitly enable the USB interface::
|
||
|
|
||
|
Cmd> usb_on
|
||
|
Enabling debug USB...
|
||
|
|
||
|
Repackaging an existing FIP image
|
||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
To prevent problems, it is probably a good idea to backup the existing firmware,
|
||
|
for instance by just copying the entire ``SOFTWARE/`` directory, or at least
|
||
|
the current ``fip.bin``, beforehand.
|
||
|
|
||
|
To just replace the BL33 image in the exising FIP image, you can use
|
||
|
`fiptool`_ from the Trusted Firmware repository, on the image file:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
|
||
|
cd trusted-firmware-a
|
||
|
make fiptool
|
||
|
tools/fiptool/fiptool update --nt-fw=/path/to/your/u-boot.bin /mnt/juno/SOFTWARE/fip.bin
|
||
|
|
||
|
Unmount the USB mass storage device and reboot the board, the new ``fip.bin``
|
||
|
will be automatically written to the NOR flash and then used.
|
||
|
|
||
|
Rebuilding Trusted Firmware
|
||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
|
You can also generate a new FIP image by compiling Arm Trusted Firmware,
|
||
|
and providing ``u-boot.bin`` as the BL33 file. For that you can either build
|
||
|
the required `SCP firmware`_ yourself, or just extract the existing
|
||
|
version from your ``fip.bin``, using `fiptool`_ (see above):
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
mkdir /tmp/juno; cd /tmp/juno
|
||
|
fiptool unpack /mnt/juno/SOFTWARE/fip.bin
|
||
|
|
||
|
Then build TF-A:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
|
||
|
cd trusted-firmware-a
|
||
|
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=juno DEBUG=1 \
|
||
|
SCP_BL2=/tmp/juno/scp-fw.bin BL33=/path/to/your/u-boot.bin fiptool all fip
|
||
|
cp build/juno/debug/bl1.bin build/juno/debug/fip.bin /mnt/juno/SOFTWARE
|
||
|
|
||
|
Then umount the USB device, and reboot, as above.
|
||
|
|
||
|
Device trees
|
||
|
------------
|
||
|
The device tree files for the boards are maintained in the Linux kernel
|
||
|
repository. They end up in the ``SOFTWARE/`` directory of the SD card, as
|
||
|
``juno.dtb``, ``juno-r1.dtb``, and ``juno-r2.dtb``, respectively. The MCC
|
||
|
firmware will look into the images.txt file matching the board revision, from
|
||
|
the ``SITE1/`` directory. Each version there will reference its respective DTB
|
||
|
file in ``SOFTWARE/``, and so the correct version will end in the NOR flash, in
|
||
|
the ``board.dtb`` partition. U-Boot picks its control DTB from there, you can
|
||
|
pass this on to a kernel using ``$fdtcontroladdr``.
|
||
|
|
||
|
You can update the DTBs anytime, by building them using the ``dtbs`` make
|
||
|
target from a Linux kernel tree, then just copying the generated binaries
|
||
|
to the ``SOFTWARE/`` directory of the SD card.
|
||
|
|
||
|
.. _`Juno development board`: https://developer.arm.com/tools-and-software/development-boards/juno-development-board
|
||
|
.. _`V2M-Juno TRM`: https://developer.arm.com/documentation/100113/latest
|
||
|
.. _`fiptool`: https://github.com/ARM-software/arm-trusted-firmware/tree/master/tools/fiptool
|
||
|
.. _`SCP firmware`: https://github.com/ARM-software/SCP-firmware.git
|