This document contains a summary of the new features, changes, fixes and known issues in each release of Trusted Firmware-A.
Architecture
Performance Monitors Extension (FEAT_PMUv3)
This patch explicitly breaks the EL2 entry path. It is currently unsupported.
See: convert FEAT_MTPMU to C and move to persistent register init (83a4dae)
Libraries
EL3 Runtime
Context Management
Initialisation code for handoff from EL3 to NS-EL1 disabled by default. Platforms which do that need to enable this macro going forward
See: introduce INIT_UNUSED_NS_EL2 macro (183329a)
Drivers
Authentication
remove CryptoCell-712/713 support
See: remove CryptoCell-712/713 support (b65dfe4)
Architecture
Platforms
Allwinner
Arm
Common
FVP
Juno
Morello
RD
RD-N2
SGI
TC
Aspeed
AST2700
Intel
MediaTek
add APU bootup control smc call (94a9e62)
add APU watchdog timeout control (baa0d45)
MT8188
MT8195
NXP
i.MX
add dummy 'plat_mboot_measure_key' function (b9bceef)
i.MX 8M
i.MX 9
i.MX93
QEMU
add sdei support for QEMU (cef76a7)
add "cortex-a710" cpu support (4734a62)
add "neoverse-n2" cpu support (408f9cb)
add "neoverse-v1" cpu support (6d8d7d2)
add "neoverse-v1" cpu support (214de62)
add A55 cpu support for virt (409c20c)
add dummy plat_mboot_measure_key() BL1 function (8e2fd6a)
add dummy plat_mboot_measure_key() function (f0f11ac)
implement firmware handoff on qemu (322af23)
SBSA
QTI
MSM8916
ST
Texas Instruments
Xilinx
add support to get chipid (0563601)
clean macro names (bfd0626)
fix IPI calculation for Versal/NET (69a5bee)
move IPI related macros to plat_ipi.h (b2258ce)
remove crash console unused macros (473ada6)
setup local/remote id in header (068b0bc)
switch boot console to runtime (9c1c8f0)
sync macro names (04a4833)
used console also as crash console (3e6b96e)
Versal
add support for SMCC ARCH SOC ID (079c6e2)
add tsp support (7ff4d4f)
ddr address reservation in dtb at runtime (56d1857)
enable assertion (0375188)
retrieval of console information from dtb (7c36fbc)
Versal NET
ZynqMP
Nuvoton
Bootloader Images
Services
RME
SPM
ERRATA ABI
Libraries
CPU Support
EL3 Runtime
Translation Tables
C Standard Library
PSA
Firmware Handoff
Drivers
Authentication
add CCA NV ctr to CCA CoT (e3b1cc0)
add explicit entries for key OIDs (0cffcdd)
create a zero-OID for Subject Public Key (9505d03)
ecdsa p384 key support (557f7d8)
measure and publicise the Public Key (9eaa5a0)
mbedTLS
mbedTLS-PSA
Measured Boot
GUID Partition Tables Support
Arm
ST
Miscellaneous
Documentation
Build System
Tools
Architecture
CPU feature / ID register handling in general
Memory Partitioning and Monitoring (MPAM) Extension (FEAT_MPAM)
Performance Monitors Extension (FEAT_PMUv3)
Platforms
register PLAT_SP_PRI only if not already registered (bf01999)
Arm
Common
FPGA
FVP
Morello
N1SDP
SGI
TC
Corstone-1000
Aspeed
AST2700
Broadcom
Cadence
Intel
MediaTek
NVIDIA
Tegra
NXP
QEMU
QTI
Renesas
ST
allow crypto lib compilation in aarch64 (76e4fab)
enable RTC clock before accessing nv counter (77ce6a5)
flush UART at the end of uart_read() (a9cb7d0)
properly check LOADADDR (9f72f5e)
reduce MMC block_buffer (a2500ab)
setting default KEY_SIZE (6f3ca8a)
update comment on encryption key (5c506c7)
update dt_get_ddr_size() type (2a4abe0)
STM32MP1
Texas Instruments
Xilinx
add headers to resolve compile time issue (744d60a)
dcache flush for dtb region (93ed138)
don't reserve 1 more byte (c3b69bf)
dynamic mmap region for dtb (7ca7fb1)
remove clock_setrate and clock_getrate api (e5955d7)
remove console error message (f9820f2)
update dtb when dtb address and tf-a ddr flow is used (fdf8f92)
DCC (Debug Communication Channel)
Versal
add missing irq mapping for wakeup src (06b9c4c)
fix BLXX memory limits for user defined values (f123b91)
make pmc ipi channel as secure (96eaafa)
type cast addresses to fix integer overflow (bfe82cf)
use correct macro name for ocm base address (56afab7)
Versal NET
ZynqMP
Nuvoton
Bootloader Images
Services
RME
RMMD
SPM
EL3 SPM
EL3 SPMC
SPMD
ERRATA ABI
Libraries
CPU Support
EL3 Runtime
PSCI
SMCCC
Translation Tables
Drivers
Authentication
Measured Boot
MMC
MTD
SCMI
UFS
Arm
Renesas
R-Car3
ST
Miscellaneous
Documentation
Tools
Libraries
EL3 Runtime
RAS
The previous RAS_EXTENSION is now deprecated. The equivalent functionality can be achieved by the following 2 options:
See: replace RAS_EXTENSION with FEAT_RAS (9202d51)
Drivers
Authentication
unify REGISTER_CRYPTO_LIB
See: unify REGISTER_CRYPTO_LIB (dee99f1)
Arm
Ethos-N
The Linux Kernel NPU driver can no longer directly configure and boot the NPU in a TZMP1 build. The API version has therefore been given a major version bump with this change.
See: add protected NPU firmware setup (6dcf3e7)
Building the FIP when TZMP1 support is enabled in the NPU driver now requires a parameter to specify the NPU firmware file.
See: load NPU firmware at BL2 (33bcaed)
Build System
BL2_AT_EL3 renamed to RESET_TO_BL2 across the repository.
See: distinguish BL2 as TF-A entry point and BL2 running at EL3 (42d4d3b)
check boolean flags are not empty
See: check boolean flags are not empty (1369fb8)
All input and output linker section names have been prefixed with the period character, e.g. cpu_ops
-> .cpu_ops
.
See: always prefix section names with .
(da04341)
The EXTRA_LINKERFILE
build system variable has been replaced with the <IMAGE>_LINKER_SCRIPT_SOURCES
variable. See the commit message for more information.
See: permit multiple linker scripts (a6ff006)
The LINKERFILE
, BL_LINKERFILE
and <IMAGE_LINKERFILE>
build system variables have been renamed. See the commit message for more information.
See: clarify linker script generation (8227493)
Architecture
CPU feature / ID register handling in general
Memory Partitioning and Monitoring (MPAM) Extension (FEAT_MPAM)
Pointer Authentication Extension
Performance Monitors Extension (FEAT_PMUv3)
Scalable Matrix Extension (FEAT_SME, FEAT_SME2)
Statistical profiling Extension (FEAT_SPE)
Platforms
Allwinner
Arm
arm_rotpk_header undefined reference (95302e4)
A5DS
CSS
FPGA
FVP
Morello
N1SDP
RD
RD-N1 Edge
TC
Broadcom
Intel
NVIDIA
NXP
i.MX
i.MX 8M
add ddr4 dvfs sw workaround for ERR050712 (e00fe11)
backup mr12/14 value from lpddr4 chip (a2655f4)
correct the rank info get fro mstr (5277c09)
fix coverity out of bound access issue (0331b1c)
fix the current fsp init (25c4323)
fix the dfiphymaster setting after dvfs (ad0cbbf)
fix the dram retention random hang on some imx8mq Rev2.0 (4bf5019)
fix the rank to rank space issue (3330084)
i.MX 8Q
Layerscape
QEMU
QTI
Raspberry Pi
Raspberry Pi 3
Renesas
Rockchip
ST
add U suffix for unsigned numbers (9c1aa12)
explicitly check operators precedence (56048fe)
include utils.h to solve compilation error (377846b)
make metadata_block_spec static (d1d8a9b)
rework secure-status check in fdt_get_status() (0ebaf22)
use Boolean type for tests (45d2d49)
use indices when counting GPIOs in DT (e7d7544)
STM32MP1
Texas Instruments
Xilinx
fix misra defects (964e559)
handle CRC failure in IPI (5e92be5)
handle CRC failure in IPI callback (6173d91)
initialize values to device enum members (5c62d59)
remove asserts around arg0/arg1 (8be2044)
remove unnecessary condition (c984123)
remove unused mailbox macros (15f49cb)
resolve integer handling issue (4e46db4)
use lib/smccc.h macros instead of trusty spd (0ee07d7)
Versal
check smc_fid 23:16 bits (4a50363)
fix incorrect regbase for PMC IPI (c4185d5)
initialize the variable with value 0 in pm code (cd73d62)
print proper atf handoff source (0fe002c)
replace FPD_MAINCCI* macros (245d30e)
sync location based on IPI_ID macros (92a43bd)
Versal NET
ZynqMP
Bootloader Images
Services
RME
SPM
Libraries
CPU Support
EL3 Runtime
FCONF
OP-TEE
PSCI
GPT
SMCCC
C Standard Library
Context Management
Drivers
Authentication
avoid out-of-bounds read in auth_nvctr() (abb8f93)
forbid junk after extensions (fd37982)
only accept v3 X.509 certificates (e9e4a2a)
properly validate X.509 extensions (f5c5185)
reject invalid padding in digests (f47547b)
reject junk after certificates (ca34dbc)
reject padding after BIT STRING in signatures (a8c8c5e)
require at least one extension to be present (72460f5)
require bit strings to have no unused bits (8816dbb)
use NULL instead of 0 for pointer check (654b65b)
mbedTLS
Console
I/O
MMC
GUID Partition Tables Support
SCMI
UFS
Arm
Ethos-N
GIC
RSS
NXP
ST
Style
Miscellaneous
AArch64
FDT Wrappers
FDTs
PIE
-fpie
to the preprocessor as well (966660e)UUID
#include
directives (12562af)add missing click dependency (ff12683)
add parenthesis for tests in MIN, MAX and CLAMP macros (8406db1)
increase BL32 limit (c2a7612)
remove old-style declarations (f4b8470)
remove useless "return" at void functions (af4d8c6)
unify fallthrough annotations (e138400)
Documentation
Build System
Tools
Dependencies
Architecture
Extended Translation Control Register (FEAT_TCR2).
CPU feature / ID register handling in general
Guarded Control Stack (FEAT_GCS)
Support for the HCRX_EL2
register (FEAT_HCX)
Scalable Matrix Extension (FEAT_SME, FEAT_SME2)
Platforms
Allwinner
Arm
add ARM_ROTPK_LOCATION variant full key (5f89928)
carveout DRAM1 area for Event Log (6b2e961)
FVP
Juno
Morello
RD
RD-N2
TC
Intel
MediaTek
add APU init flow (5243091)
add new features of LPM (917abdd)
add SiP service for OP-TEE (621eaab)
add SMC handler for EMI MPU (c842cc0)
add SPM's SSPM notifier (c234ad1)
MT8188
MT8195
NVIDIA
Tegra
NXP
i.MX
i.MX 8M
add more dram pll setting (4234b90)
fix the ddr4 dvfs random hang on imx8m (093888c)
update the ddr4 dvfs flow to include ddr3l support (0e39488)
use non-fast wakeup stop mode for system suspend (ef4e5f0)
i.MX 8Q
i.MX 8
Layerscape
QEMU
QTI
ST
Texas Instruments
Xilinx
Services
RME
SPM
EL3 SPMC
SPMD
ERRATA_ABI
Libraries
CPU Support
EL3 Runtime
FCONF
OP-TEE
PSCI
C Standard Library
PSA
Drivers
Authentication
UFS
Arm
Ethos-N
GIC
GICv3
RSS
SBSA
Miscellaneous
Documentation
Build System
Tools
Firmware Image Package Tool
Dependencies
Compiler runtime libraries
Drivers
Arm
Ethos-N
add support for SMMU streams
See: add support for SMMU streams (b139f1c)
Architecture
pass SMCCCv1.3 SVE hint bit to dispatchers (0fe7b9f)
Branch Record Buffer Extension (FEAT_BRBE)
Confidential Compute Architecture (CCA)
Pointer Authentication Extension
Trapping support for RNDR/RNDRRS (FEAT_RNG_TRAP)
Scalable Matrix Extension (FEAT_SME)
Scalable Vector Extension (FEAT_SVE)
Trace Buffer Extension (FEAT_TRBE)
Platforms
Arm
add support for cca CoT (f242379)
forbid running RME-enlightened BL31 from DRAM (1164a59)
provide some swd rotpk files (98662a7)
retrieve the right ROTPK for cca (50b4497)
CSS
FVP
RD
SGI
ARM_BL31_IN_DRAM
build-option (a371327)TC
HiSilicon
HiKey960
MediaTek
add more flexibility of mtk_pm.c (6ca2046)
add more options for build helper (5b95e43)
add smcc call for MSDC (4dbe24c)
extend SiP vendor subscription events (99d30b7)
implement generic platform port (394b920)
introduce mtk init framework (52035de)
move dp drivers to common folder (d150b62)
move lpm drivers back to common (cd7890d)
move mtk_cirq.c drivers to cirq folder (cc76896)
support coreboot BL31 loading (ef988ae)
MT8186
MT8188
NXP
i.MX
i.MX 8M
add dram retention flow for imx8m family (c71793c)
add support for high assurance boot (720e7b6)
add the anamix pll override setting (66d399e)
add the ddr frequency change support for imx8m family (9c336f6)
add the PU power domain support on imx8mm/mn (44dea54)
keep pu domains in default state during boot stage (9d3249d)
make psci common code pie compatible (5d2d332)
i.MX 8M Nano
i.MX 8M Mini
i.MX 8M Plus
i.MX 8Q
Layerscape
LS1043A
LS1043ARDB
QEMU
QTI
Socionext
ST
add trace for early console (00606df)
enable MMC_FLAG_SD_CMD6 for SD-cards (53d5b8f)
properly manage early console (5223d88)
search pinctrl node by compatible (b14d3e2)
STM32MP1
add a check on TRUSTED_BOARD_BOOT with secure chip (54007c3)
add a stm32mp crypto library (ad3e46a)
add define for external scratch buffer for nand devices (9ee2510)
add early console in SP_min (14a0704)
add plat_report_*_abort functions (0423868)
add RNG initialization in BL2 for STM32MP13 (2742374)
add the decryption support (cd79116)
add the platform specific build for tools (461d631)
add the TRUSTED_BOARD_BOOT support (beb625f)
allow to override MTD base offset (e0bbc19)
configure the serial boot load address (4b2f23e)
extend STM32MP_EMMC_BOOT support to FIP format (95e4908)
manage second NAND OTP on STM32MP13 (d3434dc)
manage STM32MP13 rev.Y (a3f97f6)
optionally use paged OP-TEE (c4dbcb8)
remove unused function from boot API (f30034a)
retrieve FIP partition by type UUID (1dab28f)
save boot auth status and partition info (ab2b325)
update ROM code API for header v2 management (89c0774)
STM32MP13
STM32MP15
Texas Instruments
K3
Xilinx
Bootloader Images
Services
add a SPD for ProvenCore (b0980e5)
RME
SPM
DRTM
Libraries
Drivers
Miscellaneous
Tools
Dependencies
Architecture
Platforms
Arm
FVP
FVP Versatile Express
Morello
N1SDP
TC
Intel
MediaTek
NXP
QEMU
QTI
Raspberry Pi
Raspberry Pi 3
Renesas
R-Car
R-Car 3
Rockchip
Socionext
Synquacer
ST
Xilinx
include missing header (28ba140)
miscellaneous fixes for xilinx platforms (bfc514f)
remove unnecessary header include (0ee2dc1)
update define for ZynqMP specific functions (24b5b53)
Versal
add SGI register call version check (5897e13)
enable a72 erratum 859971 and 1319367 (769446a)
fix code indentation issues (72583f9)
fix macro coding style issues (80806aa)
fix Misra-C violations in bl31_setup and pm_svc_main (68ffcd1)
remove clock related macros (47f8145)
resolve misra 10.1 warnings (19f92c4)
resolve misra 15.6 warnings (1117a16)
resolve misra 8.13 warnings (3d2ebe7)
resolve the misra 4.6 warnings (f7c48d9)
resolve the misra 4.6 warnings (912b7a6)
route GIC IPI interrupts during setup (04cc91b)
use only one space for indentation (dee5885)
Versal NET
ZynqMP
Bootloader Images
Services
RME
SPM
EL3 SPMC
Libraries
CPU Support
EL3 Runtime
FCONF
PSCI
GPT
C Standard Library
PSA
Context Management
Semihosting
Drivers
Miscellaneous
Documentation
Build System
Tools
Dependencies
Architecture
Platforms
add SZ_* macros (1af59c4)
Allwinner
Arm
FVP
Morello
N1SDP
RD
SGI
TC
Corstone-1000
Intel
Marvell
Armada
A3K
MediaTek
introduce mtk makefile (500d40d)
MT8195
MT8186
NXP
add SoC erratum a008850 (3d14a30)
add ifc nor and nand as io devices (b759727)
add RCPM2 registers definition (d374060)
add CORTEX A53 helper functions (3ccc8ac)
i.MX
i.MX 8M
add a simple csu driver for imx8m family (71c40d3)
add imx csu/rdc enum type defines for imx8m (0c6dfc4)
enable conditional build for SDEI (d2a339d)
enable the coram_s tz by default on imx8mn/mp (d5ede92)
enable the csu init on imx8m (0a76495)
do not release JR0 to NS if HAB is using it (77850c9)
switch to xlat_tables_v2 (4f8d5b0)
i.MX 8M Mini
i.MX 8M Plus
i.MX 8M Nano
i.MX 8M Q
Layerscape
add CHASSIS 3 support for tbbr (9550ce9)
add new soc errata a009660 support (785ee93)
add new soc errata a010539 support (85bd092)
add soc helper macro definition for chassis 3 (602cf53)
define more chassis 3 hardware address (0d396d6)
print DDR errata information (3412716)
LS1043A
LX2
LS1046A
LS1088A
QEMU
QTI
Renesas
ST
add a function to configure console (53612f7)
add STM32CubeProgrammer support on UART (fb3e798)
add STM32MP_UART_PROGRAMMER target (9083fa1)
add early console in BL2 (c768b2b)
disable authentication based on part_number (49abdfd)
get pin_count from the gpio-ranges property (d0f2cf3)
map 2MB for ROM code (1697ad8)
protect UART during platform init (acf28c2)
update stm32image tool for header v2 (2d8886a)
update the security based on new compatible (812daf9)
use newly introduced clock framework (33667d2)
ST32MP1
Texas Instruments
Xilinx
Versal
ZynqMP
coherent_ram' will not fit in region
RAM' (9b4ed0a)Bootloader Images
Services
RME
SPM
update ff-a boot protocol documentation (573ac37)
EL3 SPMC
SPMD
SPM MM
Libraries
CPU Support
EL3 Runtime
FCONF
Standard C Library
PSA
Drivers
Generic Clock
FWU
Measured Boot
GUID Partition Tables Support
Arm
Marvell
Armada
A3K
A3720
MediaTek
NXP
ST
Miscellaneous
Documentation
Tools
Architecture
Platforms
Allwinner
Arm
fix fvp and juno build with USE_ROMLIB option (861250c)
increase ARM_BL_REGIONS count (dcb1959)
remove reclamation of functions starting with "init" (6c87abd)
use PLAT instead of TARGET_PLATFORM (c5f3de8)
fix SP count limit without dual root CoT (9ce15fe)
FVP
Morello
SGI
TC
Corstone-1000
Broadcom
Intel
Marvell
Mediatek
NVIDIA
Tegra
Tegra 194
NXP
Renesas
Socionext
Synquacer
ST
add missing header include (b1391b2)
don't try to read boot partition on SD cards (9492b39)
fix NULL pointer dereference issues (2deff90)
manage UART clock and reset only in BL2 (9e52d45)
remove extra chars from dtc version (03d2077)
ST32MP1
Xilinx
fix coding style violations (bb1768c)
fix mismatching function prototype (81333ea)
Versal
ZynqMP
Bootloader Images
Services
Libraries
CPU Support
EL3 Runtime
set unset pstate bits to default (7d33ffe)
Context Management
FCONF
PSCI
GPT
Translation Tables
Standard C Library
Locks
Drivers
FWU
I/O
MTD
Measured Boot
MTD
SCMI
UFS
Arm
Marvell
COMPHY
change reg_set() / reg_set16() to update semantics (95c26d6)
Armada 3700
Armada
NXP
ST
USB
Miscellaneous
AArch64
FDTs
PIE
Security
Tools
NXP Tools
Firmware Image Package Tool
Secure Partition Tool
Certificate Creation Tool
Dependencies
commitlint
Architecture
Activity Monitors Extension (FEAT_AMU)
The public AMU API has been reduced to enablement only to facilitate refactoring work. These APIs were not previously used.
See: privatize unused AMU APIs (b4b726e)
The PLAT_AMU_GROUP1_COUNTERS_MASK
platform definition has been removed. Platforms should specify per-core AMU counter masks via FCONF or a platform-specific mechanism going forward.
See: remove PLAT_AMU_GROUP1_COUNTERS_MASK
(6c8dda1)
Libraries
FCONF
FCONF is no longer added to BL1 and BL2 automatically when the FCONF Makefile (fconf.mk
) is included. When including this Makefile, consider whether you need to add ${FCONF_SOURCES}
and ${FCONF_DYN_SOURCES}
to BL1_SOURCES
and BL2_SOURCES
.
See: clean up source collection (e04da4c)
Drivers
Arm
Ethos-N
multi-device support
See: multi-device support (1c65989)
Architecture
Activity Monitors Extension (FEAT_AMU)
Support for the HCRX_EL2
register (FEAT_HCX)
Scalable Matrix Extension (FEAT_SME)
Scalable Vector Extension (FEAT_SVE)
System Register Trace Extensions (FEAT_ETMv4, FEAT_ETE and FEAT_ETEv1.1)
Trace Buffer Extension (FEAT_TRBE)
Self-hosted Trace Extension (FEAT_TRF)
RME
Platforms
Allwinner
Arm
add FWU support in Arm platforms (2f1177b)
add GPT initialization code for Arm platforms (deb4b3a)
add GPT parser support (ef1daa4)
enable PIE when RESET_TO_SP_MIN=1 (7285fd5)
FPGA
FVP
FVP-R
RD
SGI
TC
enable MPMM (c19a82b)
Enable SVE for both secure and non-secure world (10198ea)
populate HW_CONFIG in BL31 (34a87d7)
introduce TC1 platform (6ec0c65)
add DRAM2 to TZC non-secure region (76b4a6b)
add bootargs node (4a840f2)
add cpu capacity to provide scheduling information (309f593)
add Ivy partition (a19bd32)
add support for trusted services (ca93248)
update Matterhorn ELP DVFS clock index (a2f6294)
update mhuv2 dts node to align with upstream driver (63067ce)
Diphda
Marvell
MediaTek
enable software reset for CIRQ (b3b162f)
MT8192
MT8195
NXP
add build macro for BOOT_MODE validation checking (cd1280e)
add CCI and EPU address definition (6cad59c)
add EESR register definition (8bfb168)
add SecMon register definition for ch_3_2 (66f7884)
define common macro for ARM registers (35efe7a)
define default PSCI features if not defined (a204785)
define default SD buffer (4225ce8)
i.MX
Layerscape
QTI
Renesas
R-Car
change process for Suspend To RAM (731aa26)
R-Car 3
ST
add a new DDR firewall management (4584e01)
add a USB DFU stack (efbd65f)
add helper to save boot interface (7e87ba2)
add STM32CubeProgrammer support on USB (afad521)
add STM32MP_EMMC_BOOT option (214c8a8)
create new helper for DT access (ea97bbf)
implement platform functions for SMCCC_ARCH_SOC_ID (3d20178)
improve FIP image loading from MMC (18b415b)
manage io_policies with FCONF (d5a84ee)
use FCONF to configure platform (29332bc)
use FIP to load images (1d204ee)
ST32MP1
Xilinx
Bootloader Images
Services
Libraries
Drivers
Miscellaneous
Debug
CRC32
DT Bindings
FDT Wrappers
FDTs
NXP
Dependencies
libfdt
Architecture
Platforms
print newline before fatal abort error message (a5fea81)
Allwinner
Arm
Marvell
Check the required libraries before building doimage (dd47809)
Armada
select correct pcie reference clock source (371648e)
fix MSS loader for A8K family (dceac43)
A3K
A8K
MediaTek
NXP
QEMU
QTI
SC1780
Raspberry Pi
Raspberry Pi 4
Renesas
Rockchip
Socionext
Synquacer
ST
add STM32IMAGE_SRC (f223505)
add UART reset in crash console init (b38e2ed)
apply security at the end of BL2 (99080bd)
correct BSEC error code management (72c7884)
correct IO compensation disabling (c2d18ca)
correct signedness comparison issue (5657dec)
improve DDR get size function (91ffc1d)
only check header major when booting (8ce8918)
panic if boot interface is wrong (71693a6)
remove double space (306dcd6)
ST32MP1
Xilinx
Services
Libraries
LIBC
CPU Support
EL3 Runtime
OP-TEE
GPT
Translation Tables
Drivers
Miscellaneous
use correct printf format for uint64_t (4ef449c)
DT Bindings
FDTs
PIE
Security
SDEI
Documentation
Build System
Tools
Dependencies
checkpatch
Architecture support
FEAT_SB
) for non-Armv8.5 platforms starting from Armv8.0FEAT_AMUv1p1
)FEAT_RNG
) registersFEAT_MTPMU
)FEAT_MTE3
)FEAT_PANx
)Bootloader images
Build System
Drivers
Libraries
%
in snprintf()
and printf()
APIsPlatforms
max
CPUvirt
platformProcesses
Services
Tools
Common components
#address-cells
and #size-cells
for reserved-memory in dtbsDrivers
Libraries
Miscellaneous
Platforms
Services
chosen
node from SPMC manifestsTools
Several fixes for typos and mis-spellings in documentation
Build system
Drivers
Libraries
Platforms
Services
Tools
make clean
for all
targetCOT_DESC_IN_DTB
to create Chain of Trust at runtimeOPENSSL_DIR
to direct tools to OpenSSL librariesRAS_TRAP_LOWER_EL_ERR_ACCESS
to enable trapping RAS register accesses from EL1/EL2 to EL3BRANCH_PROTECTION
to support branch target identificationmg_conf_cm3
driverRTC
as a gateable clocksnprint()
fw_config
imageSMCCC_ARCH_SOC_ID
commandid
field under the NV-counter node in the device tree to differentiate between trusted and non-trusted NV-countersSMCCC_ARCH_SOC_ID
commandSMCCC_ARCH_SOC_ID
commandSMCCC_ARCH_SOC_ID
commandSP_MIN
fw_config
imagefw_config
imageKEY_SIZE
has been changed to to 2048 when RSA is in use__ASSEMBLY__
has now been removeddrivers/arm/gic/common/gic_common.c
has now been deprecated in favour of drivers/arm/gic/vX/gicvX.mk
LLC_SRAM
is enabledmemset
performance by avoiding single-byte writesmemset
BL32_BASE
is now platform-dependent when SPD_spmd
is enabledCOT_DESC_IN_DTB
is enabledfw_config
and tb_fw_config
FVP_USE_SP804_TIMER
and FVP_VE_USE_SP804_TIMER
build options have been removed in favour of a common USE_SP804_TIMER
option.bin
BL31_CACHE_DISABLE
is now disabled (0
) by defaultBL31_SIZE
definition have been made platform-specificK3_USART
SP_MIN
SYSRAM
is now used as SCMI shared memory0
on help
and help <command>
HASH_ALG
build optionPIE
supportCOT
build option to select the Chain of Trust to use when the Trusted Boot feature is enabled (default: tbbr
).CPPFLAGS
, ASFLAGS
, and LDFLAGS
calc_hash
function for hash calculation. Used for authentication of images when measured boot is enabled.dualroot
chain of trustdualroot
chain of trust.unsigned long
depending on if fixed based on AArch32 or AArch64.dtb: DTB creation not supported when building on a Windows host.
This step in the build process is skipped when running on a Windows host. A known issue from the 1.6 release.
Intermittent assertion firing ASSERT: services/spd/tspd/tspd_main.c:105
arm/juno: System suspend from Linux does not function as documented in the user guide
Following the instructions provided in the user guide document does not result in the platform entering system suspend state as expected. A message relating to the hdlcd driver failing to suspend will be emitted on the Linux terminal.
mediatek/mt6795: This platform does not build in this release
Enable Pointer Authentication (PAuth) support for Secure World
Enable Memory Tagging Extension (MTE) support in both secure and non-secure worlds
CTX_INCLUDE_MTE_REGS
includes register saving and restoring when necessary in order to prevent information leakage between the worlds.Add support for Branch Target Identification (BTI)
console: Allow the console to register multiple times
delay: Timeout detection support
gicv3: Enabled multi-socket GIC redistributor frame discovery and migrated ARM platforms to the new API
gicv3_rdistif_probe
function that delegates the responsibility of discovering the corresponding redistributor base frame to each CPU itself.sbsa: Add SBSA watchdog driver
st/stm32_hash: Add HASH driver
ti/uart: Add an AArch32 variant
pwr_domain_on_finish_late
pwr_domain_on_finish_late
is similar to pwr_domain_on_finish
but is guaranteed to be invoked when the respective core and cluster are participating in coherency.el3_exit()
return routine for smc_unknown return path rather than a custom set of instructions.bl1_platform_setup()
function from arm_bl1_setup.c to FVP platforms' fvp_bl1_setup.c and fvp_ve_bl1_setup.c files.spin_unlock()
SCTLR_V_BIT
definition and adds definitions for ARMv8.3-Pauth EnIB
, EnDA
and EnDB
bits.pauth_context_save()
with pauth_context_restore()
in case of unknown SMC call.SDCR.SCCD
bit on CPU cold/warm boot. For the earlier architectures PMCR register is saved/restored on secure world entry/exit from/to Non-secure state, and cycle counting gets disabled by setting PMCR.DP bit.MDCR_El3.SCCD
bit on CPU cold/warm boot. For the earlier architectures PMCR_EL0 register is saved/restored on secure world entry/exit from/to Non-secure state, and cycle counting gets disabled by setting PMCR_EL0.DP bit.plat_crash_console_*
get_afflvl_shift
, mpidr_mask_lower_afflvls
, eret
__aarch64__
__ASSEMBLY__
macro is now deprecated in favor of __ASSEMBLER__
tzc_action_t
and tzc_region_attributes_t
dtb: DTB creation not supported when building on a Windows host.
This step in the build process is skipped when running on a Windows host. A known issue from the 1.6 release.
arm/juno: System suspend from Linux does not function as documented in the user guide
Following the instructions provided in the user guide document does not result in the platform entering system suspend state as expected. A message relating to the hdlcd driver failing to suspend will be emitted on the Linux terminal.
mediatek/mt6795: This platform does not build in this release
Architecture
Support for ARMv8.3 pointer authentication in the normal and secure worlds
The use of pointer authentication in the normal world is enabled whenever architectural support is available, without the need for additional build flags.
Use of pointer authentication in the secure world remains an experimental configuration at this time. Using both the ENABLE_PAUTH
and CTX_INCLUDE_PAUTH_REGS
build flags, pointer authentication can be enabled in EL3 and S-EL1/0.
See the {ref}Firmware Design
document for additional details on the use of pointer authentication.
Enable Data Independent Timing (DIT) in EL3, where supported
Build System
Support for BL-specific build flags
Support setting compiler target architecture based on ARM_ARCH_MINOR
build option.
New RECLAIM_INIT_CODE
build flag:
A significant amount of the code used for the initialization of BL31 is not needed again after boot time. In order to reduce the runtime memory footprint, the memory used for this code can be reclaimed after initialization.
Certain boot-time functions were marked with the __init
attribute to enable this reclamation.
CPU Support
Documentation
Drivers
ccn: Add API for setting and reading node registers
ccn_read_node_reg
functionccn_write_node_reg
functionpartition: Support MBR partition entries
scmi: Add plat_css_get_scmi_info
function
Adds a new API plat_css_get_scmi_info
which lets the platform register a platform-specific instance of scmi_channel_plat_info_t
and remove the default values
tzc380: Add TZC-380 TrustZone Controller driver
tzc-dmc620: Add driver to manage the TrustZone Controller within the DMC-620 Dynamic Memory Controller
Library at ROM (romlib)
Add platform-specific jump table list
Allow patching of romlib functions
This change allows patching of functions in the romlib. This can be done by adding "patch" at the end of the jump table entry for the function that needs to be patched in the file jmptbl.i.
Library Code
mmio_clrsetbits_16
functionmmio_clrsetbits
pool_alloc
and pool_alloc_n
functionsstrlcpy
functionstrrchr
function from FreeBSDMath
Memory Partitioning And Monitoring (MPAM)
MPAMHCR_EL2
and MPAM_EL2
)Platforms
amlogic: Add support for Meson S905 (GXBB)
arm/fvp_ve: Add support for FVP Versatile Express platform
arm/n1sdp: Add support for Neoverse N1 System Development platform
arm/rde1edge: Add support for Neoverse E1 platform
arm/rdn1edge: Add support for Neoverse N1 platform
arm: Add support for booting directly to Linux without an intermediate loader (AArch32)
arm/juno: Enable new CPU errata workarounds for A53 and A57
arm/juno: Add romlib support
Building a combined BL1 and ROMLIB binary file with the correct page alignment is now supported on the Juno platform. When USE_ROMLIB
is set for Juno, it generates the combined file bl1_romlib.bin
which needs to be used instead of bl1.bin.
intel/stratix: Add support for Intel Stratix 10 SoC FPGA platform
marvell: Add support for Armada-37xx SoC platform
nxp: Add support for i.MX8M and i.MX7 Warp7 platforms
renesas: Add support for R-Car Gen3 platform
xilinx: Add support for Versal ACAP platforms
Position-Independent Executable (PIE)
PIE support has initially been added to BL31. The ENABLE_PIE
build flag is used to enable or disable this functionality as required.
Secure Partition Manager
New SPM implementation based on SPCI Alpha 1 draft specification
A new version of SPM has been implemented, based on the SPCI (Secure Partition Client Interface) and SPRT (Secure Partition Runtime) draft specifications.
The new implementation is a prototype that is expected to undergo intensive rework as the specifications change. It has basic support for multiple Secure Partitions and Resource Descriptions.
The older version of SPM, based on MM (ARM Management Mode Interface Specification), is still present in the codebase. A new build flag, SPM_MM
has been added to allow selection of the desired implementation. This flag defaults to 1, selecting the MM-based implementation.
Security
Spectre Variant-1 mitigations (CVE-2017-5753
)
Use Speculation Store Bypass Safe (SSBS) functionality where available
Provides mitigation against CVE-2018-19440
(Not saving x0 to x3 registers can leak information from one Normal World SMC client to another)
Build System
W=<1,2,3>
E=0
-s
flagCHECKPATCH_OPTS=<opts>
HOSTCC / HOSTCCFLAGS
instead of CC / CFLAGS
CPPFLAGS
for DT preprocessing so that compiler options specific to it can be accommodated.CPP
with PP
for DT pre-processingCPU Support
Errata report function definition is now mandatory for CPU support files
CPU operation files must now define a <name>_errata_report
function to print errata status. This is no longer a weak reference.
Documentation
docs/
directoryDrivers
console: The MULTI_CONSOLE_API
framework has been rewritten in C
console: Ported multi-console driver to AArch32
gic: Remove 'lowest priority' constants
Removed GIC_LOWEST_SEC_PRIORITY
and GIC_LOWEST_NS_PRIORITY
. Platforms should define these if required, or instead determine the correct priority values at runtime.
delay_timer: Check that the Generic Timer extension is present
mmc: Increase command reply timeout to 10 milliseconds
mmc: Poll eMMC device status to ensure EXT_CSD
command completion
mmc: Correctly check return code from mmc_fill_device_info
External Libraries
This change incorporates fixes for security issues that should be reviewed to determine if they are relevant for software implementations using Trusted Firmware-A. See the mbed TLS releases page for details on changes from the 2.12 to the 2.16 release.
Library Code
lshrdi3.c
and int_lib.h
with changes from LLVM master branch (r345645)CVE-2017-5715
mitigationOVERRIDE_LIBC
)libc/
directoryPlatforms
Removed Mbed TLS dependency from plat_bl_common.c
arm: Removed unused ARM_MAP_BL_ROMLIB
macro
arm: Removed ARM_BOARD_OPTIMISE_MEM
feature and build flag
arm: Moved several components into drivers/
directory
This affects the SDS, SCP, SCPI, MHU and SCMI components
arm/juno: Increased maximum BL2 image size to 0xF000
This change was required to accommodate a larger libfdt
library
SCMI
HW_ASSISTED_COHERENCY
build flagSDEI
Added support for unconditionally resuming secure world execution after {{ SDEI }} event processing completes
{{ SDEI }} interrupts, although targeting EL3, occur on behalf of the non-secure world, and may have higher priority than secure world interrupts. Therefore they might preempt secure execution and yield execution to the non-secure {{ SDEI }} handler. Upon completion of {{ SDEI }} event handling, resume secure execution if it was preempted.
Translation Tables (XLAT)
Dynamically detect need for Common not Private (TTBRn_ELx.CnP)
bit
Properly handle the case where ARMv8.2-TTCNP
is implemented in a CPU that does not implement all mandatory v8.2 features (and so must claim to implement a lower architecture version).
V=1
) enabled is broken$(march32-directive)
uintptr_t is not defined
error when BL2_IN_XIP_MEM
is definedbl2_arch_setup
scr
variable causes a cache issue when invalidating after the read DMA transfer completesACMD41
does not send voltage information during initialization, resulting in the command being treated as a query. This prevents the command from initializing the controller.mmc_device_state()
there are no retries attempted in the event of an errorFix MULTI_CONSOLE_API
when used as a crash consoleVERBOSE
mode (V=1
)common: Incorrect check for Address Authentication support
xlat: Fix XLAT_V1 / XLAT_V2 incompatibility
The file arm_xlat_tables.h
has been renamed to xlat_tables_compat.h
and has been moved to a common folder. This header can be used to guarantee compatibility, as it includes the correct header based on XLAT_TABLES_LIB_V2
.
xlat: armclang unused-function warning on xlat_clean_dcache_range
xlat: Invalid mm_cursor
checks in mmap_add
and mmap_add_ctx
sdei: Missing context.h
header
common: Missing prototype warning for plat_log_get_prefix
arm: Insufficient maximum BL33 image size
arm: Potential memory corruption during BL2-BL31 transition
On Arm platforms, the BL2 memory can be overlaid by BL31/BL32. The memory descriptors describing the list of executable images are created in BL2 R/W memory, which could be possibly corrupted later on by BL31/BL32 due to overlay. This patch creates a reserved location in SRAM for these descriptors and are copied over by BL2 before handing over to next BL image.
juno: Invalid behaviour when CSS_USE_SCMI_SDS_DRIVER
is not set
In juno_pm.c
the css_scmi_override_pm_ops
function was used regardless of whether the build flag was set. The original behaviour has been restored in the case where the build flag is not set.
plat_crash_console_init
functionplat_crash_console_putc
functionplat_crash_console_flush
functionfinish_console_register
macroget_afflvl_shift
mpidr_mask_lower_afflvls
eret
dtb: DTB creation not supported when building on a Windows host.
This step in the build process is skipped when running on a Windows host. A known issue from the 1.6 release.
arm/juno: System suspend from Linux does not function as documented in the user guide
Following the instructions provided in the user guide document does not result in the platform entering system suspend state as expected. A message relating to the hdlcd driver failing to suspend will be emitted on the Linux terminal.
arm/juno: The firmware update use-cases do not work with motherboard firmware version < v1.5.0 (the reset reason is not preserved). The Linaro 18.04 release has MB v1.4.9. The MB v1.5.0 is available in Linaro 18.10 release.
mediatek/mt6795: This platform does not build in this release
Removal of a number of deprecated APIs
Addressing Speculation Security Vulnerabilities
Introduce RAS handling on AArch64
Enable Memory Partitioning And Monitoring (MPAM) for lower EL's
Introduce ROM Lib Feature
Introduce Backtrace Feature
Code hygiene changes and alignment with MISRA C-2012 guideline with fixes addressing issues complying to the following rules:
Various changes to support Clang linker and assembler
Refactor support APIs into Libraries
CPU Enhancements
Translation Tables Enhancements
SPM Enhancements
SDEI Enhancements
Misc TF-A Core Common Code Enhancements
New Platform Support
Misc Generic Platform Common Code Enhancements
Misc Arm Platform Common Code Enhancements
Enhancements for Arm Juno Platform
Enhancements for Arm FVP Platform
Enhancements for Arm SGI/SGM Platform
Enhancements for Non Arm Platforms
Added new firmware support to enable RAS (Reliability, Availability, and Serviceability) functionality.
Secure Partition Manager (SPM): A Secure Partition is a software execution environment instantiated in S-EL0 that can be used to implement simple management and security services. The SPM is the firmware component that is responsible for managing a Secure Partition.
SDEI dispatcher: Support for interrupt-based {{ SDEI }} events and all interfaces as defined by the {{ SDEI }} specification v1.0, see SDEI Specification
Exception Handling Framework (EHF): Framework that allows dispatching of EL3 interrupts to their registered handlers which are registered based on their priorities. Facilitates firmware-first error handling policy where asynchronous exceptions may be routed to EL3.
Integrated the TSPD with EHF.
Updated PSCI support:
Implemented PSCI v1.1 optional features MEM_PROTECT
and SYSTEM_RESET2
. The supported PSCI version was updated to v1.1.
Improved PSCI STAT timestamp collection, including moving accounting for retention states to be inside the locks and fixing handling of wrap-around when calculating residency in AArch32 execution state.
Added optional handler for early suspend that executes when suspending to a power-down state and with data caches enabled.
This may provide a performance improvement on platforms where it is safe to perform some or all of the platform actions from pwr_domain_suspend
with the data caches enabled.
Enabled build option, BL2_AT_EL3, for BL2 to allow execution at EL3 without any dependency on TF BL1.
This allows platforms which already have a non-TF Boot ROM to directly load and execute BL2 and subsequent BL stages without need for BL1. This was not previously possible because BL2 executes at S-EL1 and cannot jump straight to EL3.
Implemented support for SMCCC v1.1, including SMCCC_VERSION
and SMCCC_ARCH_FEATURES
.
Additionally, added support for SMCCC_VERSION
in PSCI features to enable discovery of the SMCCC version via PSCI feature call.
Added Dynamic Configuration framework which enables each of the boot loader stages to be dynamically configured at runtime if required by the platform. The boot loader stage may optionally specify a firmware configuration file and/or hardware configuration file that can then be shared with the next boot loader stage.
Introduced a new BL handover interface that essentially allows passing of 4 arguments between the different BL stages.
Updated cert_create and fip_tool to support the dynamic configuration files. The COT also updated to support these new files.
Code hygiene changes and alignment with MISRA guideline:
Added support for Armv8.2-A architectural features:
Added support for Armv8.4-A architectural feature Activity Monitor Unit (AMU)
extensions.
In addition to the v8.4 architectural extension, AMU support on Cortex-A75 was implemented.
Enhanced OP-TEE support to enable use of pageable OP-TEE image. The Arm standard platforms are updated to load up to 3 images for OP-TEE; header, pager image and paged image.
The chain of trust is extended to support the additional images.
Enhancements to the translation table library:
Updated GIC support:
Introduce new APIs for GICv2 and GICv3 that provide the capability to specify interrupt properties rather than list of interrupt numbers alone. The Arm platforms and other upstream platforms are migrated to use interrupt properties.
Added helpers to save / restore the GICv3 context, specifically the Distributor and Redistributor contexts and architectural parts of the ITS power management. The Distributor and Redistributor helpers also support the implementation-defined part of GIC-500 and GIC-600.
Updated the Arm FVP platform to save / restore the GICv3 context on system suspend / resume as an example of how to use the helpers.
Introduced a new TZC secured DDR carve-out for use by Arm platforms for storing EL3 runtime data such as the GICv3 register context.
Added support for Armv7-A architecture via build option ARM_ARCH_MAJOR=7. This includes following features:
Enhancements to Firmware Update feature:
Enhancements to Trusted Board Boot feature:
Added support for secure interrupt handling in AArch32 sp_min, hardcoded to only handle FIQs.
Added support to allow a platform to load images from multiple boot sources, for example from a second flash drive.
Added a logging framework that allows platforms to reduce the logging level at runtime and additionally the prefix string can be defined by the platform.
Further improvements to register initialisation:
Enhanced support for Arm platforms:
Introduced driver for Shared-Data-Structure (SDS) framework which is used for communication between SCP and the AP CPU, replacing Boot-Over_MHU (BOM) protocol.
The Juno platform is migrated to use SDS with the SCMI support added in v1.3 and is set as default.
The driver can be found in the plat/arm/css/drivers folder.
Improved memory usage by only mapping TSP memory region when the TSPD has been included in the build. This reduces the memory footprint and avoids unnecessary memory being mapped.
Updated support for multi-threading CPUs for FVP platforms - always check the MT field in MPDIR and access the bit fields accordingly.
Support building for platforms that model DynamIQ configuration by implementing all CPUs in a single cluster.
Improved nor flash driver, for instance clearing status registers before sending commands. Driver can be found plat/arm/board/common folder.
Enhancements to QEMU platform:
Applied workarounds CVE-2017-5715 on Arm Cortex-A57, -A72, -A73 and -A75, and for Armv7-A CPUs Cortex-A9, -A15 and -A17.
Applied errata workaround for Arm Cortex-A57: 859972.
Applied errata workaround for Arm Cortex-A72: 859971.
Added support for Poplar 96Board platform.
Added support for Raspberry Pi 3 platform.
Added Call Frame Information (CFI) assembler directives to the vector entries which enables debuggers to display the backtrace of functions that triggered a synchronous abort.
Added ability to build dtb.
Added support for pre-tool (cert_create and fiptool) image processing enabling compression of the image files before processing by cert_create and fiptool.
This can reduce fip size and may also speed up loading of images. The image verification will also get faster because certificates are generated based on compressed images.
Imported zlib 1.2.11 to implement gunzip() for data compression.
Enhancements to fiptool:
Enabled support for platforms with hardware assisted coherency.
A new build option HW_ASSISTED_COHERENCY allows platforms to take advantage of the following optimisations:
Added support for Cortex-A75 and Cortex-A55 processors.
Both Cortex-A75 and Cortex-A55 processors use the Arm DynamIQ Shared Unit (DSU). The power-down and power-up sequences are therefore mostly managed in hardware, reducing complexity of the software operations.
Introduced Arm GIC-600 driver.
Arm GIC-600 IP complies with Arm GICv3 architecture. For FVP platforms, the GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600.
Updated GICv3 support:
Introduced power management APIs for GICv3 Redistributor. These APIs allow platforms to power down the Redistributor during CPU power on/off. Requires the GICv3 implementations to have power management operations.
Implemented the power management APIs for FVP.
GIC driver data is flushed by the primary CPU so that secondary CPU do not read stale GIC data.
Added support for Arm System Control and Management Interface v1.0 (SCMI).
The SCMI driver implements the power domain management and system power management protocol of the SCMI specification (Arm DEN 0056ASCMI) for communicating with any compliant power controller.
Support is added for the Juno platform. The driver can be found in the plat/arm/css/drivers folder.
Added support to enable pre-integration of TBB with the Arm TrustZone CryptoCell product, to take advantage of its hardware Root of Trust and crypto acceleration services.
Enabled Statistical Profiling Extensions for lower ELs.
The firmware support is limited to the use of SPE in the Non-secure state and accesses to the SPE specific registers from S-EL1 will trap to EL3.
The SPE are architecturally specified for AArch64 only.
Code hygiene changes aligned with MISRA guidelines:
Enhancements to Firmware Update feature:
Introduced support for Arm Compiler 6 and LLVM (clang).
TF-A can now also be built with the Arm Compiler 6 or the clang compilers. The assembler and linker must be provided by the GNU toolchain.
Tested with Arm CC 6.7 and clang 3.9.x and 4.0.x.
Memory footprint improvements:
Introduced tf_snprintf
, a reduced version of snprintf
which has support for a limited set of formats.
The mbedtls driver is updated to optionally use tf_snprintf
instead of snprintf
.
The assert()
is updated to no longer print the function name, and additional logging options are supported via an optional platform define PLAT_LOG_LEVEL_ASSERT
, which controls how verbose the assert output is.
Enhancements to TF-A support when running in AArch32 execution state:
Introduced Arm SiP service for use by Arm standard platforms.
Added new Arm SiP Service SMCs to enable the Non-secure world to read PMF timestamps.
Added PMF instrumentation points in TF-A in order to quantify the overall time spent in the PSCI software implementation.
Added new Arm SiP service SMC to switch execution state.
This allows the lower exception level to change its execution state from AArch64 to AArch32, or vice verse, via a request to EL3.
Migrated to use SPDX[0] license identifiers to make software license auditing simpler.
:::{note} Files that have been imported by FreeBSD have not been modified. :::
[0]: https://spdx.org/
Enhancements to the translation table library:
Added version 2 of translation table library that allows different translation tables to be modified by using different 'contexts'. Version 1 of the translation table library only allows the current EL's translation tables to be modified.
Version 2 of the translation table also added support for dynamic regions; regions that can be added and removed dynamically whilst the MMU is enabled. Static regions can only be added or removed before the MMU is enabled.
The dynamic mapping functionality is enabled or disabled when compiling by setting the build option PLAT_XLAT_TABLES_DYNAMIC to 1 or 0. This can be done per-image.
Added support for translation regimes with two virtual address spaces such as the one shared by EL1 and EL0.
The library does not support initializing translation tables for EL0 software.
Added support to mark the translation tables as non-cacheable using an additional build option XLAT_TABLE_NC
.
Added support for GCC stack protection. A new build option ENABLE_STACK_PROTECTOR was introduced that enables compilation of all BL images with one of the GCC -fstack-protector-* options.
A new platform function plat_get_stack_protector_canary() was introduced that returns a value used to initialize the canary for stack corruption detection. For increased effectiveness of protection platforms must provide an implementation that returns a random value.
Enhanced support for Arm platforms:
Added support for multi-threading CPUs, indicated by MT
field in MPDIR. A new build flag ARM_PLAT_MT
is added, and when enabled, the functions accessing MPIDR assume that the MT
bit is set for the platform and access the bit fields accordingly.
Also, a new API plat_arm_get_cpu_pe_count
is added when ARM_PLAT_MT
is enabled, returning the Processing Element count within the physical CPU corresponding to mpidr
.
The Arm platforms migrated to use version 2 of the translation tables.
Introduced a new Arm platform layer API plat_arm_psci_override_pm_ops
which allows Arm platforms to modify plat_arm_psci_pm_ops
and therefore dynamically define PSCI capability.
The Arm platforms migrated to use IMAGE_LOAD_V2 by default.
Enhanced reporting of errata workaround status with the following policy:
If an errata workaround is enabled:
If an errata workaround is not enabled, but would have applied had it been, a WARN message is printed, alerting that errata workaround is missing.
Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the architecture version to target TF-A.
Updated the spin lock implementation to use the more efficient CAS (Compare And Swap) instruction when available. This instruction was introduced in Armv8.1-A.
Applied errata workaround for Arm Cortex-A53: 855873.
Applied errata workaround for Arm-Cortex-A57: 813419.
Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and AArch32 execution states.
Added support for Socionext UniPhier SoC platform.
Added support for Hikey960 and Hikey platforms.
Added support for Rockchip RK3328 platform.
Added support for NVidia Tegra T186 platform.
Added support for Designware emmc driver.
Imported libfdt v1.4.2 that addresses buffer overflow in fdt_offset_ptr().
Enhanced the CPU operations framework to allow power handlers to be registered on per-level basis. This enables support for future CPUs that have multiple threads which might need powering down individually.
Updated register initialisation to prevent unexpected behaviour:
Enhanced PSCI support:
Simplified fiptool to have a single linked list of image descriptors.
For the TSP, resolved corruption of pre-empted secure context by aborting any pre-empted SMC during PSCI power management requests.
Added support for running TF-A in AArch32 execution state.
The PSCI library has been refactored to allow integration with EL3 Runtime Software. This is software that is executing at the highest secure privilege which is EL3 in AArch64 or Secure SVC/Monitor mode in AArch32. See {ref}PSCI Library Integration guide for Armv8-A AArch32 systems
.
Included is a minimal AArch32 Secure Payload, SP-MIN, that illustrates the usage and integration of the PSCI library with EL3 Runtime Software running in AArch32 state.
Booting to the BL1/BL2 images as well as booting straight to the Secure Payload is supported.
Improvements to the initialization framework for the PSCI service and Arm Standard Services in general.
The PSCI service is now initialized as part of Arm Standard Service initialization. This consolidates the initializations of any Arm Standard Service that may be added in the future.
A new function get_arm_std_svc_args()
is introduced to get arguments corresponding to each standard service and must be implemented by the EL3 Runtime Software.
For PSCI, a new versioned structure psci_lib_args_t
is introduced to initialize the PSCI Library. Note this is a compatibility break due to the change in the prototype of psci_setup()
.
To support AArch32 builds of BL1 and BL2, implemented a new, alternative firmware image loading mechanism that adds flexibility.
The current mechanism has a hard-coded set of images and execution order (BL31, BL32, etc). The new mechanism is data-driven by a list of image descriptors provided by the platform code.
Arm platforms have been updated to support the new loading mechanism.
The new mechanism is enabled by a build flag (LOAD_IMAGE_V2
) which is currently off by default for the AArch64 build.
Note TRUSTED_BOARD_BOOT
is currently not supported when LOAD_IMAGE_V2
is enabled.
Updated requirements for making contributions to TF-A.
Commits now must have a 'Signed-off-by:' field to certify that the contribution has been made under the terms of the {download}Developer Certificate of Origin <../dco.txt>
.
A signed CLA is no longer required.
The {ref}Contributor's Guide
has been updated to reflect this change.
Introduced Performance Measurement Framework (PMF) which provides support for capturing, storing, dumping and retrieving time-stamps to measure the execution time of critical paths in the firmware. This relies on defining fixed sample points at key places in the code.
To support the QEMU platform port, imported libfdt v1.4.1 from https://git.kernel.org/pub/scm/utils/dtc/dtc.git
Updated PSCI support:
pwr_domain_pwr_down_wfi()
, in plat_psci_ops
to enable platforms to perform platform-specific actions needed to enter powerdown, including the 'wfi' invocation.Enhancements to the translation table library:
Limited memory mapping support for region overlaps to only allow regions to overlap that are identity mapped or have the same virtual to physical address offset, and overlap completely but must not cover the same area.
This limitation will enable future enhancements without having to support complex edge cases that may not be necessary.
The initial translation lookup level is now inferred from the virtual address space size. Previously, it was hard-coded.
Added support for mapping Normal, Inner Non-cacheable, Outer Non-cacheable memory in the translation table library.
This can be useful to map a non-cacheable memory region, such as a DMA buffer.
Introduced the MT_EXECUTE/MT_EXECUTE_NEVER memory mapping attributes to specify the access permissions for instruction execution of a memory region.
Enabled support to isolate code and read-only data on separate memory pages, allowing independent access control to be applied to each.
Enabled SCR_EL3.SIF (Secure Instruction Fetch) bit in BL1 and BL31 common architectural setup code, preventing fetching instructions from non-secure memory when in secure state.
Enhancements to FIP support:
fip_create
with fiptool
which provides a more consistent and intuitive interface as well as additional support to remove an image from a FIP file.Refactored the TZC-400 driver to also support memory controllers that integrate TZC functionality, for example Arm CoreLink DMC-500. Also added DMC-500 specific support.
Implemented generic delay timer based on the system generic counter and migrated all platforms to use it.
Enhanced support for Arm platforms:
Applied following erratum workarounds for Cortex-A57: 833471, 826977, 829520, 828024 and 826974.
Added support for Mediatek MT6795 platform.
Added support for QEMU virtualization Armv8-A target.
Added support for Rockchip RK3368 and RK3399 platforms.
Added support for Xilinx Zynq UltraScale+ MPSoC platform.
Added support for Arm Cortex-A73 MPCore Processor.
Added support for Arm Cortex-A72 processor.
Added support for Arm Cortex-A35 processor.
Added support for Arm Cortex-A32 MPCore Processor.
Enabled preloaded BL33 alternative boot flow, in which BL2 does not load BL33 from non-volatile storage and BL31 hands execution over to a preloaded BL33. The User Guide has been updated with an example of how to use this option with a bootwrapped kernel.
Added support to build TF-A on a Windows-based host machine.
Updated Trusted Board Boot prototype implementation:
ROTPK_NOT_DEPLOYED
bit is set.Updated GICv3 support:
SYSTEM_OFF
API. This issue will be fixed in a future version of the model.-O0
) fails.The Trusted Board Boot implementation on Arm platforms now conforms to the mandatory requirements of the TBBR specification.
In particular, the boot process is now guarded by a Trusted Watchdog, which will reset the system in case of an authentication or loading error. On Arm platforms, a secure instance of Arm SP805 is used as the Trusted Watchdog.
Also, a firmware update process has been implemented. It enables authenticated firmware to update firmware images from external interfaces to SoC Non-Volatile memories. This feature functions even when the current firmware in the system is corrupt or missing; it therefore may be used as a recovery mode.
Improvements have been made to the Certificate Generation Tool (cert_create
) as follows.
Extended the FIP tool (fip_create
) to support the new set of images involved in the Firmware Update process.
Various memory footprint improvements. In particular:
Added the following new design documents:
Authentication Framework & Chain of Trust
Firmware Update (FWU)
CPU Reset
PSCI Power Domain Tree Structure
Applied the new image terminology to the code base and documentation, as described in the {ref}Image Terminology
document.
The build system has been reworked to improve readability and facilitate adding future extensions.
On Arm standard platforms, BL31 uses the boot console during cold boot but switches to the runtime console for any later logs at runtime. The TSP uses the runtime console for all output.
Implemented a basic NOR flash driver for Arm platforms. It programs the device using CFI (Common Flash Interface) standard commands.
Implemented support for booting EL3 payloads on Arm platforms, which reduces the complexity of developing EL3 baremetal code by doing essential baremetal initialization.
Provided separate drivers for GICv3 and GICv2. These expect the entire software stack to use either GICv2 or GICv3; hybrid GIC software systems are no longer supported and the legacy Arm GIC driver has been deprecated.
Added support for Juno r1 and r2. A single set of Juno TF-A binaries can run on Juno r0, r1 and r2 boards. Note that this TF-A version depends on a Linaro release that does not contain Juno r2 support.
Added support for MediaTek mt8173 platform.
Implemented a generic driver for Arm CCN IP.
Major rework of the PSCI implementation.
Added support for the SYSTEM_SUSPEND PSCI API on Arm platforms. When invoked on the last running core on a supported platform, this puts the system into a low power mode with memory retention.
Unified the reset handling code as much as possible across BL stages. Also introduced some build options to enable optimization of the reset path on platforms that support it.
Added a simple delay timer API, as well as an SP804 timer driver, which is enabled on FVP.
Added support for NVidia Tegra T210 and T132 SoCs.
Reorganised Arm platforms ports to greatly improve code shareability and facilitate the reuse of some of this code by other platforms.
Added support for Arm Cortex-A72 processor in the CPU specific framework.
Provided better error handling. Platform ports can now define their own error handling, for example to perform platform specific bookkeeping or post-error actions.
Implemented a unified driver for Arm Cache Coherent Interconnects used for both CCI-400 & CCI-500 IPs. Arm platforms ports have been migrated to this common driver. The standalone CCI-400 driver has been deprecated.
Authentication Framework & Chain of Trust
document. All missing mandatory features are now implemented.ARM_ROTPK_LOCATION
build option.SYSTEM_OFF
API. This issue will be fixed in a future version of the model.-O0
) fails.A prototype implementation of Trusted Board Boot has been added. Boot loader images are verified by BL1 and BL2 during the cold boot path. BL1 and BL2 use the PolarSSL SSL library to verify certificates and images. The OpenSSL library is used to create the X.509 certificates. Support has been added to fip_create
tool to package the certificates in a FIP.
Support for calling CPU and platform specific reset handlers upon entry into BL3-1 during the cold and warm boot paths has been added. This happens after another Boot ROM reset_handler()
has already run. This enables a developer to perform additional actions or undo actions already performed during the first call of the reset handlers e.g. apply additional errata workarounds.
Support has been added to demonstrate routing of IRQs to EL3 instead of S-EL1 when execution is in secure world.
The PSCI implementation now conforms to version 1.0 of the PSCI specification. All the mandatory APIs and selected optional APIs are supported. In particular, support for the PSCI_FEATURES
API has been added. A capability variable is constructed during initialization by examining the plat_pm_ops
and spd_pm_ops
exported by the platform and the Secure Payload Dispatcher. This is used by the PSCI FEATURES function to determine which PSCI APIs are supported by the platform.
Improvements have been made to the PSCI code as follows.
CPU_SUSPEND
, CPU_ON
and CPU_OFF
calls to facilitate an early return to the caller in case a failure condition is detected. For example, a PSCI CPU_SUSPEND
call returns SUCCESS
to the caller if a pending interrupt is detected early in the code path.power_state
and entrypoint
parameters early in PSCI CPU_ON
and CPU_SUSPEND
code paths.MIGRATE
call, the SPD hook to migrate the Trusted OS is invoked.It is now possible to build TF-A without marking at least an extra page of memory as coherent. The build flag USE_COHERENT_MEM
can be used to choose between the two implementations. This has been made possible through these changes.
Approximately, 4K worth of memory is saved for each boot loader stage when USE_COHERENT_MEM=0
. Enabling this option increases the latencies associated with acquire and release of locks. It also requires changes to the platform ports.
It is now possible to specify the name of the FIP at build time by defining the FIP_NAME
variable.
Issues with dependencies on the 'fiptool' makefile target have been rectified. The fip_create
tool is now rebuilt whenever its source files change.
The BL3-1 runtime console is now also used as the crash console. The crash console is changed to SoC UART0 (UART2) from the previous FPGA UART0 (UART0) on Juno. In FVP, it is changed from UART0 to UART1.
CPU errata workarounds are applied only when the revision and part number match. This behaviour has been made consistent across the debug and release builds. The debug build additionally prints a warning if a mismatch is detected.
It is now possible to issue cache maintenance operations by set/way for a particular level of data cache. Levels 1-3 are currently supported.
The following improvements have been made to the FVP port.
FVP_SHARED_DATA_LOCATION
which allowed relocation of shared data into the Trusted DRAM has been deprecated. Shared data is now always located at the base of Trusted SRAM.FVP_TSP_RAM_LOCATION
to the value dram
.Separate translation tables are created for each boot loader image. The IMAGE_BLx
build options are used to do this. This allows each stage to create mappings only for areas in the memory map that it needs.
A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been added. Details of using it with TF-A can be found in {ref}OP-TEE Dispatcher
The Juno port has been aligned with the FVP port as follows.
CPU_SUSPEND
calls that target a standby state are now supported.The Linux kernel version referred to in the user guide has DVFS and HMP support enabled.
DS-5 v5.19 did not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in CADI server mode. This issue is not seen with DS-5 v5.20 and Version 6.2 of the Cortex-A57-A53 Base FVPs.
plat_match_rotpk()
function. This prevents the correct establishment of the Chain of Trust at the first step in the Trusted Board Boot process.SYSTEM_OFF
API. This issue will be fixed in a future version of the model.It is now possible to map higher physical addresses using non-flat virtual to physical address mappings in the MMU setup.
Wider use is now made of the per-CPU data cache in BL3-1 to store:
The following RAM usage improvements result in a BL3-1 RAM usage reduction from 96KB to 56KB (for FVP with TSPD), and a total RAM usage reduction across all images from 208KB to 88KB, compared to the previous release.
early_exception
vectors from BL3-1 (2KB code size saving).psci_suspend_context
array, saving 2KB.aff_map_node
array, saving 1.5KB in the FVP port.tf_printf()
function, allowing the stack to be greatly reduced.cpu_context
structure so that registers that do not change during normal execution are re-initialized each time during cold/warm boot, rather than restored from memory. This saves about 1.2KB.PSCI SMC handler improvements to correctly handle calls from secure states and from AArch32.
CPU contexts are now initialized from the entry_point_info
. BL3-1 fully determines the exception level to use for the non-trusted firmware (BL3-3) based on the SPSR value provided by the BL2 platform code (or otherwise provided to BL3-1). This allows platform code to directly run non-trusted firmware payloads at either EL2 or EL1 without requiring an EL2 stub or OS loader.
Code refactoring improvements:
fvp_config
into a common platform header.io_init()
and moved all the IO storage framework code to one place.Improved console log output, by:
Moved up to the latest versions of the FVPs, toolchain, EDK2, kernel, Linaro file system and DS-5.
On the FVP port, made the use of the Trusted DRAM region optional at build time (off by default). Normal platforms will not have such a "ready-to-use" DRAM area so it is not a good example to use it.
Added support for PSCI SYSTEM_OFF
and SYSTEM_RESET
APIs.
Added support for CPU specific reset sequences, power down sequences and register dumping during crash reporting. The CPU specific reset sequences include support for errata workarounds.
Merged the Juno port into the master branch. Added support for CPU hotplug and CPU idle. Updated the user guide to describe how to build and run on the Juno platform.
GICv3 support is experimental. The Linux kernel patches to support this are not widely available. There are known issues with GICv3 initialization in the TF-A.
While this version greatly reduces the on-chip RAM requirements, there are further RAM usage enhancements that could be made.
The firmware design documentation for the Test Secure-EL1 Payload (TSP) and its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
The Juno-specific firmware design documentation is incomplete.
Some recent enhancements to the FVP port have not yet been translated into the Juno port. These will be tracked via the tf-issues project.
The Linux kernel version referred to in the user guide has DVFS and HMP support disabled due to some known instabilities at the time of this release. A future kernel version will re-enable these features.
DS-5 v5.19 does not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in CADI server mode. This is because the <SimName>
reported by the FVP in this version has changed. For example, for the Cortex-A57x4-A53x4 Base FVP, the <SimName>
reported by the FVP is FVP_Base_Cortex_A57x4_A53x4
, while DS-5 expects it to be FVP_Base_A57x4_A53x4
.
The temporary fix to this problem is to change the name of the FVP in sw/debugger/configdb/Boards/ARM FVP/Base_A57x4_A53x4/cadi_config.xml
. Change the following line:
<SimName>System Generator:FVP_Base_A57x4_A53x4</SimName>
to System Generator:FVP_Base_Cortex-A57x4_A53x4
A similar change can be made to the other Cortex-A57-A53 Base FVP variants.
Makefile improvements:
dump
target (build now always produces dump files).fip
target optional.vpath
keyword.Provided translation table library code for potential re-use by platforms other than the FVPs.
Moved architectural timer setup to platform-specific code.
Added standby state support to PSCI cpu_suspend implementation.
SRAM usage improvements:
-ffunction-sections
, -fdata-sections
and --gc-sections
compiler/linker options to remove unused code and data from the images. Previously, all common functions were being built into all binary images, whether or not they were actually used.Moved the Test Secure-EL1 Payload (BL3-2) to execute in Trusted SRAM by default. The option for it to run in Trusted DRAM remains.
Implemented a TrustZone Address Space Controller (TZC-400) driver. A default configuration is provided for the Base FVPs. This means the model parameter -C bp.secure_memory=1
is now supported.
Started saving the PSCI cpu_suspend 'power_state' parameter prior to suspending a CPU. This allows platforms that implement multiple power-down states at the same affinity level to identify a specific state.
Refactored the entire codebase to reduce the amount of nesting in header files and to make the use of system/user includes more consistent. Also split platform.h to separate out the platform porting declarations from the required platform porting definitions and the definitions/declarations specific to the platform port.
Optimized the data cache clean/invalidate operations.
Improved the BL3-1 unhandled exception handling and reporting. Unhandled exceptions now result in a dump of registers to the console.
Major rework to the handover interface between BL stages, in particular the interface to BL3-1. The interface now conforms to a specification and is more future proof.
Added support for optionally making the BL3-1 entrypoint a reset handler (instead of BL1). This allows platforms with an alternative image loading architecture to re-use BL3-1 with fewer modifications to generic code.
Reserved some DDR DRAM for secure use on FVP platforms to avoid future compatibility problems with non-secure software.
Added support for secure interrupts targeting the Secure-EL1 Payload (SP) (using GICv2 routing only). Demonstrated this working by adding an interrupt target and supporting test code to the TSP. Also demonstrated non-secure interrupt handling during TSP processing.
-C bp.secure_memory=1
in the Base FVPs (see New features).Support for Foundation FVP Version 2.0 added. The documented UEFI configuration disables some devices that are unavailable in the Foundation FVP, including MMC and CLCD. The resultant UEFI binary can be used on the AEMv8 and Cortex-A57-A53 Base FVPs, as well as the Foundation FVP.
:::{note} The software will not work on Version 1.0 of the Foundation FVP. :::
Enabled third party contributions. Added a new contributing.md containing instructions for how to contribute and updated copyright text in all files to acknowledge contributors.
The PSCI CPU_SUSPEND API has been stabilised to the extent where it can be used for entry into power down states with the following restrictions:
The PSCI AFFINITY_INFO api has undergone limited testing on the Base FVPs to allow experimental use.
Required C library and runtime header files are now included locally in TF-A instead of depending on the toolchain standard include paths. The local implementation has been cleaned up and reduced in scope.
Added I/O abstraction framework, primarily to allow generic code to load images in a platform-independent way. The existing image loading code has been reworked to use the new framework. Semi-hosting and NOR flash I/O drivers are provided.
Introduced Firmware Image Package (FIP) handling code and tools. A FIP combines multiple firmware images with a Table of Contents (ToC) into a single binary image. The new FIP driver is another type of I/O driver. The Makefile builds a FIP by default and the FVP platform code expect to load a FIP from NOR flash, although some support for image loading using semi- hosting is retained.
:::{note} Building a FIP by default is a non-backwards-compatible change. :::
:::{note} Generic BL2 code now loads a BL3-3 (non-trusted firmware) image into DRAM instead of expecting this to be pre-loaded at known location. This is also a non-backwards-compatible change. :::
:::{note} Some non-trusted firmware (e.g. UEFI) will need to be rebuilt so that it knows the new location to execute from and no longer needs to copy particular code modules to DRAM itself. :::
Reworked BL2 to BL3-1 handover interface. A new composite structure (bl31_args) holds the superset of information that needs to be passed from BL2 to BL3-1, including information on how handover execution control to BL3-2 (if present) and BL3-3 (non-trusted firmware).
Added library support for CPU context management, allowing the saving and restoring of
Added a framework for implementing EL3 runtime services. Reworked the PSCI implementation to be one such runtime service.
Reworked the exception handling logic, making use of both SP_EL0 and SP_EL3 stack pointers for determining the type of exception, managing general purpose and system register context on exception entry/exit, and handling SMCs. SMCs are directed to the correct EL3 runtime service.
Added support for a Test Secure-EL1 Payload (TSP) and a corresponding Dispatcher (TSPD), which is loaded as an EL3 runtime service. The TSPD implements Secure Monitor functionality such as world switching and EL1 context management, and is responsible for communication with the TSP.
:::{note} The TSPD does not yet contain support for secure world interrupts. :::
:::{note} The TSP/TSPD is not built by default. :::
AFFINITY_INFO
& PSCI_VERSION
have now been tested (to a limited extent)../build
directory and sub-directories instead of being placed in the root of the project.The following is a list of issues which are expected to be fixed in the future releases of TF-A.
-C bp.secure_memory=1
is not supported.The following is a list of issues which are expected to be fixed in the future releases of TF-A.
-C bp.secure_memory=1
is not supported.CPU_SUSPEND
is present, it is not yet stable and ready for use.AFFINITY_INFO
& PSCI_VERSION
are implemented but have not been tested.init
from the RAM-disk. As an alternative, the VirtioBlock mechanism can be used to provide a file-system to the kernel.Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.