The boot process of Arm Trusted Firmware-A is as follows (simplified):
___________________________________ ___________________________________
| | | |
| BL1: AP Trusted ROM | ----------------\ | BL2: Trusted Boot Firmware |
| Does arch and platform init | Loads and runs ) | Does platform init required |
| and loads BL2 | ----------------/ | for loading further images |
|___________________________________| |___________________________________|
| | | |
+---------------- | BL31: EL3 Runtime Software | /-------------------------------+ |
| | Inits runtime services such | ( Loads and runs |
| +------------ | as PSCI and invokes BL33 | \-----------------------------------+
| | |___________________________________| | |
| | | | | |
| +----------\ | BL33: Non-trusted Firmware | /-------------------------------+ |
| Runs ) | Bootloader (U-Boot in most | ( Loads |
+--------------/ | cases) which loads Linux | \-----------------------------------+
|___________________________________|Amlogic SoCs use a proprietary fork of Arm Trusted Firmware-A with added GPL-2.0+-licensed plugins for board-specific init, and a BL1 implementing a proprietary 'worldcup' USB protocol. Again, simplified, and this only covers GXBB/S905 and GXL/S{9,8}05X:
___________________________________ ___________________________________
| | | |_______________________________________________________________________
| BL1: AP Trusted ROM | ----------------\ | BL2: Trusted Boot Firmware | | |
| Does arch and platform init | Loads and runs ) | Inits DRAM and PLL and loads | BL21: Board Plugin | ACS: C struct injected in BL2 binary |
| and loads BL2 (or USB mode) | ----------------/ | further images into DRAM | Power init | DRAM settings, timings, and PLL config |
|___________________________________| |___________________________________|________________________|______________________________________________|
_______________________| | | |
| | SCP_BL2/BL30: SCP Firmware | /-------------------------------+ |
| BL301: Board Plugin | Platform-specific SCP init | ( Sends to SCP and runs |
| DVFS and suspend | for power management | \-----------------------------------+
|_______________________|___________________________________| | |
| | | |
+---------------- | BL31: EL3 Runtime Software | /-------------------------------+ |
| | Inits runtime services such | ( Loads and runs |
| +------------ | as PSCI and invokes BL33 | \-----------------------------------+
| | |___________________________________| | |
| | | | | |
| +----------\ | BL33: Non-trusted Firmware | /-------------------------------+ |
| Runs ) | Bootloader (U-Boot in most | ( Loads |
+--------------/ | cases) which loads Linux | \-----------------------------------+
|___________________________________|