blob: 8e967dcde06d3f85d3143b654a176c528c3f4865 [file] [log] [blame]
Paul Beesleyf3653a62019-05-22 11:22:44 +01001Allwinner ARMv8 SoCs
2====================
Samuel Holland74383202017-08-12 04:07:39 -05003
4Trusted Firmware-A (TF-A) implements the EL3 firmware layer for Allwinner
5SoCs with ARMv8 cores. Only BL31 is used to provide proper EL3 setup and
6PSCI runtime services.
Andre Przywara4416ba82018-06-22 00:33:28 +01007
Andre Przywara928fc872020-12-11 21:29:31 +00008Building TF-A
9-------------
Andre Przywara4416ba82018-06-22 00:33:28 +010010
Andre Przywaraf180e592021-12-27 15:10:49 +000011There is one build target per supported SoC:
Andre Przywara928fc872020-12-11 21:29:31 +000012
Andre Przywaraf180e592021-12-27 15:10:49 +000013+------+-------------------+
14| SoC | TF-A build target |
15+======+===================+
16| A64 | sun50i_a64 |
17+------+-------------------+
18| H5 | sun50i_a64 |
19+------+-------------------+
20| H6 | sun50i_h6 |
21+------+-------------------+
22| H616 | sun50i_h616 |
23+------+-------------------+
24| H313 | sun50i_h616 |
25+------+-------------------+
Mikhail Kalashnikov5cafd162023-03-27 18:36:14 +030026| T507 | sun50i_h616 |
27+------+-------------------+
Andre Przywaraf180e592021-12-27 15:10:49 +000028| R329 | sun50i_r329 |
29+------+-------------------+
Andre Przywara928fc872020-12-11 21:29:31 +000030
Andre Przywaraf180e592021-12-27 15:10:49 +000031To build with the default settings for a particular SoC:
Andre Przywara928fc872020-12-11 21:29:31 +000032
33.. code:: shell
34
Andre Przywaraf180e592021-12-27 15:10:49 +000035 make CROSS_COMPILE=aarch64-linux-gnu- PLAT=<build target> DEBUG=1
Andre Przywara2d42e5f2020-11-28 01:39:17 +000036
Andre Przywaraf180e592021-12-27 15:10:49 +000037So for instance to build for a board with the Allwinner A64 SoC::
Andre Przywara2d42e5f2020-11-28 01:39:17 +000038
Andre Przywaraf180e592021-12-27 15:10:49 +000039 make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_a64 DEBUG=1
Andre Przywara2d42e5f2020-11-28 01:39:17 +000040
Andre Przywara9fcee692021-12-27 15:09:53 +000041Platform-specific build options
42~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
44The default build options should generate a working firmware image. There are
45some build options that allow to fine-tune the firmware, or to disable support
46for optional features.
47
Andre Przywaraf180e592021-12-27 15:10:49 +000048- ``SUNXI_PSCI_USE_NATIVE`` : Support direct control of the CPU cores powerdown
49 and powerup sequence by BL31. This requires either support for a code snippet
50 to be loaded into the ARISC SCP (A64, H5), or the power sequence control
51 registers to be programmed directly (H6, H616). This supports only basic
52 control, like core on/off and system off/reset.
53 This option defaults to 1. If an active SCP supporting the SCPI protocol
54 is detected at runtime, this control scheme will be ignored, and SCPI
55 will be used instead, unless support has been explicitly disabled.
56
57- ``SUNXI_PSCI_USE_SCPI`` : Support control of the CPU cores powerdown and
58 powerup sequence by talking to the SCP processor via the SCPI protocol.
59 This allows more advanced power saving techniques, like suspend to RAM.
60 This option defaults to 1 on SoCs that feature an SCP. If no SCP firmware
61 using the SCPI protocol is detected, the native sequence will be used
62 instead. If both native and SCPI methods are included, SCPI will be favoured
63 if SCP support is detected.
64
Andre Przywara9fcee692021-12-27 15:09:53 +000065- ``SUNXI_SETUP_REGULATORS`` : On SoCs that typically ship with a PMIC
66 power management controller, BL31 tries to set up all needed power rails,
67 programming them to their respective voltages. That allows bootloader
68 software like U-Boot to ignore power control via the PMIC.
69 This setting defaults to 1. In some situations that enables too many
70 regulators, or some regulators need to be enabled in a very specific
71 sequence. To avoid problems with those boards, ``SUNXI_SETUP_REGULATORS``
72 can bet set to ``0`` on the build command line, to skip the PMIC setup
73 entirely. Any bootloader or OS would need to setup the PMIC on its own then.
Samuel Holland74383202017-08-12 04:07:39 -050074
Andre Przywara928fc872020-12-11 21:29:31 +000075Installation
76------------
77
78U-Boot's SPL acts as a loader, loading both BL31 and BL33 (typically U-Boot).
79Loading is done from SD card, eMMC or SPI flash, also via an USB debug
80interface (FEL).
Samuel Holland74383202017-08-12 04:07:39 -050081
82After building bl31.bin, the binary must be fed to the U-Boot build system
83to include it in the FIT image that the SPL loader will process.
84bl31.bin can be either copied (or sym-linked) into U-Boot's root directory,
85or the environment variable BL31 must contain the binary's path.
86See the respective `U-Boot documentation`_ for more details.
87
Andre Przywara928fc872020-12-11 21:29:31 +000088.. _U-Boot documentation: https://gitlab.denx.de/u-boot/u-boot/-/blob/master/board/sunxi/README.sunxi64
Samuel Holland74383202017-08-12 04:07:39 -050089
Andre Przywara928fc872020-12-11 21:29:31 +000090Memory layout
91-------------
Samuel Holland74383202017-08-12 04:07:39 -050092
Andre Przywara928fc872020-12-11 21:29:31 +000093A64, H5 and H6 SoCs
94~~~~~~~~~~~~~~~~~~~
Samuel Holland74383202017-08-12 04:07:39 -050095
Andre Przywara928fc872020-12-11 21:29:31 +000096BL31 lives in SRAM A2, which is documented to be accessible from secure
97world only. Since this SRAM region is very limited (48 KB), we take
98several measures to reduce memory consumption. One of them is to confine
99BL31 to only 28 bits of virtual address space, which reduces the number
100of required page tables (each occupying 4KB of memory).
101The mapping we use on those SoCs is as follows:
Andre Przywaraaa26f532017-12-08 01:27:02 +0000102
Andre Przywara928fc872020-12-11 21:29:31 +0000103::
Andre Przywaraaa26f532017-12-08 01:27:02 +0000104
Andre Przywara928fc872020-12-11 21:29:31 +0000105 0 64K 16M 1GB 1G+160M physical address
106 +-+------+-+---+------+--...---+-------+----+------+----------
107 |B| |S|///| |//...///| |////| |
108 |R| SRAM |C|///| dev |//...///| (sec) |////| BL33 | DRAM ...
109 |O| |P|///| MMIO |//...///| DRAM |////| |
110 |M| | |///| |//...///| (32M) |////| |
111 +-+------+-+---+------+--...---+-------+----+------+----------
112 | | | | | | / / / /
113 | | | | | | / / / /
114 | | | | | | / / / /
115 | | | | | | / // /
116 | | | | | | / / /
117 +-+------+-+---+------+--+-------+------+
118 |B| |S|///| |//| | |
119 |R| SRAM |C|///| dev |//| sec | BL33 |
120 |O| |P|///| MMIO |//| DRAM | |
121 |M| | |///| |//| | |
122 +-+------+-+---+------+--+-------+------+
123 0 64K 16M 160M 192M 256M virtual address
Andre Przywaraaa26f532017-12-08 01:27:02 +0000124
Amit Singh Tomar2f372242018-06-20 00:44:50 +0530125
Andre Przywara2d42e5f2020-11-28 01:39:17 +0000126H616 SoC
127~~~~~~~~
128
129The H616 lacks the secure SRAM region present on the other SoCs, also
130lacks the "ARISC" management processor (SCP) we use. BL31 thus needs to
131run from DRAM, which prevents our compressed virtual memory map described
132above. Since running in DRAM also lifts the restriction of the limited
133SRAM size, we use the normal 1:1 mapping with 32 bits worth of virtual
134address space. So the virtual addresses used in BL31 match the physical
135addresses as presented above.
136
Amit Singh Tomar2f372242018-06-20 00:44:50 +0530137Trusted OS dispatcher
Paul Beesleyf3653a62019-05-22 11:22:44 +0100138---------------------
Amit Singh Tomar2f372242018-06-20 00:44:50 +0530139
140One can boot Trusted OS(OP-TEE OS, bl32 image) along side bl31 image on Allwinner A64.
141
142In order to include the 'opteed' dispatcher in the image, pass 'SPD=opteed' on the command line
143while compiling the bl31 image and make sure the loader (SPL) loads the Trusted OS binary to
144the beginning of DRAM (0x40000000).