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: ╭─────────────────────────────────────────────────────────────────────────────────────────────────┤ Secure World ├───────╮ │ │ │ ╭─────┌────────────────╮ ╭─────┌───────────────────────╮ │ │ │ BL1 │ AP Trusted ROM │──┤ L&R ├──┤ BL2 │ Trusted Boot firmware │ │ │ ╰─────└────────────────╯ ╰─────└───────────────────────╯ │ │ │ │ │ ╭───────┤ Loads and runs¹ ├────────┤ │ │ │ ╰┬──────────┤ Loads and runs ├──────────╮ │ │ │ │ │ │ │ ╭──┴──────┌──────────────╮ │ ╭──┴───┌──────────────────────╮ │ │ │ SCP_BL2 │ SCP Firmware │ │ │ BL31 │ EL3 Runtime Software │ │ │ ╰─────────└──────────────╯ │ ╰──────└──────────────────────╯ │ │ │ │ │ │ │ ╭────┤ Runs ├────╯ │ │ │ │ │ │ ╰──────────┤ Loads ├──┴────────────────╮ │ │ │ │ ╰─────────────────────────────────────────────────────────────────────────────────────│──────────────────────────────────╯ │ ╭──────│───────────┤ Normal World ├───────╮ │ │ │ │ ╭──┴───┌──────────────────────╮ │ │ │ BL33 │ Non-trusted Firmware │ │ │ │ │ Usually U-Boot │ │ │ ╰──────└──────────────────────╯ │ │ │ │ │ ╭───┴───╮ │ │ │ ... │ │ │ ╰───────╯ │ ╰─────────────────────────────────────────╯ ¹: SCP_BL2 is ran on the SCP. Also note that on GXL, BL31 runs the SCP firmware instead of BL2. There are multiple 'plugins': * BL2: BL21 plugin, ACS * SCP_BL2: BL301 plugin Another ASCII representation: ___________________________________ ___________________________________ | | | |_______________________________________________________________________ | 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 | \-----------------------------------+ |___________________________________|