mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 18:44:22 +00:00

The new Allwinner H616 SoC lacks the management controller and the secure SRAM A2, so we need to tweak the memory map quite substantially: We run BL31 in DRAM. Since the DRAM starts at 1GB, we cannot use our compressed virtual address space (max 256MB) anymore, so we revert to the full 32bit VA space and use a flat mapping throughout all of it. The missing controller also means we need to always use the native PSCI ops, using the CPUIDLE hardware, as SCPI and suspend depend on the ARISC. Change-Id: I77169b452cb7f5dc2ef734f3fc6e5d931749141d Signed-off-by: Andre Przywara <andre.przywara@arm.com>
99 lines
3.5 KiB
ReStructuredText
99 lines
3.5 KiB
ReStructuredText
Allwinner ARMv8 SoCs
|
|
====================
|
|
|
|
Trusted Firmware-A (TF-A) implements the EL3 firmware layer for Allwinner
|
|
SoCs with ARMv8 cores. Only BL31 is used to provide proper EL3 setup and
|
|
PSCI runtime services.
|
|
|
|
Building TF-A
|
|
-------------
|
|
|
|
To build for machines with an A64 or H5 SoC:
|
|
|
|
.. code:: shell
|
|
|
|
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_a64 DEBUG=1 bl31
|
|
|
|
To build for machines with an H6 SoC:
|
|
|
|
.. code:: shell
|
|
|
|
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h6 DEBUG=1 bl31
|
|
|
|
To build for machines with an H616 or H313 SoC:
|
|
|
|
.. code:: shell
|
|
|
|
make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 DEBUG=1 bl31
|
|
|
|
|
|
Installation
|
|
------------
|
|
|
|
U-Boot's SPL acts as a loader, loading both BL31 and BL33 (typically U-Boot).
|
|
Loading is done from SD card, eMMC or SPI flash, also via an USB debug
|
|
interface (FEL).
|
|
|
|
After building bl31.bin, the binary must be fed to the U-Boot build system
|
|
to include it in the FIT image that the SPL loader will process.
|
|
bl31.bin can be either copied (or sym-linked) into U-Boot's root directory,
|
|
or the environment variable BL31 must contain the binary's path.
|
|
See the respective `U-Boot documentation`_ for more details.
|
|
|
|
.. _U-Boot documentation: https://gitlab.denx.de/u-boot/u-boot/-/blob/master/board/sunxi/README.sunxi64
|
|
|
|
Memory layout
|
|
-------------
|
|
|
|
A64, H5 and H6 SoCs
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
BL31 lives in SRAM A2, which is documented to be accessible from secure
|
|
world only. Since this SRAM region is very limited (48 KB), we take
|
|
several measures to reduce memory consumption. One of them is to confine
|
|
BL31 to only 28 bits of virtual address space, which reduces the number
|
|
of required page tables (each occupying 4KB of memory).
|
|
The mapping we use on those SoCs is as follows:
|
|
|
|
::
|
|
|
|
0 64K 16M 1GB 1G+160M physical address
|
|
+-+------+-+---+------+--...---+-------+----+------+----------
|
|
|B| |S|///| |//...///| |////| |
|
|
|R| SRAM |C|///| dev |//...///| (sec) |////| BL33 | DRAM ...
|
|
|O| |P|///| MMIO |//...///| DRAM |////| |
|
|
|M| | |///| |//...///| (32M) |////| |
|
|
+-+------+-+---+------+--...---+-------+----+------+----------
|
|
| | | | | | / / / /
|
|
| | | | | | / / / /
|
|
| | | | | | / / / /
|
|
| | | | | | / // /
|
|
| | | | | | / / /
|
|
+-+------+-+---+------+--+-------+------+
|
|
|B| |S|///| |//| | |
|
|
|R| SRAM |C|///| dev |//| sec | BL33 |
|
|
|O| |P|///| MMIO |//| DRAM | |
|
|
|M| | |///| |//| | |
|
|
+-+------+-+---+------+--+-------+------+
|
|
0 64K 16M 160M 192M 256M virtual address
|
|
|
|
|
|
H616 SoC
|
|
~~~~~~~~
|
|
|
|
The H616 lacks the secure SRAM region present on the other SoCs, also
|
|
lacks the "ARISC" management processor (SCP) we use. BL31 thus needs to
|
|
run from DRAM, which prevents our compressed virtual memory map described
|
|
above. Since running in DRAM also lifts the restriction of the limited
|
|
SRAM size, we use the normal 1:1 mapping with 32 bits worth of virtual
|
|
address space. So the virtual addresses used in BL31 match the physical
|
|
addresses as presented above.
|
|
|
|
Trusted OS dispatcher
|
|
---------------------
|
|
|
|
One can boot Trusted OS(OP-TEE OS, bl32 image) along side bl31 image on Allwinner A64.
|
|
|
|
In order to include the 'opteed' dispatcher in the image, pass 'SPD=opteed' on the command line
|
|
while compiling the bl31 image and make sure the loader (SPL) loads the Trusted OS binary to
|
|
the beginning of DRAM (0x40000000).
|