1*c4e8edabSChris Kay# Change Log & Release Notes 2*c4e8edabSChris Kay 3*c4e8edabSChris KayThis document contains a summary of the new features, changes, fixes and known 4*c4e8edabSChris Kayissues in each release of Trusted Firmware-A. 5*c4e8edabSChris Kay 6*c4e8edabSChris Kay## 2.5.0 (2021-05-17) 7*c4e8edabSChris Kay 8*c4e8edabSChris Kay### New Features 9*c4e8edabSChris Kay 10*c4e8edabSChris Kay- Architecture support 11*c4e8edabSChris Kay 12*c4e8edabSChris Kay - Added support for speculation barrier(`FEAT_SB`) for non-Armv8.5 platforms 13*c4e8edabSChris Kay starting from Armv8.0 14*c4e8edabSChris Kay - Added support for Activity Monitors Extension version 1.1(`FEAT_AMUv1p1`) 15*c4e8edabSChris Kay - Added helper functions for Random number generator(`FEAT_RNG`) registers 16*c4e8edabSChris Kay - Added support for Armv8.6 Multi-threaded PMU extensions (`FEAT_MTPMU`) 17*c4e8edabSChris Kay - Added support for MTE Asymmetric Fault Handling extensions(`FEAT_MTE3`) 18*c4e8edabSChris Kay - Added support for Privileged Access Never extensions(`FEAT_PANx`) 19*c4e8edabSChris Kay 20*c4e8edabSChris Kay- Bootloader images 21*c4e8edabSChris Kay 22*c4e8edabSChris Kay - Added PIE support for AArch32 builds 23*c4e8edabSChris Kay - Enable Trusted Random Number Generator service for BL32(sp_min) 24*c4e8edabSChris Kay 25*c4e8edabSChris Kay- Build System 26*c4e8edabSChris Kay 27*c4e8edabSChris Kay - Added build option for Arm Feature Modifiers 28*c4e8edabSChris Kay 29*c4e8edabSChris Kay- Drivers 30*c4e8edabSChris Kay 31*c4e8edabSChris Kay - Added support for interrupts in TZC-400 driver 32*c4e8edabSChris Kay - Broadcom 33*c4e8edabSChris Kay - Added support for I2C, MDIO and USB drivers 34*c4e8edabSChris Kay - Marvell 35*c4e8edabSChris Kay - Added support for secure read/write of dfc register-set 36*c4e8edabSChris Kay - Added support for thermal sensor driver 37*c4e8edabSChris Kay - Implement a3700_core_getc API in console driver 38*c4e8edabSChris Kay - Added rx training on 10G port 39*c4e8edabSChris Kay - Marvell Mochi 40*c4e8edabSChris Kay - Added support for cn913x in PCIe mode 41*c4e8edabSChris Kay - Marvell Armada A8K 42*c4e8edabSChris Kay - Added support for TRNG-IP-76 driver and accessing RNG register 43*c4e8edabSChris Kay - Mediatek MT8192 44*c4e8edabSChris Kay - Added support for following drivers 45*c4e8edabSChris Kay - MPU configuration for SCP/PCIe 46*c4e8edabSChris Kay - SPM suspend 47*c4e8edabSChris Kay - Vcore DVFS 48*c4e8edabSChris Kay - LPM 49*c4e8edabSChris Kay - PTP3 50*c4e8edabSChris Kay - UART save and restore 51*c4e8edabSChris Kay - Power-off 52*c4e8edabSChris Kay - PMIC 53*c4e8edabSChris Kay - CPU hotplug and MCDI support 54*c4e8edabSChris Kay - SPMC 55*c4e8edabSChris Kay - MPU 56*c4e8edabSChris Kay - Mediatek MT8195 57*c4e8edabSChris Kay - Added support for following drivers 58*c4e8edabSChris Kay - GPIO, NCDI, SPMC drivers 59*c4e8edabSChris Kay - Power-off 60*c4e8edabSChris Kay - CPU hotplug, reboot and MCDI 61*c4e8edabSChris Kay - Delay timer and sys timer 62*c4e8edabSChris Kay - GIC 63*c4e8edabSChris Kay - NXP 64*c4e8edabSChris Kay - Added support for 65*c4e8edabSChris Kay - non-volatile storage API 66*c4e8edabSChris Kay - chain of trust and trusted board boot using two modes: MBEDTLS and CSF 67*c4e8edabSChris Kay - fip-handler necessary for DDR initialization 68*c4e8edabSChris Kay - SMMU and console drivers 69*c4e8edabSChris Kay - crypto hardware accelerator driver 70*c4e8edabSChris Kay - following drivers: SD, EMMC, QSPI, FLEXSPI, GPIO, GIC, CSU, PMU, DDR 71*c4e8edabSChris Kay - NXP Security Monitor and SFP driver 72*c4e8edabSChris Kay - interconnect config APIs using ARM CCN-CCI driver 73*c4e8edabSChris Kay - TZC APIs to configure DDR region 74*c4e8edabSChris Kay - generic timer driver 75*c4e8edabSChris Kay - Device configuration driver 76*c4e8edabSChris Kay - IMX 77*c4e8edabSChris Kay - Added support for image loading and io-storage driver for TBBR fip booting 78*c4e8edabSChris Kay - Renesas 79*c4e8edabSChris Kay - Added support for PFC and EMMC driver 80*c4e8edabSChris Kay - RZ Family: 81*c4e8edabSChris Kay - G2N, G2E and G2H SoCs 82*c4e8edabSChris Kay - Added support for watchdog, QoS, PFC and DRAM initialization 83*c4e8edabSChris Kay - RZG Family: 84*c4e8edabSChris Kay - G2M 85*c4e8edabSChris Kay - Added support for QoS and DRAM initialization 86*c4e8edabSChris Kay - Xilinx 87*c4e8edabSChris Kay - Added JTAG DCC support for Versal and ZynqMP SoC family. 88*c4e8edabSChris Kay 89*c4e8edabSChris Kay- Libraries 90*c4e8edabSChris Kay 91*c4e8edabSChris Kay - C standard library 92*c4e8edabSChris Kay - Added support to print `%` in `snprintf()` and `printf()` APIs 93*c4e8edabSChris Kay - Added support for strtoull, strtoll, strtoul, strtol APIs from FreeBSD 94*c4e8edabSChris Kay project 95*c4e8edabSChris Kay - CPU support 96*c4e8edabSChris Kay - Added support for 97*c4e8edabSChris Kay - Cortex_A78C CPU 98*c4e8edabSChris Kay - Makalu ELP CPU 99*c4e8edabSChris Kay - Makalu CPU 100*c4e8edabSChris Kay - Matterhorn ELP CPU 101*c4e8edabSChris Kay - Neoverse-N2 CPU 102*c4e8edabSChris Kay - CPU Errata 103*c4e8edabSChris Kay - Arm Cortex-A76: Added workaround for erratum 1946160 104*c4e8edabSChris Kay - Arm Cortex-A77: Added workaround for erratum 1946167 105*c4e8edabSChris Kay - Arm Cortex-A78: Added workaround for erratum 1941498 and 1951500 106*c4e8edabSChris Kay - Arm Neoverse-N1: Added workaround for erratum 1946160 107*c4e8edabSChris Kay - Flattened device tree(libfdt) 108*c4e8edabSChris Kay - Added support for wrapper function to read UUIDs in string format from dtb 109*c4e8edabSChris Kay 110*c4e8edabSChris Kay- Platforms 111*c4e8edabSChris Kay 112*c4e8edabSChris Kay - Added support for MediaTek MT8195 113*c4e8edabSChris Kay - Added support for Arm RD-N2 board 114*c4e8edabSChris Kay - Allwinner 115*c4e8edabSChris Kay - Added support for H616 SoC 116*c4e8edabSChris Kay - Arm 117*c4e8edabSChris Kay - Added support for GPT parser 118*c4e8edabSChris Kay - Protect GICR frames for fused/unused cores 119*c4e8edabSChris Kay - Arm Morello 120*c4e8edabSChris Kay - Added VirtIO network device to Morello FVP fdts 121*c4e8edabSChris Kay - Arm RD-N2 122*c4e8edabSChris Kay - Added support for variant 1 of RD-N2 platform 123*c4e8edabSChris Kay - Enable AMU support 124*c4e8edabSChris Kay - Arm RD-V1 125*c4e8edabSChris Kay - Enable AMU support 126*c4e8edabSChris Kay - Arm SGI 127*c4e8edabSChris Kay - Added support for platform variant build option 128*c4e8edabSChris Kay - Arm TC0 129*c4e8edabSChris Kay - Added Matterhorn ELP CPU support 130*c4e8edabSChris Kay - Added support for opteed 131*c4e8edabSChris Kay - Arm Juno 132*c4e8edabSChris Kay - Added support to use hw_config in BL31 133*c4e8edabSChris Kay - Use TRNG entropy source for SMCCC TRNG interface 134*c4e8edabSChris Kay - Condition Juno entropy source with CRC instructions 135*c4e8edabSChris Kay - Marvell Mochi 136*c4e8edabSChris Kay - Added support for detection of secure mode 137*c4e8edabSChris Kay - Marvell ARMADA 138*c4e8edabSChris Kay - Added support for new compile option A3720_DB_PM_WAKEUP_SRC 139*c4e8edabSChris Kay - Added support doing system reset via CM3 secure coprocessor 140*c4e8edabSChris Kay - Made several makefile enhancements required to build WTMI_MULTI_IMG and 141*c4e8edabSChris Kay TIMDDRTOOL 142*c4e8edabSChris Kay - Added support for building DOIMAGETOOL tool 143*c4e8edabSChris Kay - Added new target mrvl_bootimage 144*c4e8edabSChris Kay - Mediatek MT8192 145*c4e8edabSChris Kay - Added support for rtc power off sequence 146*c4e8edabSChris Kay - Mediatek MT8195 147*c4e8edabSChris Kay - Added support for SiP service 148*c4e8edabSChris Kay - STM32MP1 149*c4e8edabSChris Kay - Added support for 150*c4e8edabSChris Kay - Seeed ODYSSEY SoM and board 151*c4e8edabSChris Kay - SDMMC2 and I2C2 pins in pinctrl 152*c4e8edabSChris Kay - I2C2 peripheral in DTS 153*c4e8edabSChris Kay - PIE for BL32 154*c4e8edabSChris Kay - TZC-400 interrupt managament 155*c4e8edabSChris Kay - Linux Automation MC-1 board 156*c4e8edabSChris Kay - Renesas RZG 157*c4e8edabSChris Kay - Added support for identifying EK874 RZ/G2E board 158*c4e8edabSChris Kay - Added support for identifying HopeRun HiHope RZ/G2H and RZ/G2H boards 159*c4e8edabSChris Kay - Rockchip 160*c4e8edabSChris Kay - Added support for stack protector 161*c4e8edabSChris Kay - QEMU 162*c4e8edabSChris Kay - Added support for `max` CPU 163*c4e8edabSChris Kay - Added Cortex-A72 support to `virt` platform 164*c4e8edabSChris Kay - Enabled trigger reboot from secure pl061 165*c4e8edabSChris Kay - QEMU SBSA 166*c4e8edabSChris Kay - Added support for sbsa-ref Embedded Controller 167*c4e8edabSChris Kay - NXP 168*c4e8edabSChris Kay - Added support for warm reset to retain ddr content 169*c4e8edabSChris Kay - Added support for image loader necessary for loading fip image 170*c4e8edabSChris Kay - lx2160a SoC Family 171*c4e8edabSChris Kay - Added support for 172*c4e8edabSChris Kay - new platform lx2160a-aqds 173*c4e8edabSChris Kay - new platform lx2160a-rdb 174*c4e8edabSChris Kay - new platform lx2162a-aqds 175*c4e8edabSChris Kay - errata handling 176*c4e8edabSChris Kay - IMX imx8mm 177*c4e8edabSChris Kay - Added support for trusted board boot 178*c4e8edabSChris Kay - TI K3 179*c4e8edabSChris Kay - Added support for lite device board 180*c4e8edabSChris Kay - Enabled Cortex-A72 erratum 1319367 181*c4e8edabSChris Kay - Enabled Cortex-A53 erratum 1530924 182*c4e8edabSChris Kay - Xilinx ZynqMP 183*c4e8edabSChris Kay - Added support for PS and system reset on WDT restart 184*c4e8edabSChris Kay - Added support for error management 185*c4e8edabSChris Kay - Enable support for log messages necessary for debug 186*c4e8edabSChris Kay - Added support for PM API SMC call for efuse and register access 187*c4e8edabSChris Kay 188*c4e8edabSChris Kay- Processes 189*c4e8edabSChris Kay 190*c4e8edabSChris Kay - Introduced process for platform deprecation 191*c4e8edabSChris Kay - Added documentation for TF-A threat model 192*c4e8edabSChris Kay - Provided a copy of the MIT license to comply with the license requirements 193*c4e8edabSChris Kay of the arm-gic.h source file (originating from the Linux kernel project and 194*c4e8edabSChris Kay re-distributed in TF-A). 195*c4e8edabSChris Kay 196*c4e8edabSChris Kay- Services 197*c4e8edabSChris Kay 198*c4e8edabSChris Kay - Added support for TRNG firmware interface service 199*c4e8edabSChris Kay - Arm 200*c4e8edabSChris Kay - Added SiP service to configure Ethos-N NPU 201*c4e8edabSChris Kay - SPMC 202*c4e8edabSChris Kay - Added documentation for SPM(Hafnium) SMMUv3 driver 203*c4e8edabSChris Kay - SPMD 204*c4e8edabSChris Kay - Added support for 205*c4e8edabSChris Kay - FFA_INTERRUPT forwading ABI 206*c4e8edabSChris Kay - FFA_SECONDARY_EP_REGISTER ABI 207*c4e8edabSChris Kay - FF-A v1.0 boot time power management, SPMC secondary core boot and early 208*c4e8edabSChris Kay run-time power management 209*c4e8edabSChris Kay 210*c4e8edabSChris Kay- Tools 211*c4e8edabSChris Kay 212*c4e8edabSChris Kay - FIPTool 213*c4e8edabSChris Kay - Added mechanism to allow platform specific image UUID 214*c4e8edabSChris Kay - git hooks 215*c4e8edabSChris Kay - Added support for conventional commits through commitlint hook, commitizen 216*c4e8edabSChris Kay hook and husky configuration files. 217*c4e8edabSChris Kay - NXP tool 218*c4e8edabSChris Kay - Added support for a tool that creates pbl file from BL2 219*c4e8edabSChris Kay - Renesas RZ/G2 220*c4e8edabSChris Kay - Added tool support for creating bootparam and cert_header images 221*c4e8edabSChris Kay - CertCreate 222*c4e8edabSChris Kay - Added support for platform-defined certificates, keys, and extensions 223*c4e8edabSChris Kay using the platform's makefile 224*c4e8edabSChris Kay - shared tools 225*c4e8edabSChris Kay - Added EFI_GUID representation to uuid helper data structure 226*c4e8edabSChris Kay 227*c4e8edabSChris Kay### Changed 228*c4e8edabSChris Kay 229*c4e8edabSChris Kay- Common components 230*c4e8edabSChris Kay 231*c4e8edabSChris Kay - Print newline after hex address in aarch64 el3_panic function 232*c4e8edabSChris Kay - Use proper `#address-cells` and `#size-cells` for reserved-memory in dtbs 233*c4e8edabSChris Kay 234*c4e8edabSChris Kay- Drivers 235*c4e8edabSChris Kay 236*c4e8edabSChris Kay - Move SCMI driver from ST platform directory and make it common to all 237*c4e8edabSChris Kay platforms 238*c4e8edabSChris Kay - Arm GICv3 239*c4e8edabSChris Kay - Shift eSPI register offset in GICD_OFFSET_64() 240*c4e8edabSChris Kay - Use mpidr to probe GICR for current CPU 241*c4e8edabSChris Kay - Arm TZC-400 242*c4e8edabSChris Kay - Adjust filter tag if it set to FILTER_BIT_ALL 243*c4e8edabSChris Kay - Cadence 244*c4e8edabSChris Kay - Enhance UART driver APIs to put characters to fifo 245*c4e8edabSChris Kay - Mediatek MT8192 246*c4e8edabSChris Kay - Move timer driver to common folder 247*c4e8edabSChris Kay - Enhanced sys_cirq driver to add more IC services 248*c4e8edabSChris Kay - Renesas 249*c4e8edabSChris Kay - Move ddr and delay driver to common directory 250*c4e8edabSChris Kay - Renesas rcar 251*c4e8edabSChris Kay - Treat log as device memory in console driver 252*c4e8edabSChris Kay - Renesas RZ Family: 253*c4e8edabSChris Kay - G2N and G2H SoCs 254*c4e8edabSChris Kay - Select MMC_CH1 for eMMC channel 255*c4e8edabSChris Kay - Marvell 256*c4e8edabSChris Kay - Added support for checking if TRNG unit is present 257*c4e8edabSChris Kay - Marvell A3K 258*c4e8edabSChris Kay - Set TXDCLK_2X_SEL bit during PCIe initialization 259*c4e8edabSChris Kay - Set mask parameter for every reg_set call 260*c4e8edabSChris Kay - Marvell Mochi 261*c4e8edabSChris Kay - Added missing stream IDs configurations 262*c4e8edabSChris Kay - MbedTLS 263*c4e8edabSChris Kay - Migrated to Mbed TLS v2.26.0 264*c4e8edabSChris Kay - IMX imx8mp 265*c4e8edabSChris Kay - Change the bl31 physical load address 266*c4e8edabSChris Kay - QEMU SBSA 267*c4e8edabSChris Kay - Enable secure variable storage 268*c4e8edabSChris Kay - SCMI 269*c4e8edabSChris Kay - Update power domain protocol version to 2.0 270*c4e8edabSChris Kay - STM32 271*c4e8edabSChris Kay - Remove dead code from nand FMC driver 272*c4e8edabSChris Kay 273*c4e8edabSChris Kay- Libraries 274*c4e8edabSChris Kay 275*c4e8edabSChris Kay - C Standard Library 276*c4e8edabSChris Kay - Use macros to reduce duplicated code between snprintf and printf 277*c4e8edabSChris Kay - CPU support 278*c4e8edabSChris Kay - Sanity check pointers before use in AArch32 builds 279*c4e8edabSChris Kay - Arm Cortex-A78 280*c4e8edabSChris Kay - Remove rainier cpu workaround for errata 1542319 281*c4e8edabSChris Kay - Arm Makalu ELP 282*c4e8edabSChris Kay - Added "\_arm" suffix to Makalu ELP CPU lib 283*c4e8edabSChris Kay 284*c4e8edabSChris Kay- Miscellaneous 285*c4e8edabSChris Kay 286*c4e8edabSChris Kay - Editorconfig 287*c4e8edabSChris Kay - set max line length to 100 288*c4e8edabSChris Kay 289*c4e8edabSChris Kay- Platforms 290*c4e8edabSChris Kay 291*c4e8edabSChris Kay - Allwinner 292*c4e8edabSChris Kay - Added reserved-memory node to DT 293*c4e8edabSChris Kay - Express memmap more dynamically 294*c4e8edabSChris Kay - Move SEPARATE_NOBITS_REGION to platforms 295*c4e8edabSChris Kay - Limit FDT checks to reduce code size 296*c4e8edabSChris Kay - Use CPUIDLE hardware when available 297*c4e8edabSChris Kay - Allow conditional compilation of SCPI and native PSCI ops 298*c4e8edabSChris Kay - Always use a 3MHz RSB bus clock 299*c4e8edabSChris Kay - Enable workaround for Cortex-A53 erratum 1530924 300*c4e8edabSChris Kay - Fixed non-default PRELOADED_BL33_BASE 301*c4e8edabSChris Kay - Leave CPU power alone during BL31 setup 302*c4e8edabSChris Kay - Added several psci hooks enhancements to improve system shutdown/reset 303*c4e8edabSChris Kay sequence 304*c4e8edabSChris Kay - Return the PMIC to I2C mode after use 305*c4e8edabSChris Kay - Separate code to power off self and other CPUs 306*c4e8edabSChris Kay - Split native and SCPI-based PSCI implementations 307*c4e8edabSChris Kay - Allwinner H6 308*c4e8edabSChris Kay - Added R_PRCM security setup for H6 board 309*c4e8edabSChris Kay - Added SPC security setup for H6 board 310*c4e8edabSChris Kay - Use RSB for the PMIC connection on H6 311*c4e8edabSChris Kay - Arm 312*c4e8edabSChris Kay - Store UUID as a string, rather than ints 313*c4e8edabSChris Kay - Replace FIP base and size macro with a generic name 314*c4e8edabSChris Kay - Move compile time switch from source to dt file 315*c4e8edabSChris Kay - Don't provide NT_FW_CONFIG when booting hafnium 316*c4e8edabSChris Kay - Do not setup 'disabled' regulator 317*c4e8edabSChris Kay - Increase SP max size 318*c4e8edabSChris Kay - Remove false dependency of ARM_LINUX_KERNEL_AS_BL33 on RESET_TO_BL31 and 319*c4e8edabSChris Kay allow it to be enabled independently 320*c4e8edabSChris Kay - Arm FVP 321*c4e8edabSChris Kay - Do not map GIC region in BL1 and BL2 322*c4e8edabSChris Kay - Arm Juno 323*c4e8edabSChris Kay - Refactor juno_getentropy() to return 64 bits on each call 324*c4e8edabSChris Kay - Arm Morello 325*c4e8edabSChris Kay - Remove "virtio-rng" from Morello FVP 326*c4e8edabSChris Kay - Enable virtIO P9 device for Morello fvp 327*c4e8edabSChris Kay - Arm RDV1 328*c4e8edabSChris Kay - Allow all PSCI callbacks on RD-V1 329*c4e8edabSChris Kay - Rename rddaniel to rdv1 330*c4e8edabSChris Kay - Arm RDV1MC 331*c4e8edabSChris Kay - Rename rddanielxlr to rdv1mc 332*c4e8edabSChris Kay - Initialize TZC-400 controllers 333*c4e8edabSChris Kay - Arm TC0 334*c4e8edabSChris Kay - Updated GICR base address 335*c4e8edabSChris Kay - Use scmi_dvfs clock index 1 for cores 4-7 through fdt 336*c4e8edabSChris Kay - Added reserved-memory node for OP-TEE fdts 337*c4e8edabSChris Kay - Enabled Theodul DSU in TC platform 338*c4e8edabSChris Kay - OP-TEE as S-EL1 SP with SPMC at S-EL2 339*c4e8edabSChris Kay - Update Matterhorm ELP DVFS clock index 340*c4e8edabSChris Kay - Arm SGI 341*c4e8edabSChris Kay - Allow access to TZC controller on all chips 342*c4e8edabSChris Kay - Define memory regions for multi-chip platforms 343*c4e8edabSChris Kay - Allow access to nor2 flash and system registers from S-EL0 344*c4e8edabSChris Kay - Define default list of memory regions for DMC-620 TZC 345*c4e8edabSChris Kay - Improve macros defining cper buffer memory region 346*c4e8edabSChris Kay - Refactor DMC-620 error handling SMC function id 347*c4e8edabSChris Kay - Refactor SDEI specific macros 348*c4e8edabSChris Kay - Added platform id value for RDN2 platform 349*c4e8edabSChris Kay - Refactored header file inclusions and inclusion of memory mapping 350*c4e8edabSChris Kay - Arm RDN2 351*c4e8edabSChris Kay - Allow usage of secure partitions on RDN2 platform 352*c4e8edabSChris Kay - Update GIC redistributor and TZC base address 353*c4e8edabSChris Kay - Arm SGM775 354*c4e8edabSChris Kay - Deprecate Arm sgm775 FVP platform 355*c4e8edabSChris Kay - Marvell 356*c4e8edabSChris Kay - Increase TX FIFO EMPTY timeout from 2ms to 3ms 357*c4e8edabSChris Kay - Update delay code to be compatible with 1200 MHz CPU 358*c4e8edabSChris Kay - Marvell ARMADA 359*c4e8edabSChris Kay - Postpone MSS CPU startup to BL31 stage 360*c4e8edabSChris Kay - Allow builds without MSS support 361*c4e8edabSChris Kay - Use MSS SRAM in secure mode 362*c4e8edabSChris Kay - Added missing FORCE, .PHONY and clean targets 363*c4e8edabSChris Kay - Cleanup MSS SRAM if used for copy 364*c4e8edabSChris Kay - Move definition of mrvl_flash target to common marvell_common.mk file 365*c4e8edabSChris Kay - Show informative build messages and blank lines 366*c4e8edabSChris Kay - Marvell ARMADA A3K 367*c4e8edabSChris Kay - Added a new target mrvl_uart which builds UART image 368*c4e8edabSChris Kay - Added checks that WTP, MV_DDR_PATH and CRYPTOPP_PATH are correctly defined 369*c4e8edabSChris Kay - Allow use of the system Crypto++ library 370*c4e8edabSChris Kay - Build \$(WTMI_ENC_IMG) in \$(BUILD_PLAT) directory 371*c4e8edabSChris Kay - Build intermediate files in \$(BUILD_PLAT) directory 372*c4e8edabSChris Kay - Build UART image files directly in \$(BUILD_UART) subdirectory 373*c4e8edabSChris Kay - Correctly set DDR_TOPOLOGY and CLOCKSPRESET for WTMI 374*c4e8edabSChris Kay - Do not use 'echo -e' in Makefile 375*c4e8edabSChris Kay - Improve 4GB DRAM usage from 3.375 GB to 3.75 GB 376*c4e8edabSChris Kay - Remove unused variable WTMI_SYSINIT_IMG from Makefile 377*c4e8edabSChris Kay - Simplify check if WTP variable is defined 378*c4e8edabSChris Kay - Split building \$(WTMI_MULTI_IMG) and \$(TIMDDRTOOL) 379*c4e8edabSChris Kay - Marvell ARMADA A8K 380*c4e8edabSChris Kay - Allow CP1/CP2 mapping at BLE stage 381*c4e8edabSChris Kay - Mediatek MT8183 382*c4e8edabSChris Kay - Added timer V20 compensation 383*c4e8edabSChris Kay - Nvidia Tegra 384*c4e8edabSChris Kay - Rename SMC API 385*c4e8edabSChris Kay - TI K3 386*c4e8edabSChris Kay - Make plat_get_syscnt_freq2 helper check CNT_FID0 register 387*c4e8edabSChris Kay - Fill non-message data fields in sec_proxy with 0x0 388*c4e8edabSChris Kay - Update ti_sci_msg_req_reboot ABI to include domain 389*c4e8edabSChris Kay - Enable USE_COHERENT_MEM only for the generic board 390*c4e8edabSChris Kay - Explicitly map SEC_SRAM_BASE to 0x0 391*c4e8edabSChris Kay - Use BL31_SIZE instead of computing 392*c4e8edabSChris Kay - Define the correct number of max table entries and increase SRAM size to 393*c4e8edabSChris Kay account for additional table 394*c4e8edabSChris Kay - Raspberry Pi4 395*c4e8edabSChris Kay - Switch to gicv2.mk and GICV2_SOURCES 396*c4e8edabSChris Kay - Renesas 397*c4e8edabSChris Kay - Move headers and assembly files to common folder 398*c4e8edabSChris Kay - Renesas rzg 399*c4e8edabSChris Kay - Added device tree memory node enhancements 400*c4e8edabSChris Kay - Rockchip 401*c4e8edabSChris Kay - Switch to using common gicv3.mk 402*c4e8edabSChris Kay - STM32MP1 403*c4e8edabSChris Kay - Set BL sizes regardless of flags 404*c4e8edabSChris Kay - QEMU 405*c4e8edabSChris Kay - Include gicv2.mk for compiling GICv2 source files 406*c4e8edabSChris Kay - Change DEVICE2 definition for MMU 407*c4e8edabSChris Kay - Added helper to calculate the position shift from MPIDR 408*c4e8edabSChris Kay - QEMU SBSA 409*c4e8edabSChris Kay - Include libraries for Cortex-A72 410*c4e8edabSChris Kay - Increase SHARED_RAM_SIZE 411*c4e8edabSChris Kay - Addes support in spm_mm for upto 512 cores 412*c4e8edabSChris Kay - Added support for topology handling 413*c4e8edabSChris Kay - QTI 414*c4e8edabSChris Kay - Mandate SMC implementation 415*c4e8edabSChris Kay - Xilinx 416*c4e8edabSChris Kay - Rename the IPI CRC checksum macro 417*c4e8edabSChris Kay - Use fno-jump-tables flag in CPPFLAGS 418*c4e8edabSChris Kay - Xilinx versal 419*c4e8edabSChris Kay - Added the IPI CRC checksum macro support 420*c4e8edabSChris Kay - Mark IPI calls secure/non-secure 421*c4e8edabSChris Kay - Enable sgi to communicate with linux using IPI 422*c4e8edabSChris Kay - Remove Cortex-A53 compilation 423*c4e8edabSChris Kay - Xilinx ZynqMP 424*c4e8edabSChris Kay - Configure counter frequency during initialization 425*c4e8edabSChris Kay - Filter errors related to clock gate permissions 426*c4e8edabSChris Kay - Implement pinctrl request/release EEMI API 427*c4e8edabSChris Kay - Reimplement pinctrl get/set config parameter EEMI API calls 428*c4e8edabSChris Kay - Reimplement pinctrl set/get function EEMI API 429*c4e8edabSChris Kay - Update error codes to match Linux and PMU Firmware 430*c4e8edabSChris Kay - Update PM version and support PM version check 431*c4e8edabSChris Kay - Update return type in query functions 432*c4e8edabSChris Kay - Added missing ids for 43/46/47dr devices 433*c4e8edabSChris Kay - Checked for DLL status before doing reset 434*c4e8edabSChris Kay - Disable ITAPDLYENA bit for zero ITAP delay 435*c4e8edabSChris Kay - Include GICv2 makefile 436*c4e8edabSChris Kay - Remove the custom crash implementation 437*c4e8edabSChris Kay 438*c4e8edabSChris Kay- Services 439*c4e8edabSChris Kay 440*c4e8edabSChris Kay - SPMD 441*c4e8edabSChris Kay - Lock the g_spmd_pm structure 442*c4e8edabSChris Kay - Declare third cactus instance as UP SP 443*c4e8edabSChris Kay - Provide number of vCPUs and VM size for first SP 444*c4e8edabSChris Kay - Remove `chosen` node from SPMC manifests 445*c4e8edabSChris Kay - Move OP-TEE SP manifest DTS to FVP platform 446*c4e8edabSChris Kay - Update OP-TEE SP manifest with device-regions node 447*c4e8edabSChris Kay - Remove device-memory node from SPMC manifests 448*c4e8edabSChris Kay - SPM_MM 449*c4e8edabSChris Kay - Use sp_boot_info to set SP context 450*c4e8edabSChris Kay - SDEI 451*c4e8edabSChris Kay - Updata the affinity of shared event 452*c4e8edabSChris Kay 453*c4e8edabSChris Kay- Tools 454*c4e8edabSChris Kay 455*c4e8edabSChris Kay - FIPtool 456*c4e8edabSChris Kay - Do not print duplicate verbose lines about building fiptool 457*c4e8edabSChris Kay - CertCreate 458*c4e8edabSChris Kay - Updated tool for platform defined certs, keys & extensions 459*c4e8edabSChris Kay - Create only requested certificates 460*c4e8edabSChris Kay - Avoid duplicates in extension stack 461*c4e8edabSChris Kay 462*c4e8edabSChris Kay### Resolved Issues 463*c4e8edabSChris Kay 464*c4e8edabSChris Kay- Several fixes for typos and mis-spellings in documentation 465*c4e8edabSChris Kay 466*c4e8edabSChris Kay- Build system 467*c4e8edabSChris Kay 468*c4e8edabSChris Kay - Fixed \$\{FIP_NAME} to be rebuilt only when needed in Makefile 469*c4e8edabSChris Kay - Do not mark file targets as .PHONY target in Makefile 470*c4e8edabSChris Kay 471*c4e8edabSChris Kay- Drivers 472*c4e8edabSChris Kay 473*c4e8edabSChris Kay - Authorization 474*c4e8edabSChris Kay - Avoid NV counter upgrade without certificate validation 475*c4e8edabSChris Kay - Arm GICv3 476*c4e8edabSChris Kay - Fixed logical issue for num_eints 477*c4e8edabSChris Kay - Limit SPI ID to avoid misjudgement in GICD_OFFSET() 478*c4e8edabSChris Kay - Fixed potential GICD context override with ESPI enabled 479*c4e8edabSChris Kay - Marvell A3700 480*c4e8edabSChris Kay - Fixed configuring polarity invert bits 481*c4e8edabSChris Kay - Arm TZC-400 482*c4e8edabSChris Kay - Correct FAIL_CONTROL Privileged bit 483*c4e8edabSChris Kay - Fixed logical error in FILTER_BIT definitions 484*c4e8edabSChris Kay - Renesas rcar 485*c4e8edabSChris Kay - Fixed several coding style violations reported by checkpatch 486*c4e8edabSChris Kay 487*c4e8edabSChris Kay- Libraries 488*c4e8edabSChris Kay 489*c4e8edabSChris Kay - Arch helpers 490*c4e8edabSChris Kay - Fixed assertions in processing dynamic relocations for AArch64 builds 491*c4e8edabSChris Kay - C standard library 492*c4e8edabSChris Kay - Fixed MISRA issues in memset() ABI 493*c4e8edabSChris Kay - RAS 494*c4e8edabSChris Kay - Fixed bug of binary search in RAS interrupt handler 495*c4e8edabSChris Kay 496*c4e8edabSChris Kay- Platforms 497*c4e8edabSChris Kay 498*c4e8edabSChris Kay - Arm 499*c4e8edabSChris Kay - Fixed missing copyrights in arm-gic.h file 500*c4e8edabSChris Kay - Fixed the order of header files in several dts files 501*c4e8edabSChris Kay - Fixed error message printing in board makefile 502*c4e8edabSChris Kay - Fixed bug of overriding the last node in image load helper API 503*c4e8edabSChris Kay - Fixed stdout-path in fdts files of TC0 and N1SDP platforms 504*c4e8edabSChris Kay - Turn ON/OFF redistributor in sync with GIC CPU interface ON/OFF for css 505*c4e8edabSChris Kay platforms 506*c4e8edabSChris Kay - Arm FVP 507*c4e8edabSChris Kay - Fixed Generic Timer interrupt types in platform dts files 508*c4e8edabSChris Kay - Arm Juno 509*c4e8edabSChris Kay - Fixed parallel build issue for romlib config 510*c4e8edabSChris Kay - Arm SGI 511*c4e8edabSChris Kay - Fixed bug in SDEI receive event of RAS handler 512*c4e8edabSChris Kay - Intel Agilex 513*c4e8edabSChris Kay - Fixed PLAT_MAX_PWR_LVL value 514*c4e8edabSChris Kay - Marvell 515*c4e8edabSChris Kay - Fixed SPD handling in dram port 516*c4e8edabSChris Kay - Marvell ARMADA 517*c4e8edabSChris Kay - Fixed TRNG return SMC handling 518*c4e8edabSChris Kay - Fixed the logic used for LD selector mask 519*c4e8edabSChris Kay - Fixed MSS firmware loader for A8K family 520*c4e8edabSChris Kay - ST 521*c4e8edabSChris Kay - Fixed few violations reported by coverity static checks 522*c4e8edabSChris Kay - STM32MP1 523*c4e8edabSChris Kay - Fixed SELFREF_TO_X32 mask in ddr driver 524*c4e8edabSChris Kay - Do not keep mmc_device_info in stack 525*c4e8edabSChris Kay - Correct plat_crash_console_flush() 526*c4e8edabSChris Kay - QEMU SBSA 527*c4e8edabSChris Kay - Fixed memory type of secure NOR flash 528*c4e8edabSChris Kay - QTI 529*c4e8edabSChris Kay - Fixed NUM_APID and REG_APID_MAP() argument in SPMI driver 530*c4e8edabSChris Kay - Intel 531*c4e8edabSChris Kay - Do not keep mmc_device_info in stack 532*c4e8edabSChris Kay - Hisilicon 533*c4e8edabSChris Kay - Do not keep mmc_device_info in stack 534*c4e8edabSChris Kay 535*c4e8edabSChris Kay- Services 536*c4e8edabSChris Kay 537*c4e8edabSChris Kay - EL3 runtime 538*c4e8edabSChris Kay - Fixed the EL2 context save/restore routine by removing EL2 generic timer 539*c4e8edabSChris Kay system registers 540*c4e8edabSChris Kay - Added fix for exception handler in BL31 by synchronizing pending EA using 541*c4e8edabSChris Kay DSB barrier 542*c4e8edabSChris Kay - SPMD 543*c4e8edabSChris Kay - Fixed error codes to use int32_t type 544*c4e8edabSChris Kay - TSPD 545*c4e8edabSChris Kay - Added bug fix in tspd interrupt handling when TSP_NS_INTR_ASYNC_PREEMPT is 546*c4e8edabSChris Kay enabled 547*c4e8edabSChris Kay - TRNG 548*c4e8edabSChris Kay - Fixed compilation errors with -O0 compile option 549*c4e8edabSChris Kay - DebugFS 550*c4e8edabSChris Kay - Checked channel index before calling clone function 551*c4e8edabSChris Kay - PSCI 552*c4e8edabSChris Kay - Fixed limit of 256 CPUs caused by cast to unsigned char 553*c4e8edabSChris Kay - TSP 554*c4e8edabSChris Kay - Fixed compilation erros when built with GCC 11.0.0 toolchain 555*c4e8edabSChris Kay 556*c4e8edabSChris Kay- Tools 557*c4e8edabSChris Kay 558*c4e8edabSChris Kay - FIPtool 559*c4e8edabSChris Kay - Do not call `make clean` for `all` target 560*c4e8edabSChris Kay - CertCreate 561*c4e8edabSChris Kay - Fixed bug to avoid cleaning when building the binary 562*c4e8edabSChris Kay - Used preallocated parts of the HASH struct to avoid leaking HASH struct 563*c4e8edabSChris Kay fields 564*c4e8edabSChris Kay - Free arguments copied with strdup 565*c4e8edabSChris Kay - Free keys after use 566*c4e8edabSChris Kay - Free X509_EXTENSION structures on stack to avoid leaking them 567*c4e8edabSChris Kay - Optimized the code to avoid unnecessary attempts to create non-requested 568*c4e8edabSChris Kay certificates 569*c4e8edabSChris Kay 570*c4e8edabSChris Kay## 2.4.0 (2020-11-17) 571*c4e8edabSChris Kay 572*c4e8edabSChris Kay### New Features 573*c4e8edabSChris Kay 574*c4e8edabSChris Kay- Architecture support 575*c4e8edabSChris Kay - Armv8.6-A 576*c4e8edabSChris Kay - Added support for Armv8.6 Enhanced Counter Virtualization (ECV) 577*c4e8edabSChris Kay - Added support for Armv8.6 Fine Grained Traps (FGT) 578*c4e8edabSChris Kay - Added support for Armv8.6 WFE trap delays 579*c4e8edabSChris Kay- Bootloader images 580*c4e8edabSChris Kay - Added support for Measured Boot 581*c4e8edabSChris Kay- Build System 582*c4e8edabSChris Kay - Added build option `COT_DESC_IN_DTB` to create Chain of Trust at runtime 583*c4e8edabSChris Kay - Added build option `OPENSSL_DIR` to direct tools to OpenSSL libraries 584*c4e8edabSChris Kay - Added build option `RAS_TRAP_LOWER_EL_ERR_ACCESS` to enable trapping RAS 585*c4e8edabSChris Kay register accesses from EL1/EL2 to EL3 586*c4e8edabSChris Kay - Extended build option `BRANCH_PROTECTION` to support branch target 587*c4e8edabSChris Kay identification 588*c4e8edabSChris Kay- Common components 589*c4e8edabSChris Kay - Added support for exporting CPU nodes to the device tree 590*c4e8edabSChris Kay - Added support for single and dual-root Chains of Trust in secure partitions 591*c4e8edabSChris Kay- Drivers 592*c4e8edabSChris Kay - Added Broadcom RNG driver 593*c4e8edabSChris Kay - Added Marvell `mg_conf_cm3` driver 594*c4e8edabSChris Kay - Added System Control and Management Interface (SCMI) driver 595*c4e8edabSChris Kay - Added STMicroelectronics ETZPC driver 596*c4e8edabSChris Kay - Arm GICv3 597*c4e8edabSChris Kay - Added support for detecting topology at runtime 598*c4e8edabSChris Kay - Dual Root 599*c4e8edabSChris Kay - Added support for platform certificates 600*c4e8edabSChris Kay - Marvell Cache LLC 601*c4e8edabSChris Kay - Added support for mapping the entire LLC into SRAM 602*c4e8edabSChris Kay - Marvell CCU 603*c4e8edabSChris Kay - Added workaround for erratum 3033912 604*c4e8edabSChris Kay - Marvell CP110 COMPHY 605*c4e8edabSChris Kay - Added support for SATA COMPHY polarity inversion 606*c4e8edabSChris Kay - Added support for USB COMPHY polarity inversion 607*c4e8edabSChris Kay - Added workaround for erratum IPCE_COMPHY-1353 608*c4e8edabSChris Kay - STM32MP1 Clocks 609*c4e8edabSChris Kay - Added `RTC` as a gateable clock 610*c4e8edabSChris Kay - Added support for shifted clock selector bit masks 611*c4e8edabSChris Kay - Added support for using additional clocks as parents 612*c4e8edabSChris Kay- Libraries 613*c4e8edabSChris Kay - C standard library 614*c4e8edabSChris Kay - Added support for hexadecimal and pointer format specifiers in `snprint()` 615*c4e8edabSChris Kay - Added assembly alternatives for various library functions 616*c4e8edabSChris Kay - CPU support 617*c4e8edabSChris Kay - Arm Cortex-A53 618*c4e8edabSChris Kay - Added workaround for erratum 1530924 619*c4e8edabSChris Kay - Arm Cortex-A55 620*c4e8edabSChris Kay - Added workaround for erratum 1530923 621*c4e8edabSChris Kay - Arm Cortex-A57 622*c4e8edabSChris Kay - Added workaround for erratum 1319537 623*c4e8edabSChris Kay - Arm Cortex-A76 624*c4e8edabSChris Kay - Added workaround for erratum 1165522 625*c4e8edabSChris Kay - Added workaround for erratum 1791580 626*c4e8edabSChris Kay - Added workaround for erratum 1868343 627*c4e8edabSChris Kay - Arm Cortex-A72 628*c4e8edabSChris Kay - Added workaround for erratum 1319367 629*c4e8edabSChris Kay - Arm Cortex-A77 630*c4e8edabSChris Kay - Added workaround for erratum 1508412 631*c4e8edabSChris Kay - Added workaround for erratum 1800714 632*c4e8edabSChris Kay - Added workaround for erratum 1925769 633*c4e8edabSChris Kay - Arm Neoverse-N1 634*c4e8edabSChris Kay - Added workaround for erratum 1868343 635*c4e8edabSChris Kay - EL3 Runtime 636*c4e8edabSChris Kay - Added support for saving/restoring registers related to nested 637*c4e8edabSChris Kay virtualization in EL2 context switches if the architecture supports it 638*c4e8edabSChris Kay - FCONF 639*c4e8edabSChris Kay - Added support for Measured Boot 640*c4e8edabSChris Kay - Added support for populating Chain of Trust properties 641*c4e8edabSChris Kay - Added support for loading the `fw_config` image 642*c4e8edabSChris Kay - Measured Boot 643*c4e8edabSChris Kay - Added support for event logging 644*c4e8edabSChris Kay- Platforms 645*c4e8edabSChris Kay - Added support for Arm Morello 646*c4e8edabSChris Kay - Added support for Arm TC0 647*c4e8edabSChris Kay - Added support for iEi PUZZLE-M801 648*c4e8edabSChris Kay - Added support for Marvell OCTEON TX2 T9130 649*c4e8edabSChris Kay - Added support for MediaTek MT8192 650*c4e8edabSChris Kay - Added support for NXP i.MX 8M Nano 651*c4e8edabSChris Kay - Added support for NXP i.MX 8M Plus 652*c4e8edabSChris Kay - Added support for QTI CHIP SC7180 653*c4e8edabSChris Kay - Added support for STM32MP151F 654*c4e8edabSChris Kay - Added support for STM32MP153F 655*c4e8edabSChris Kay - Added support for STM32MP157F 656*c4e8edabSChris Kay - Added support for STM32MP151D 657*c4e8edabSChris Kay - Added support for STM32MP153D 658*c4e8edabSChris Kay - Added support for STM32MP157D 659*c4e8edabSChris Kay - Arm 660*c4e8edabSChris Kay - Added support for platform-owned SPs 661*c4e8edabSChris Kay - Added support for resetting to BL31 662*c4e8edabSChris Kay - Arm FPGA 663*c4e8edabSChris Kay - Added support for Klein 664*c4e8edabSChris Kay - Added support for Matterhorn 665*c4e8edabSChris Kay - Added support for additional CPU clusters 666*c4e8edabSChris Kay - Arm FVP 667*c4e8edabSChris Kay - Added support for performing SDEI platform setup at runtime 668*c4e8edabSChris Kay - Added support for SMCCC's `SMCCC_ARCH_SOC_ID` command 669*c4e8edabSChris Kay - Added an `id` field under the NV-counter node in the device tree to 670*c4e8edabSChris Kay differentiate between trusted and non-trusted NV-counters 671*c4e8edabSChris Kay - Added support for extracting the clock frequency from the timer node in 672*c4e8edabSChris Kay the device tree 673*c4e8edabSChris Kay - Arm Juno 674*c4e8edabSChris Kay - Added support for SMCCC's `SMCCC_ARCH_SOC_ID` command 675*c4e8edabSChris Kay - Arm N1SDP 676*c4e8edabSChris Kay - Added support for cross-chip PCI-e 677*c4e8edabSChris Kay - Marvell 678*c4e8edabSChris Kay - Added support for AVS reduction 679*c4e8edabSChris Kay - Marvell ARMADA 680*c4e8edabSChris Kay - Added support for twin-die combined memory device 681*c4e8edabSChris Kay - Marvell ARMADA A8K 682*c4e8edabSChris Kay - Added support for DDR with 32-bit bus width (both ECC and non-ECC) 683*c4e8edabSChris Kay - Marvell AP806 684*c4e8edabSChris Kay - Added workaround for erratum FE-4265711 685*c4e8edabSChris Kay - Marvell AP807 686*c4e8edabSChris Kay - Added workaround for erratum 3033912 687*c4e8edabSChris Kay - Nvidia Tegra 688*c4e8edabSChris Kay - Added debug printouts indicating SC7 entry sequence completion 689*c4e8edabSChris Kay - Added support for SDEI 690*c4e8edabSChris Kay - Added support for stack protection 691*c4e8edabSChris Kay - Added support for GICv3 692*c4e8edabSChris Kay - Added support for SMCCC's `SMCCC_ARCH_SOC_ID` command 693*c4e8edabSChris Kay - Nvidia Tegra194 694*c4e8edabSChris Kay - Added support for RAS exception handling 695*c4e8edabSChris Kay - Added support for SPM 696*c4e8edabSChris Kay - NXP i.MX 697*c4e8edabSChris Kay - Added support for SDEI 698*c4e8edabSChris Kay - QEMU SBSA 699*c4e8edabSChris Kay - Added support for the Secure Partition Manager 700*c4e8edabSChris Kay - QTI 701*c4e8edabSChris Kay - Added RNG driver 702*c4e8edabSChris Kay - Added SPMI PMIC arbitrator driver 703*c4e8edabSChris Kay - Added support for SMCCC's `SMCCC_ARCH_SOC_ID` command 704*c4e8edabSChris Kay - STM32MP1 705*c4e8edabSChris Kay - Added support for exposing peripheral interfaces to the non-secure world 706*c4e8edabSChris Kay at runtime 707*c4e8edabSChris Kay - Added support for SCMI clock and reset services 708*c4e8edabSChris Kay - Added support for STM32MP15x CPU revision Z 709*c4e8edabSChris Kay - Added support for SMCCC services in `SP_MIN` 710*c4e8edabSChris Kay- Services 711*c4e8edabSChris Kay - Secure Payload Dispatcher 712*c4e8edabSChris Kay - Added a provision to allow clients to retrieve the service UUID 713*c4e8edabSChris Kay - SPMC 714*c4e8edabSChris Kay - Added secondary core endpoint information to the SPMC context structure 715*c4e8edabSChris Kay - SPMD 716*c4e8edabSChris Kay - Added support for booting OP-TEE as a guest S-EL1 Secure Partition on top 717*c4e8edabSChris Kay of Hafnium in S-EL2 718*c4e8edabSChris Kay - Added a provision for handling SPMC messages to register secondary core 719*c4e8edabSChris Kay entry points 720*c4e8edabSChris Kay - Added support for power management operations 721*c4e8edabSChris Kay- Tools 722*c4e8edabSChris Kay - CertCreate 723*c4e8edabSChris Kay - Added support for secure partitions 724*c4e8edabSChris Kay - CertTool 725*c4e8edabSChris Kay - Added support for the `fw_config` image 726*c4e8edabSChris Kay - FIPTool 727*c4e8edabSChris Kay - Added support for the `fw_config` image 728*c4e8edabSChris Kay 729*c4e8edabSChris Kay### Changed 730*c4e8edabSChris Kay 731*c4e8edabSChris Kay- Architecture support 732*c4e8edabSChris Kay- Bootloader images 733*c4e8edabSChris Kay- Build System 734*c4e8edabSChris Kay - The top-level Makefile now supports building FipTool on Windows 735*c4e8edabSChris Kay - The default value of `KEY_SIZE` has been changed to to 2048 when RSA is in 736*c4e8edabSChris Kay use 737*c4e8edabSChris Kay - The previously-deprecated macro `__ASSEMBLY__` has now been removed 738*c4e8edabSChris Kay- Common components 739*c4e8edabSChris Kay - Certain functions that flush the console will no longer return error 740*c4e8edabSChris Kay information 741*c4e8edabSChris Kay- Drivers 742*c4e8edabSChris Kay - Arm GIC 743*c4e8edabSChris Kay - Usage of `drivers/arm/gic/common/gic_common.c` has now been deprecated in 744*c4e8edabSChris Kay favour of `drivers/arm/gic/vX/gicvX.mk` 745*c4e8edabSChris Kay - Added support for detecting the presence of a GIC600-AE 746*c4e8edabSChris Kay - Added support for detecting the presence of a GIC-Clayton 747*c4e8edabSChris Kay - Marvell MCI 748*c4e8edabSChris Kay - Now performs link tuning for all MCI interfaces to improve performance 749*c4e8edabSChris Kay - Marvell MoChi 750*c4e8edabSChris Kay - PIDI masters are no longer forced into a non-secure access level when 751*c4e8edabSChris Kay `LLC_SRAM` is enabled 752*c4e8edabSChris Kay - The SD/MMC controllers are now accessible from guest virtual machines 753*c4e8edabSChris Kay - Mbed TLS 754*c4e8edabSChris Kay - Migrated to Mbed TLS v2.24.0 755*c4e8edabSChris Kay - STM32 FMC2 NAND 756*c4e8edabSChris Kay - Adjusted FMC node bindings to include an EBI controller node 757*c4e8edabSChris Kay - STM32 Reset 758*c4e8edabSChris Kay - Added an optional timeout argument to assertion functions 759*c4e8edabSChris Kay - STM32MP1 Clocks 760*c4e8edabSChris Kay - Enabled several additional system clocks during initialization 761*c4e8edabSChris Kay- Libraries 762*c4e8edabSChris Kay - C Standard Library 763*c4e8edabSChris Kay - Improved `memset` performance by avoiding single-byte writes 764*c4e8edabSChris Kay - Added optimized assembly variants of `memset` 765*c4e8edabSChris Kay - CPU support 766*c4e8edabSChris Kay - Renamed Cortex-Hercules to Cortex-A78 767*c4e8edabSChris Kay - Renamed Cortex-Hercules AE to Cortex-A78 AE 768*c4e8edabSChris Kay - Renamed Neoverse Zeus to Neoverse V1 769*c4e8edabSChris Kay - Coreboot 770*c4e8edabSChris Kay - Updated ‘coreboot_get_memory_type’ API to take an extra argument as a 771*c4e8edabSChris Kay ’memory size’ that used to return a valid memory type. 772*c4e8edabSChris Kay - libfdt 773*c4e8edabSChris Kay - Updated to latest upstream version 774*c4e8edabSChris Kay- Platforms 775*c4e8edabSChris Kay - Allwinner 776*c4e8edabSChris Kay - Disabled non-secure access to PRCM power control registers 777*c4e8edabSChris Kay - Arm 778*c4e8edabSChris Kay - `BL32_BASE` is now platform-dependent when `SPD_spmd` is enabled 779*c4e8edabSChris Kay - Added support for loading the Chain of Trust from the device tree 780*c4e8edabSChris Kay - The firmware update check is now executed only once 781*c4e8edabSChris Kay - NV-counter base addresses are now loaded from the device tree when 782*c4e8edabSChris Kay `COT_DESC_IN_DTB` is enabled 783*c4e8edabSChris Kay - Now loads and populates `fw_config` and `tb_fw_config` 784*c4e8edabSChris Kay - FCONF population now occurs after caches have been enabled in order to 785*c4e8edabSChris Kay reduce boot times 786*c4e8edabSChris Kay - Arm Corstone-700 787*c4e8edabSChris Kay - Platform support has been split into both an FVP and an FPGA variant 788*c4e8edabSChris Kay - Arm FPGA 789*c4e8edabSChris Kay - DTB and BL33 load addresses have been given sensible default values 790*c4e8edabSChris Kay - Now reads generic timer counter frequency, GICD and GICR base addresses, 791*c4e8edabSChris Kay and UART address from DT 792*c4e8edabSChris Kay - Now treats the primary PL011 UART as an SBSA Generic UART 793*c4e8edabSChris Kay - Arm FVP 794*c4e8edabSChris Kay - Secure interrupt descriptions, UART parameters, clock frequencies and 795*c4e8edabSChris Kay GICv3 parameters are now queried through FCONF 796*c4e8edabSChris Kay - UART parameters are now queried through the device tree 797*c4e8edabSChris Kay - Added an owner field to Cactus secure partitions 798*c4e8edabSChris Kay - Increased the maximum size of BL2 when the Chain of Trust is loaded from 799*c4e8edabSChris Kay the device tree 800*c4e8edabSChris Kay - Reduces the maximum size of BL31 801*c4e8edabSChris Kay - The `FVP_USE_SP804_TIMER` and `FVP_VE_USE_SP804_TIMER` build options have 802*c4e8edabSChris Kay been removed in favour of a common `USE_SP804_TIMER` option 803*c4e8edabSChris Kay - Added a third Cactus partition to manifests 804*c4e8edabSChris Kay - Device tree nodes now store UUIDs in big-endian 805*c4e8edabSChris Kay - Arm Juno 806*c4e8edabSChris Kay - Increased the maximum size of BL2 when optimizations have not been applied 807*c4e8edabSChris Kay - Reduced the maximum size of BL31 and BL32 808*c4e8edabSChris Kay - Marvell AP807 809*c4e8edabSChris Kay - Enabled snoop filters 810*c4e8edabSChris Kay - Marvell ARMADA A3K 811*c4e8edabSChris Kay - UART recovery images are now suffixed with `.bin` 812*c4e8edabSChris Kay - Marvell ARMADA A8K 813*c4e8edabSChris Kay - Option `BL31_CACHE_DISABLE` is now disabled (`0`) by default 814*c4e8edabSChris Kay - Nvidia Tegra 815*c4e8edabSChris Kay - Added VPR resize supported check when processing video memory resize 816*c4e8edabSChris Kay requests 817*c4e8edabSChris Kay - Added SMMU verification to prevent potential issues caused by undetected 818*c4e8edabSChris Kay corruption of the SMMU configuration during boot 819*c4e8edabSChris Kay - The GIC CPU interface is now properly disabled after CPU off 820*c4e8edabSChris Kay - The GICv2 sources list and the `BL31_SIZE` definition have been made 821*c4e8edabSChris Kay platform-specific 822*c4e8edabSChris Kay - The SPE driver will no longer flush the console when writing individual 823*c4e8edabSChris Kay characters 824*c4e8edabSChris Kay - Nvidia Tegra194 825*c4e8edabSChris Kay - TZDRAM setup has been moved to platform-specific early boot handlers 826*c4e8edabSChris Kay - Increased verbosity of debug prints for RAS SErrors 827*c4e8edabSChris Kay - Support for powering down CPUs during CPU suspend has been removed 828*c4e8edabSChris Kay - Now verifies firewall settings before using resources 829*c4e8edabSChris Kay - TI K3 830*c4e8edabSChris Kay - The UART number has been made configurable through `K3_USART` 831*c4e8edabSChris Kay - Rockchip RK3368 832*c4e8edabSChris Kay - The maximum number of memory map regions has been increased to 20 833*c4e8edabSChris Kay - Socionext Uniphier 834*c4e8edabSChris Kay - The maximum size of BL33 has been increased to support larger bootloaders 835*c4e8edabSChris Kay - STM32 836*c4e8edabSChris Kay - Removed platform-specific DT functions in favour of using existing generic 837*c4e8edabSChris Kay alternatives 838*c4e8edabSChris Kay - STM32MP1 839*c4e8edabSChris Kay - Increased verbosity of exception reports in debug builds 840*c4e8edabSChris Kay - Device trees have been updated to align with the Linux kernel 841*c4e8edabSChris Kay - Now uses the ETZPC driver to configure secure-aware interfaces for 842*c4e8edabSChris Kay assignment to the non-secure world 843*c4e8edabSChris Kay - Finished good variants have been added to the board identifier 844*c4e8edabSChris Kay enumerations 845*c4e8edabSChris Kay - Non-secure access to clocks and reset domains now depends on their state 846*c4e8edabSChris Kay of registration 847*c4e8edabSChris Kay - NEON is now disabled in `SP_MIN` 848*c4e8edabSChris Kay - The last page of `SYSRAM` is now used as SCMI shared memory 849*c4e8edabSChris Kay - Checks to verify platform compatibility have been added to verify that an 850*c4e8edabSChris Kay image is compatible with the chip ID of the running platform 851*c4e8edabSChris Kay - QEMU SBSA 852*c4e8edabSChris Kay - Removed support for Arm's Cortex-A53 853*c4e8edabSChris Kay- Services 854*c4e8edabSChris Kay - Renamed SPCI to FF-A 855*c4e8edabSChris Kay - SPMD 856*c4e8edabSChris Kay - No longer forwards requests to the non-secure world when retrieving 857*c4e8edabSChris Kay partition information 858*c4e8edabSChris Kay - SPMC manifest size is now retrieved directly from SPMD instead of the 859*c4e8edabSChris Kay device tree 860*c4e8edabSChris Kay - The FF-A version handler now returns SPMD's version when the origin of the 861*c4e8edabSChris Kay call is secure, and SPMC's version when the origin of the call is 862*c4e8edabSChris Kay non-secure 863*c4e8edabSChris Kay - SPMC 864*c4e8edabSChris Kay - Updated the manifest to declare CPU nodes in descending order as per the 865*c4e8edabSChris Kay SPM (Hafnium) multicore requirement 866*c4e8edabSChris Kay - Updated the device tree to mark 2GB as device memory for the first 867*c4e8edabSChris Kay partition excluding trusted DRAM region (which is reserved for SPMC) 868*c4e8edabSChris Kay - Increased the number of EC contexts to the maximum number of PEs as per 869*c4e8edabSChris Kay the FF-A specification 870*c4e8edabSChris Kay- Tools 871*c4e8edabSChris Kay - FIPTool 872*c4e8edabSChris Kay - Now returns `0` on `help` and `help <command>` 873*c4e8edabSChris Kay - Marvell DoImage 874*c4e8edabSChris Kay - Updated Mbed TLS support to v2.8 875*c4e8edabSChris Kay - SPTool 876*c4e8edabSChris Kay - Now appends CertTool arguments 877*c4e8edabSChris Kay 878*c4e8edabSChris Kay### Resolved Issues 879*c4e8edabSChris Kay 880*c4e8edabSChris Kay- Bootloader images 881*c4e8edabSChris Kay - Fixed compilation errors for dual-root Chains of Trust caused by symbol 882*c4e8edabSChris Kay collision 883*c4e8edabSChris Kay - BL31 884*c4e8edabSChris Kay - Fixed compilation errors on platforms with fewer than 4 cores caused by 885*c4e8edabSChris Kay initialization code exceeding the end of the stacks 886*c4e8edabSChris Kay - Fixed compilation errors when building a position-independent image 887*c4e8edabSChris Kay- Build System 888*c4e8edabSChris Kay - Fixed invalid empty version strings 889*c4e8edabSChris Kay - Fixed compilation errors on Windows caused by a non-portable architecture 890*c4e8edabSChris Kay revision comparison 891*c4e8edabSChris Kay- Drivers 892*c4e8edabSChris Kay - Arm GIC 893*c4e8edabSChris Kay - Fixed spurious interrupts caused by a missing barrier 894*c4e8edabSChris Kay - STM32 Flexible Memory Controller 2 (FMC2) NAND driver 895*c4e8edabSChris Kay - Fixed runtime instability caused by incorrect error detection logic 896*c4e8edabSChris Kay - STM32MP1 Clock driver 897*c4e8edabSChris Kay - Fixed incorrectly-formatted log messages 898*c4e8edabSChris Kay - Fixed runtime instability caused by improper clock gating procedures 899*c4e8edabSChris Kay - STMicroelectronics Raw NAND driver 900*c4e8edabSChris Kay - Fixed runtime instability caused by incorrect unit conversion when waiting 901*c4e8edabSChris Kay for NAND readiness 902*c4e8edabSChris Kay- Libraries 903*c4e8edabSChris Kay - AMU 904*c4e8edabSChris Kay - Fixed timeout errors caused by excess error logging 905*c4e8edabSChris Kay - EL3 Runtime 906*c4e8edabSChris Kay - Fixed runtime instability caused by improper register save/restore routine 907*c4e8edabSChris Kay in EL2 908*c4e8edabSChris Kay - FCONF 909*c4e8edabSChris Kay - Fixed failure to initialize GICv3 caused by overly-strict device tree 910*c4e8edabSChris Kay requirements 911*c4e8edabSChris Kay - Measured Boot 912*c4e8edabSChris Kay - Fixed driver errors caused by a missing default value for the `HASH_ALG` 913*c4e8edabSChris Kay build option 914*c4e8edabSChris Kay - SPE 915*c4e8edabSChris Kay - Fixed feature detection check that prevented CPUs supporting SVE from 916*c4e8edabSChris Kay detecting support for SPE in the non-secure world 917*c4e8edabSChris Kay - Translation Tables 918*c4e8edabSChris Kay - Fixed various MISRA-C 2012 static analysis violations 919*c4e8edabSChris Kay- Platforms 920*c4e8edabSChris Kay - Allwinner A64 921*c4e8edabSChris Kay - Fixed USB issues on certain battery-powered device caused by improperly 922*c4e8edabSChris Kay activated USB power rail 923*c4e8edabSChris Kay - Arm 924*c4e8edabSChris Kay - Fixed compilation errors caused by increase in BL2 size 925*c4e8edabSChris Kay - Fixed compilation errors caused by missing Makefile dependencies to 926*c4e8edabSChris Kay generated files when building the FIP 927*c4e8edabSChris Kay - Fixed MISRA-C 2012 static analysis violations caused by unused structures 928*c4e8edabSChris Kay in include directives intended to be feature-gated 929*c4e8edabSChris Kay - Arm FPGA 930*c4e8edabSChris Kay - Fixed initialization issues caused by incorrect MPIDR topology mapping 931*c4e8edabSChris Kay logic 932*c4e8edabSChris Kay - Arm RD-N1-edge 933*c4e8edabSChris Kay - Fixed compilation errors caused by mismatched parentheses in Makefile 934*c4e8edabSChris Kay - Arm SGI 935*c4e8edabSChris Kay - Fixed crashes due to the flash memory used for cold reboot attack 936*c4e8edabSChris Kay protection not being mapped 937*c4e8edabSChris Kay - Intel Agilex 938*c4e8edabSChris Kay - Fixed initialization issues caused by several compounding bugs 939*c4e8edabSChris Kay - Marvell 940*c4e8edabSChris Kay - Fixed compilation warnings caused by multiple Makefile inclusions 941*c4e8edabSChris Kay - Marvell ARMADA A3K 942*c4e8edabSChris Kay - Fixed boot issue in debug builds caused by checks on the BL33 load address 943*c4e8edabSChris Kay that are not appropriate for this platform 944*c4e8edabSChris Kay - Nvidia Tegra 945*c4e8edabSChris Kay - Fixed incorrect delay timer reads 946*c4e8edabSChris Kay - Fixed spurious interrupts in the non-secure world during cold boot caused 947*c4e8edabSChris Kay by the arbitration bit in the memory controller not being cleared 948*c4e8edabSChris Kay - Fixed faulty video memory resize sequence 949*c4e8edabSChris Kay - Nvidia Tegra194 950*c4e8edabSChris Kay - Fixed incorrect alignment of TZDRAM base address 951*c4e8edabSChris Kay - NXP iMX8M 952*c4e8edabSChris Kay - Fixed CPU hot-plug issues caused by race condition 953*c4e8edabSChris Kay - STM32MP1 954*c4e8edabSChris Kay - Fixed compilation errors in highly-parallel builds caused by incorrect 955*c4e8edabSChris Kay Makefile dependencies 956*c4e8edabSChris Kay - STM32MP157C-ED1 957*c4e8edabSChris Kay - Fixed initialization issues caused by missing device tree hash node 958*c4e8edabSChris Kay - Raspberry Pi 3 959*c4e8edabSChris Kay - Fixed compilation errors caused by incorrect dependency ordering in 960*c4e8edabSChris Kay Makefile 961*c4e8edabSChris Kay - Rockchip 962*c4e8edabSChris Kay - Fixed initialization issues caused by non-critical errors when parsing FDT 963*c4e8edabSChris Kay being treated as critical 964*c4e8edabSChris Kay - Rockchip RK3368 965*c4e8edabSChris Kay - Fixed runtime instability caused by incorrect CPUID shift value 966*c4e8edabSChris Kay - QEMU 967*c4e8edabSChris Kay - Fixed compilation errors caused by incorrect dependency ordering in 968*c4e8edabSChris Kay Makefile 969*c4e8edabSChris Kay - QEMU SBSA 970*c4e8edabSChris Kay - Fixed initialization issues caused by FDT exceeding reserved memory size 971*c4e8edabSChris Kay - QTI 972*c4e8edabSChris Kay - Fixed compilation errors caused by inclusion of a non-existent file 973*c4e8edabSChris Kay- Services 974*c4e8edabSChris Kay - FF-A (previously SPCI) 975*c4e8edabSChris Kay - Fixed SPMD aborts caused by incorrect behaviour when the manifest is 976*c4e8edabSChris Kay page-aligned 977*c4e8edabSChris Kay- Tools 978*c4e8edabSChris Kay - Fixed compilation issues when compiling tools from within their respective 979*c4e8edabSChris Kay directories 980*c4e8edabSChris Kay - FIPTool 981*c4e8edabSChris Kay - Fixed command line parsing issues on Windows when using arguments whose 982*c4e8edabSChris Kay names also happen to be a subset of another's 983*c4e8edabSChris Kay - Marvell DoImage 984*c4e8edabSChris Kay - Fixed PKCS signature verification errors at boot on some platforms caused 985*c4e8edabSChris Kay by generation of misaligned images 986*c4e8edabSChris Kay 987*c4e8edabSChris Kay### Known Issues 988*c4e8edabSChris Kay 989*c4e8edabSChris Kay- Platforms 990*c4e8edabSChris Kay - NVIDIA Tegra 991*c4e8edabSChris Kay - Signed comparison compiler warnings occurring in libfdt are currently 992*c4e8edabSChris Kay being worked around by disabling the warning for the platform until the 993*c4e8edabSChris Kay underlying issue is resolved in libfdt 994*c4e8edabSChris Kay 995*c4e8edabSChris Kay## 2.3 (2020-04-20) 996*c4e8edabSChris Kay 997*c4e8edabSChris Kay### New Features 998*c4e8edabSChris Kay 999*c4e8edabSChris Kay- Arm Architecture 1000*c4e8edabSChris Kay - Add support for Armv8.4-SecEL2 extension through the SPCI defined SPMD/SPMC 1001*c4e8edabSChris Kay components. 1002*c4e8edabSChris Kay - Build option to support EL2 context save and restore in the secure world 1003*c4e8edabSChris Kay (CTX_INCLUDE_EL2_REGS). 1004*c4e8edabSChris Kay - Add support for SMCCC v1.2 (introducing the new SMCCC_ARCH_SOC_ID SMC). Note 1005*c4e8edabSChris Kay that the support is compliant, but the SVE registers save/restore will be 1006*c4e8edabSChris Kay done as part of future S-EL2/SPM development. 1007*c4e8edabSChris Kay- BL-specific 1008*c4e8edabSChris Kay - Enhanced BL2 bootloader flow to load secure partitions based on firmware 1009*c4e8edabSChris Kay configuration data (fconf). 1010*c4e8edabSChris Kay - Changes necessary to support SEPARATE_NOBITS_REGION feature 1011*c4e8edabSChris Kay - TSP and BL2_AT_EL3: Add Position Independent Execution `PIE` support 1012*c4e8edabSChris Kay- Build System 1013*c4e8edabSChris Kay - Add support for documentation build as a target in Makefile 1014*c4e8edabSChris Kay - Add `COT` build option to select the Chain of Trust to use when the Trusted 1015*c4e8edabSChris Kay Boot feature is enabled (default: `tbbr`). 1016*c4e8edabSChris Kay - Added creation and injection of secure partition packages into the FIP. 1017*c4e8edabSChris Kay - Build option to support SPMC component loading and run at S-EL1 or S-EL2 1018*c4e8edabSChris Kay (SPMD_SPM_AT_SEL2). 1019*c4e8edabSChris Kay - Enable MTE support 1020*c4e8edabSChris Kay - Enable Link Time Optimization in GCC 1021*c4e8edabSChris Kay - Enable -Wredundant-decls warning check 1022*c4e8edabSChris Kay - Makefile: Add support to optionally encrypt BL31 and BL32 1023*c4e8edabSChris Kay - Add support to pass the nt_fw_config DTB to OP-TEE. 1024*c4e8edabSChris Kay - Introduce per-BL `CPPFLAGS`, `ASFLAGS`, and `LDFLAGS` 1025*c4e8edabSChris Kay - build_macros: Add CREATE_SEQ function to generate sequence of numbers 1026*c4e8edabSChris Kay- CPU Support 1027*c4e8edabSChris Kay - cortex-a57: Enable higher performance non-cacheable load forwarding 1028*c4e8edabSChris Kay - Hercules: Workaround for Errata 1688305 1029*c4e8edabSChris Kay - Klein: Support added for Klein CPU 1030*c4e8edabSChris Kay - Matterhorn: Support added for Matterhorn CPU 1031*c4e8edabSChris Kay- Drivers 1032*c4e8edabSChris Kay - auth: Add `calc_hash` function for hash calculation. Used for authentication 1033*c4e8edabSChris Kay of images when measured boot is enabled. 1034*c4e8edabSChris Kay - cryptocell: Add authenticated decryption framework, and support for 1035*c4e8edabSChris Kay CryptoCell-713 and CryptoCell-712 RSA 3K 1036*c4e8edabSChris Kay - gic600: Add support for multichip configuration and Clayton 1037*c4e8edabSChris Kay - gicv3: Introduce makefile, Add extended PPI and SPI range, Add support for 1038*c4e8edabSChris Kay probing multiple GIC Redistributor frames 1039*c4e8edabSChris Kay - gicv4: Add GICv4 extension for GIC driver 1040*c4e8edabSChris Kay - io: Add an IO abstraction layer to load encrypted firmwares 1041*c4e8edabSChris Kay - mhu: Derive doorbell base address 1042*c4e8edabSChris Kay - mtd: Add SPI-NOR, SPI-NAND, SPI-MEM, and raw NAND framework 1043*c4e8edabSChris Kay - scmi: Allow use of multiple SCMI channels 1044*c4e8edabSChris Kay - scu: Add a driver for snoop control unit 1045*c4e8edabSChris Kay- Libraries 1046*c4e8edabSChris Kay - coreboot: Add memory range parsing and use generic base address 1047*c4e8edabSChris Kay - compiler_rt: Import popcountdi2.c and popcountsi2.c files, aeabi_ldivmode.S 1048*c4e8edabSChris Kay file and dependencies 1049*c4e8edabSChris Kay - debugFS: Add DebugFS functionality 1050*c4e8edabSChris Kay - el3_runtime: Add support for enabling S-EL2 1051*c4e8edabSChris Kay - fconf: Add Firmware Configuration Framework (fconf) (experimental). 1052*c4e8edabSChris Kay - libc: Add memrchr function 1053*c4e8edabSChris Kay - locks: bakery: Use is_dcache_enabled() helper and add a DMB to the 1054*c4e8edabSChris Kay 'read_cache_op' macro 1055*c4e8edabSChris Kay - psci: Add support to enable different personality of the same soc. 1056*c4e8edabSChris Kay - xlat_tables_v2: Add support to pass shareability attribute for normal memory 1057*c4e8edabSChris Kay region, use get_current_el_maybe_constant() in is_dcache_enabled(), 1058*c4e8edabSChris Kay read-only xlat tables for BL31 memory, and add enable_mmu() 1059*c4e8edabSChris Kay- New Platforms Support 1060*c4e8edabSChris Kay - arm/arm_fpga: New platform support added for FPGA 1061*c4e8edabSChris Kay - arm/rddaniel: New platform support added for rd-daniel platform 1062*c4e8edabSChris Kay - brcm/stingray: New platform support added for Broadcom stingray platform 1063*c4e8edabSChris Kay - nvidia/tegra194: New platform support for Nvidia Tegra194 platform 1064*c4e8edabSChris Kay- Platforms 1065*c4e8edabSChris Kay - allwinner: Implement PSCI system suspend using SCPI, add a msgbox driver for 1066*c4e8edabSChris Kay use with SCPI, and reserve and map space for the SCP firmware 1067*c4e8edabSChris Kay - allwinner: axp: Add AXP805 support 1068*c4e8edabSChris Kay - allwinner: power: Add DLDO4 power rail 1069*c4e8edabSChris Kay - amlogic: axg: Add a build flag when using ATOS as BL32 and support for the 1070*c4e8edabSChris Kay A113D (AXG) platform 1071*c4e8edabSChris Kay - arm/a5ds: Add ethernet node and L2 cache node in devicetree 1072*c4e8edabSChris Kay - arm/common: Add support for the new `dualroot` chain of trust 1073*c4e8edabSChris Kay - arm/common: Add support for SEPARATE_NOBITS_REGION 1074*c4e8edabSChris Kay - arm/common: Re-enable PIE when RESET_TO_BL31=1 1075*c4e8edabSChris Kay - arm/common: Allow boards to specify second DRAM Base address and to define 1076*c4e8edabSChris Kay PLAT_ARM_TZC_FILTERS 1077*c4e8edabSChris Kay - arm/corstone700: Add support for mhuv2 and stack protector 1078*c4e8edabSChris Kay - arm/fvp: Add support for fconf in BL31 and SP_MIN. Populate power domain 1079*c4e8edabSChris Kay descriptor dynamically by leveraging fconf APIs. 1080*c4e8edabSChris Kay - arm/fvp: Add Cactus/Ivy Secure Partition information and use two instances 1081*c4e8edabSChris Kay of Cactus at S-EL1 1082*c4e8edabSChris Kay - arm/fvp: Add support to run BL32 in TDRAM and BL31 in secure DRAM 1083*c4e8edabSChris Kay - arm/fvp: Add support for GICv4 extension and BL2 hash calculation in BL1 1084*c4e8edabSChris Kay - arm/n1sdp: Setup multichip gic routing table, update platform macros for 1085*c4e8edabSChris Kay dual-chip setup, introduce platform information SDS region, add support to 1086*c4e8edabSChris Kay update presence of External LLC, and enable the NEOVERSE_N1_EXTERNAL_LLC 1087*c4e8edabSChris Kay flag 1088*c4e8edabSChris Kay - arm/rdn1edge: Add support for dual-chip configuration and use CREATE_SEQ 1089*c4e8edabSChris Kay helper macro to compare chip count 1090*c4e8edabSChris Kay - arm/sgm: Always use SCMI for SGM platforms 1091*c4e8edabSChris Kay - arm/sgm775: Add support for dynamic config using fconf 1092*c4e8edabSChris Kay - arm/sgi: Add multi-chip mode parameter in HW_CONFIG dts, macros for remote 1093*c4e8edabSChris Kay chip device region, chip_id and multi_chip_mode to platform variant info, 1094*c4e8edabSChris Kay and introduce number of chips macro 1095*c4e8edabSChris Kay - brcm: Add BL2 and BL31 support common across Broadcom platforms 1096*c4e8edabSChris Kay - brcm: Add iproc SPI Nor flash support, spi driver, emmc driver, and support 1097*c4e8edabSChris Kay to retrieve plat_toc_flags 1098*c4e8edabSChris Kay - hisilicon: hikey960: Enable system power off callback 1099*c4e8edabSChris Kay - intel: Enable bridge access, SiP SMC secure register access, and uboot 1100*c4e8edabSChris Kay entrypoint support 1101*c4e8edabSChris Kay - intel: Implement platform specific system reset 2 1102*c4e8edabSChris Kay - intel: Introduce mailbox response length handling 1103*c4e8edabSChris Kay - imx: console: Use CONSOLE_T_BASE for UART base address and generic console_t 1104*c4e8edabSChris Kay data structure 1105*c4e8edabSChris Kay - imx8mm: Provide uart base as build option and add the support for opteed spd 1106*c4e8edabSChris Kay on imx8mq/imx8mm 1107*c4e8edabSChris Kay - imx8qx: Provide debug uart num as build 1108*c4e8edabSChris Kay - imx8qm: Apply clk/pinmux configuration for DEBUG_CONSOLE and provide debug 1109*c4e8edabSChris Kay uart num as build param 1110*c4e8edabSChris Kay - marvell: a8k: Implement platform specific power off and add support for 1111*c4e8edabSChris Kay loading MG CM3 images 1112*c4e8edabSChris Kay - mediatek: mt8183: Add Vmodem/Vcore DVS init level 1113*c4e8edabSChris Kay - qemu: Support optional encryption of BL31 and BL32 images and 1114*c4e8edabSChris Kay ARM_LINUX_KERNEL_AS_BL33 to pass FDT address 1115*c4e8edabSChris Kay - qemu: Define ARMV7_SUPPORTS_VFP 1116*c4e8edabSChris Kay - qemu: Implement PSCI_CPU_OFF and qemu_system_off via semihosting 1117*c4e8edabSChris Kay - renesas: rcar_gen3: Add new board revision for M3ULCB 1118*c4e8edabSChris Kay - rockchip: Enable workaround for erratum 855873, claim a macro to enable hdcp 1119*c4e8edabSChris Kay feature for DP, enable power domains of rk3399 before reset, add support for 1120*c4e8edabSChris Kay UART3 as serial output, and initialize reset and poweroff GPIOs with known 1121*c4e8edabSChris Kay invalid value 1122*c4e8edabSChris Kay - rpi: Implement PSCI CPU_OFF, use MMIO accessor, autodetect Mini-UART vs. 1123*c4e8edabSChris Kay PL011 configuration, and allow using PL011 UART for RPi3/RPi4 1124*c4e8edabSChris Kay - rpi3: Include GPIO driver in all BL stages and use same "clock-less" setup 1125*c4e8edabSChris Kay scheme as RPi4 1126*c4e8edabSChris Kay - rpi3/4: Add support for offlining CPUs 1127*c4e8edabSChris Kay - st: stm32mp1: platform.mk: Support generating multiple images in one build, 1128*c4e8edabSChris Kay migrate to implicit rules, derive map file name from target name, generate 1129*c4e8edabSChris Kay linker script with fixed name, and use PHONY for the appropriate targets 1130*c4e8edabSChris Kay - st: stm32mp1: Add support for SPI-NOR, raw NAND, and SPI-NAND boot device, 1131*c4e8edabSChris Kay QSPI, FMC2 driver 1132*c4e8edabSChris Kay - st: stm32mp1: Use stm32mp_get_ddr_ns_size() function, set XN attribute for 1133*c4e8edabSChris Kay some areas in BL2, dynamically map DDR later and non-cacheable during its 1134*c4e8edabSChris Kay test, add a function to get non-secure DDR size, add DT helper for reg by 1135*c4e8edabSChris Kay name, and add compilation flags for boot devices 1136*c4e8edabSChris Kay - socionext: uniphier: Turn on ENABLE_PIE 1137*c4e8edabSChris Kay - ti: k3: Add PIE support 1138*c4e8edabSChris Kay - xilinx: versal: Add set wakeup source, client wakeup, query data, request 1139*c4e8edabSChris Kay wakeup, PM_INIT_FINALIZE, PM_GET_TRUSTZONE_VERSION, PM IOCTL, support for 1140*c4e8edabSChris Kay suspend related, and Get_ChipID APIs 1141*c4e8edabSChris Kay - xilinx: versal: Implement power down/restart related EEMI, SMC handler for 1142*c4e8edabSChris Kay EEMI, PLL related PM, clock related PM, pin control related PM, reset 1143*c4e8edabSChris Kay related PM, device related PM , APIs 1144*c4e8edabSChris Kay - xilinx: versal: Enable ipi mailbox service 1145*c4e8edabSChris Kay - xilinx: versal: Add get_api_version support and support to send PM API to 1146*c4e8edabSChris Kay PMC using IPI 1147*c4e8edabSChris Kay - xilinx: zynqmp: Add checksum support for IPI data, GET_CALLBACK_DATA 1148*c4e8edabSChris Kay function, support to query max divisor, CLK_SET_RATE_PARENT in gem clock 1149*c4e8edabSChris Kay node, support for custom type flags, LPD WDT clock to the pm_clock 1150*c4e8edabSChris Kay structure, idcodes for new RFSoC silicons ZU48DR and ZU49DR, and id for new 1151*c4e8edabSChris Kay RFSoC device ZU39DR 1152*c4e8edabSChris Kay- Security 1153*c4e8edabSChris Kay - Use Speculation Barrier instruction for v8.5+ cores 1154*c4e8edabSChris Kay - Add support for optional firmware encryption feature (experimental). 1155*c4e8edabSChris Kay - Introduce a new `dualroot` chain of trust. 1156*c4e8edabSChris Kay - aarch64: Prevent speculative execution past ERET 1157*c4e8edabSChris Kay - aarch32: Stop speculative execution past exception returns. 1158*c4e8edabSChris Kay- SPCI 1159*c4e8edabSChris Kay - Introduced the Secure Partition Manager Dispatcher (SPMD) component as a new 1160*c4e8edabSChris Kay standard service. 1161*c4e8edabSChris Kay- Tools 1162*c4e8edabSChris Kay - cert_create: Introduce CoT build option and TBBR CoT makefile, and define 1163*c4e8edabSChris Kay the dualroot CoT 1164*c4e8edabSChris Kay - encrypt_fw: Add firmware authenticated encryption tool 1165*c4e8edabSChris Kay - memory: Add show_memory script that prints a representation of the memory 1166*c4e8edabSChris Kay layout for the latest build 1167*c4e8edabSChris Kay 1168*c4e8edabSChris Kay### Changed 1169*c4e8edabSChris Kay 1170*c4e8edabSChris Kay- Arm Architecture 1171*c4e8edabSChris Kay - PIE: Make call to GDT relocation fixup generalized 1172*c4e8edabSChris Kay- BL-Specific 1173*c4e8edabSChris Kay - Increase maximum size of BL2 image 1174*c4e8edabSChris Kay - BL31: Discard .dynsym .dynstr .hash sections to make ENABLE_PIE work 1175*c4e8edabSChris Kay - BL31: Split into two separate memory regions 1176*c4e8edabSChris Kay - Unify BL linker scripts and reduce code duplication. 1177*c4e8edabSChris Kay- Build System 1178*c4e8edabSChris Kay - Changes to drive cert_create for dualroot CoT 1179*c4e8edabSChris Kay - Enable -Wlogical-op always 1180*c4e8edabSChris Kay - Enable -Wshadow always 1181*c4e8edabSChris Kay - Refactor the warning flags 1182*c4e8edabSChris Kay - PIE: Pass PIE options only to BL31 1183*c4e8edabSChris Kay - Reduce space lost to object alignment 1184*c4e8edabSChris Kay - Set lld as the default linker for Clang builds 1185*c4e8edabSChris Kay - Remove -Wunused-const-variable and -Wpadded warning 1186*c4e8edabSChris Kay - Remove -Wmissing-declarations warning from WARNING1 level 1187*c4e8edabSChris Kay- Drivers 1188*c4e8edabSChris Kay - authentication: Necessary fix in drivers to upgrade to mbedtls-2.18.0 1189*c4e8edabSChris Kay - console: Integrate UART base address in generic console_t 1190*c4e8edabSChris Kay - gicv3: Change API for GICR_IPRIORITYR accessors and separate GICD and GICR 1191*c4e8edabSChris Kay accessor functions 1192*c4e8edabSChris Kay - io: Change seek offset to signed long long and panic in case of io setup 1193*c4e8edabSChris Kay failure 1194*c4e8edabSChris Kay - smmu: SMMUv3: Changed retry loop to delay timer 1195*c4e8edabSChris Kay - tbbr: Reduce size of hash and ECDSA key buffers when possible 1196*c4e8edabSChris Kay- Library Code 1197*c4e8edabSChris Kay - libc: Consolidate the size_t, unified, and NULL definitions, and unify 1198*c4e8edabSChris Kay intmax_t and uintmax_t on AArch32/64 1199*c4e8edabSChris Kay - ROMLIB: Optimize memory layout when ROMLIB is used 1200*c4e8edabSChris Kay - xlat_tables_v2: Use ARRAY_SIZE in REGISTER_XLAT_CONTEXT_FULL_SPEC, merge 1201*c4e8edabSChris Kay REGISTER_XLAT_CONTEXT\_{FULL_SPEC,RO_BASE_TABLE}, and simplify end address 1202*c4e8edabSChris Kay checks in mmap_add_region_check() 1203*c4e8edabSChris Kay- Platforms 1204*c4e8edabSChris Kay - allwinner: Adjust SRAM A2 base to include the ARISC vectors, clean up MMU 1205*c4e8edabSChris Kay setup, reenable USE_COHERENT_MEM, remove unused include path, move the 1206*c4e8edabSChris Kay NOBITS region to SRAM A1, convert AXP803 regulator setup code into a driver, 1207*c4e8edabSChris Kay enable clock before resetting I2C/RSB 1208*c4e8edabSChris Kay - allwinner: h6: power: Switch to using the AXP driver 1209*c4e8edabSChris Kay - allwinner: a64: power: Use fdt_for_each_subnode, remove obsolete register 1210*c4e8edabSChris Kay check, remove duplicate DT check, and make sunxi_turn_off_soc static 1211*c4e8edabSChris Kay - allwinner: Build PMIC bus drivers only in BL31, clean up PMIC-related error 1212*c4e8edabSChris Kay handling, and synchronize PMIC enumerations 1213*c4e8edabSChris Kay - arm/a5ds: Change boot address to point to DDR address 1214*c4e8edabSChris Kay - arm/common: Check for out-of-bound accesses in the platform io policies 1215*c4e8edabSChris Kay - arm/corstone700: Updating the kernel arguments to support initramfs, use 1216*c4e8edabSChris Kay fdts DDR memory and XIP rootfs, and set UART clocks to 32MHz 1217*c4e8edabSChris Kay - arm/fvp: Modify multithreaded dts file of DynamIQ FVPs, slightly bump the 1218*c4e8edabSChris Kay stack size for bl1 and bl2, remove re-definition of topology related build 1219*c4e8edabSChris Kay options, stop reclaiming init code with Clang builds, and map only the 1220*c4e8edabSChris Kay needed DRAM region statically in BL31/SP_MIN 1221*c4e8edabSChris Kay - arm/juno: Maximize space allocated to SCP_BL2 1222*c4e8edabSChris Kay - arm/sgi: Bump bl1 RW limit, mark remote chip shared ram as non-cacheable, 1223*c4e8edabSChris Kay move GIC related constants to board files, include AFF3 affinity in core 1224*c4e8edabSChris Kay position calculation, move bl31_platform_setup to board file, and move 1225*c4e8edabSChris Kay topology information to board folder 1226*c4e8edabSChris Kay - common: Refactor load_auth_image_internal(). 1227*c4e8edabSChris Kay - hisilicon: Remove uefi-tools in hikey and hikey960 documentation 1228*c4e8edabSChris Kay - intel: Modify non secure access function, BL31 address mapping, mailbox's 1229*c4e8edabSChris Kay get_config_status, and stratix10 BL31 parameter handling 1230*c4e8edabSChris Kay - intel: Remove un-needed checks for qspi driver r/w and s10 unused source 1231*c4e8edabSChris Kay code 1232*c4e8edabSChris Kay - intel: Change all global sip function to static 1233*c4e8edabSChris Kay - intel: Refactor common platform code 1234*c4e8edabSChris Kay - intel: Create SiP service header file 1235*c4e8edabSChris Kay - marvell: armada: scp_bl2: Allow loading up to 8 images 1236*c4e8edabSChris Kay - marvell: comphy-a3700: Support SGMII COMPHY power off and fix USB3 powering 1237*c4e8edabSChris Kay on when on lane 2 1238*c4e8edabSChris Kay - marvell: Consolidate console register calls 1239*c4e8edabSChris Kay - mediatek: mt8183: Protect 4GB~8GB dram memory, refine GIC driver for low 1240*c4e8edabSChris Kay power scenarios, and switch PLL/CLKSQ/ck_off/axi_26m control to SPM 1241*c4e8edabSChris Kay - qemu: Update flash address map to keep FIP in secure FLASH0 1242*c4e8edabSChris Kay - renesas: rcar_gen3: Update IPL and Secure Monitor Rev.2.0.6, update DDR 1243*c4e8edabSChris Kay setting for H3, M3, M3N, change fixed destination address of BL31 and BL32, 1244*c4e8edabSChris Kay add missing #{address,size}-cells into generated DT, pass DT to OpTee OS, 1245*c4e8edabSChris Kay and move DDR drivers out of staging 1246*c4e8edabSChris Kay - rockchip: Make miniloader ddr_parameter handling optional, cleanup securing 1247*c4e8edabSChris Kay of ddr regions, move secure init to separate file, use base+size for secure 1248*c4e8edabSChris Kay ddr regions, bring TZRAM_SIZE values in lined, and prevent macro expansion 1249*c4e8edabSChris Kay in paths 1250*c4e8edabSChris Kay - rpi: Move plat_helpers.S to common 1251*c4e8edabSChris Kay - rpi3: gpio: Simplify GPIO setup 1252*c4e8edabSChris Kay - rpi4: Skip UART initialisation 1253*c4e8edabSChris Kay - st: stm32m1: Use generic console_t data structure, remove second QSPI flash 1254*c4e8edabSChris Kay instance, update for FMC2 pin muxing, and reduce MAX_XLAT_TABLES to 4 1255*c4e8edabSChris Kay - socionext: uniphier: Make on-chip SRAM and I/O register regions configurable 1256*c4e8edabSChris Kay - socionext: uniphier: Make PSCI related, counter control, UART, pinmon, NAND 1257*c4e8edabSChris Kay controller, and eMMC controller base addresses configurable 1258*c4e8edabSChris Kay - socionext: uniphier: Change block_addressing flag and the return value type 1259*c4e8edabSChris Kay of .is_usb_boot() to bool 1260*c4e8edabSChris Kay - socionext: uniphier: Run BL33 at EL2, call uniphier_scp_is_running() only 1261*c4e8edabSChris Kay when on-chip STM is supported, define PLAT_XLAT_TABLES_DYNAMIC only for BL2, 1262*c4e8edabSChris Kay support read-only xlat tables, use enable_mmu() in common function, shrink 1263*c4e8edabSChris Kay UNIPHIER_ROM_REGION_SIZE, prepare uniphier_soc_info() for next SoC, extend 1264*c4e8edabSChris Kay boot device detection for future SoCs, make all BL images completely 1265*c4e8edabSChris Kay position-independent, make uniphier_mmap_setup() work with PIE, pass SCP 1266*c4e8edabSChris Kay base address as a function parameter, set buffer offset and length for 1267*c4e8edabSChris Kay io_block dynamically, and use more mmap_add_dynamic_region() for loading 1268*c4e8edabSChris Kay images 1269*c4e8edabSChris Kay - spd/trusty: Disable error messages seen during boot, allow gic base to be 1270*c4e8edabSChris Kay specified with GICD_BASE, and allow getting trusty memsize from 1271*c4e8edabSChris Kay BL32_MEM_SIZE instead of TSP_SEC_MEM_SIZE 1272*c4e8edabSChris Kay - ti: k3: common: Enable ARM cluster power down and rename device IDs to be 1273*c4e8edabSChris Kay more consistent 1274*c4e8edabSChris Kay - ti: k3: drivers: ti_sci: Put sequence number in coherent memory and remove 1275*c4e8edabSChris Kay indirect structure of const data 1276*c4e8edabSChris Kay - xilinx: Move ipi mailbox svc to xilinx common 1277*c4e8edabSChris Kay - xilinx: zynqmp: Use GIC framework for warm restart 1278*c4e8edabSChris Kay - xilinx: zynqmp: pm: Move custom clock flags to typeflags, remove 1279*c4e8edabSChris Kay CLK_TOPSW_LSBUS from invalid clock list and rename FPD WDT clock ID 1280*c4e8edabSChris Kay - xilinx: versal: Increase OCM memory size for DEBUG builds and adjust cpu 1281*c4e8edabSChris Kay clock, Move versal_def.h and versal_private to include directory 1282*c4e8edabSChris Kay- Tools 1283*c4e8edabSChris Kay - sptool: Updated sptool to accommodate building secure partition packages. 1284*c4e8edabSChris Kay 1285*c4e8edabSChris Kay### Resolved Issues 1286*c4e8edabSChris Kay 1287*c4e8edabSChris Kay- Arm Architecture 1288*c4e8edabSChris Kay - Fix crash dump for lower EL 1289*c4e8edabSChris Kay- BL-Specific 1290*c4e8edabSChris Kay - Bug fix: Protect TSP prints with lock 1291*c4e8edabSChris Kay - Fix boot failures on some builds linked with ld.lld. 1292*c4e8edabSChris Kay- Build System 1293*c4e8edabSChris Kay - Fix clang build if CC is not in the path. 1294*c4e8edabSChris Kay - Fix 'BL stage' comment for build macros 1295*c4e8edabSChris Kay- Code Quality 1296*c4e8edabSChris Kay - coverity: Fix various MISRA violations including null pointer violations, C 1297*c4e8edabSChris Kay issues in BL1/BL2/BL31 and FDT helper functions, using boolean essential, 1298*c4e8edabSChris Kay type, and removing unnecessary header file and comparisons to LONG_MAX in 1299*c4e8edabSChris Kay debugfs devfip 1300*c4e8edabSChris Kay - Based on coding guidelines, replace all `unsigned long` depending on if 1301*c4e8edabSChris Kay fixed based on AArch32 or AArch64. 1302*c4e8edabSChris Kay - Unify type of "cpu_idx" and Platform specific defines across PSCI module. 1303*c4e8edabSChris Kay- Drivers 1304*c4e8edabSChris Kay - auth: Necessary fix in drivers to upgrade to mbedtls-2.18.0 1305*c4e8edabSChris Kay - delay_timer: Fix non-standard frequency issue in udelay 1306*c4e8edabSChris Kay - gicv3: Fix compiler dependent behavior 1307*c4e8edabSChris Kay - gic600: Fix include ordering according to the coding style and power up 1308*c4e8edabSChris Kay sequence 1309*c4e8edabSChris Kay- Library Code 1310*c4e8edabSChris Kay - el3_runtime: Fix stack pointer maintenance on EA handling path, fixup 1311*c4e8edabSChris Kay 'cm_setup_context' prototype, and adds TPIDR_EL2 register to the context 1312*c4e8edabSChris Kay save restore routines 1313*c4e8edabSChris Kay - libc: Fix SIZE_MAX on AArch32 1314*c4e8edabSChris Kay - locks: T589: Fix insufficient ordering guarantees in bakery lock 1315*c4e8edabSChris Kay - pmf: Fix 'tautological-constant-compare' error, Make the runtime 1316*c4e8edabSChris Kay instrumentation work on AArch32, and Simplify PMF helper macro definitions 1317*c4e8edabSChris Kay across header files 1318*c4e8edabSChris Kay - xlat_tables_v2: Fix assembler warning of PLAT_RO_XLAT_TABLES 1319*c4e8edabSChris Kay- Platforms 1320*c4e8edabSChris Kay - allwinner: Fix H6 GPIO and CCU memory map addresses and incorrect ARISC code 1321*c4e8edabSChris Kay patch offset check 1322*c4e8edabSChris Kay - arm/a5ds: Correct system freq and Cache Writeback Granule, and cleanup 1323*c4e8edabSChris Kay enable-method in devicetree 1324*c4e8edabSChris Kay - arm/fvp: Fix incorrect GIC mapping, BL31 load address and image size for 1325*c4e8edabSChris Kay RESET_TO_BL31=1, topology description of cpus for DynamIQ based FVP, and 1326*c4e8edabSChris Kay multithreaded FVP power domain tree 1327*c4e8edabSChris Kay - arm/fvp: spm-mm: Correcting instructions to build SPM for FVP 1328*c4e8edabSChris Kay - arm/common: Fix ROTPK hash generation for ECDSA encryption, BL2 bug in 1329*c4e8edabSChris Kay dynamic configuration initialisation, and current RECLAIM_INIT_CODE behavior 1330*c4e8edabSChris Kay - arm/rde1edge: Fix incorrect topology tree description 1331*c4e8edabSChris Kay - arm/sgi: Fix the incorrect check for SCMI channel ID 1332*c4e8edabSChris Kay - common: Flush dcache when storing timestamp 1333*c4e8edabSChris Kay - intel: Fix UEFI decompression issue, memory calibration, SMC SIP service, 1334*c4e8edabSChris Kay mailbox config return status, mailbox driver logic, FPGA manager on 1335*c4e8edabSChris Kay reconfiguration, and mailbox send_cmd issue 1336*c4e8edabSChris Kay - imx: Fix shift-overflow errors, the rdc memory region slot's offset, 1337*c4e8edabSChris Kay multiple definition of ipc_handle, missing inclusion of cdefs.h, and correct 1338*c4e8edabSChris Kay the SGIs that used for secure interrupt 1339*c4e8edabSChris Kay - mediatek: mt8183: Fix AARCH64 init fail on CPU0 1340*c4e8edabSChris Kay - rockchip: Fix definition of struct param_ddr_usage 1341*c4e8edabSChris Kay - rpi4: Fix documentation of armstub config entry 1342*c4e8edabSChris Kay - st: Correct io possible NULL pointer dereference and device_size type, nand 1343*c4e8edabSChris Kay xor_ecc.val assigned value, static analysis tool issues, and fix incorrect 1344*c4e8edabSChris Kay return value and correctly check pwr-regulators node 1345*c4e8edabSChris Kay - xilinx: zynqmp: Correct syscnt freq for QEMU and fix clock models and IDs of 1346*c4e8edabSChris Kay GEM-related clocks 1347*c4e8edabSChris Kay 1348*c4e8edabSChris Kay### Known Issues 1349*c4e8edabSChris Kay 1350*c4e8edabSChris Kay- Build System 1351*c4e8edabSChris Kay - dtb: DTB creation not supported when building on a Windows host. 1352*c4e8edabSChris Kay 1353*c4e8edabSChris Kay This step in the build process is skipped when running on a Windows host. A 1354*c4e8edabSChris Kay known issue from the 1.6 release. 1355*c4e8edabSChris Kay 1356*c4e8edabSChris Kay - Intermittent assertion firing `ASSERT: services/spd/tspd/tspd_main.c:105` 1357*c4e8edabSChris Kay- Coverity 1358*c4e8edabSChris Kay - Intermittent Race condition in Coverity Jenkins Build Job 1359*c4e8edabSChris Kay- Platforms 1360*c4e8edabSChris Kay - arm/juno: System suspend from Linux does not function as documented in the 1361*c4e8edabSChris Kay user guide 1362*c4e8edabSChris Kay 1363*c4e8edabSChris Kay Following the instructions provided in the user guide document does not 1364*c4e8edabSChris Kay result in the platform entering system suspend state as expected. A message 1365*c4e8edabSChris Kay relating to the hdlcd driver failing to suspend will be emitted on the Linux 1366*c4e8edabSChris Kay terminal. 1367*c4e8edabSChris Kay 1368*c4e8edabSChris Kay - mediatek/mt6795: This platform does not build in this release 1369*c4e8edabSChris Kay 1370*c4e8edabSChris Kay## 2.2 (2019-10-22) 1371*c4e8edabSChris Kay 1372*c4e8edabSChris Kay### New Features 1373*c4e8edabSChris Kay 1374*c4e8edabSChris Kay- Architecture 1375*c4e8edabSChris Kay - Enable Pointer Authentication (PAuth) support for Secure World 1376*c4e8edabSChris Kay 1377*c4e8edabSChris Kay - Adds support for ARMv8.3-PAuth in BL1 SMC calls and BL2U image for 1378*c4e8edabSChris Kay firmware updates. 1379*c4e8edabSChris Kay 1380*c4e8edabSChris Kay - Enable Memory Tagging Extension (MTE) support in both secure and non-secure 1381*c4e8edabSChris Kay worlds 1382*c4e8edabSChris Kay 1383*c4e8edabSChris Kay - Adds support for the new Memory Tagging Extension arriving in ARMv8.5. MTE 1384*c4e8edabSChris Kay support is now enabled by default on systems that support it at EL0. 1385*c4e8edabSChris Kay - To enable it at ELx for both the non-secure and the secure world, the 1386*c4e8edabSChris Kay compiler flag `CTX_INCLUDE_MTE_REGS` includes register saving and 1387*c4e8edabSChris Kay restoring when necessary in order to prevent information leakage between 1388*c4e8edabSChris Kay the worlds. 1389*c4e8edabSChris Kay 1390*c4e8edabSChris Kay - Add support for Branch Target Identification (BTI) 1391*c4e8edabSChris Kay- Build System 1392*c4e8edabSChris Kay - Modify FVP makefile for CPUs that support both AArch64/32 1393*c4e8edabSChris Kay - AArch32: Allow compiling with soft-float toolchain 1394*c4e8edabSChris Kay - Makefile: Add default warning flags 1395*c4e8edabSChris Kay - Add Makefile check for PAuth and AArch64 1396*c4e8edabSChris Kay - Add compile-time errors for HW_ASSISTED_COHERENCY flag 1397*c4e8edabSChris Kay - Apply compile-time check for AArch64-only CPUs 1398*c4e8edabSChris Kay - build_macros: Add mechanism to prevent bin generation. 1399*c4e8edabSChris Kay - Add support for default stack-protector flag 1400*c4e8edabSChris Kay - spd: opteed: Enable NS_TIMER_SWITCH 1401*c4e8edabSChris Kay - plat/arm: Skip BL2U if RESET_TO_SP_MIN flag is set 1402*c4e8edabSChris Kay - Add new build option to let each platform select which implementation of 1403*c4e8edabSChris Kay spinlocks it wants to use 1404*c4e8edabSChris Kay- CPU Support 1405*c4e8edabSChris Kay - DSU: Workaround for erratum 798953 and 936184 1406*c4e8edabSChris Kay - Neoverse N1: Force cacheable atomic to near atomic 1407*c4e8edabSChris Kay - Neoverse N1: Workaround for erratum 1073348, 1130799, 1165347, 1207823, 1408*c4e8edabSChris Kay 1220197, 1257314, 1262606, 1262888, 1275112, 1315703, 1542419 1409*c4e8edabSChris Kay - Neoverse Zeus: Apply the MSR SSBS instruction 1410*c4e8edabSChris Kay - cortex-Hercules/HerculesAE: Support added for Cortex-Hercules and 1411*c4e8edabSChris Kay Cortex-HerculesAE CPUs 1412*c4e8edabSChris Kay - cortex-Hercules/HerculesAE: Enable AMU for Cortex-Hercules and 1413*c4e8edabSChris Kay Cortex-HerculesAE 1414*c4e8edabSChris Kay - cortex-a76AE: Support added for Cortex-A76AE CPU 1415*c4e8edabSChris Kay - cortex-a76: Workaround for erratum 1257314, 1262606, 1262888, 1275112, 1416*c4e8edabSChris Kay 1286807 1417*c4e8edabSChris Kay - cortex-a65/a65AE: Support added for Cortex-A65 and Cortex-A65AE CPUs 1418*c4e8edabSChris Kay - cortex-a65: Enable AMU for Cortex-A65 1419*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 1221012 1420*c4e8edabSChris Kay - cortex-a35: Workaround for erratum 855472 1421*c4e8edabSChris Kay - cortex-a9: Workaround for erratum 794073 1422*c4e8edabSChris Kay- Drivers 1423*c4e8edabSChris Kay - console: Allow the console to register multiple times 1424*c4e8edabSChris Kay 1425*c4e8edabSChris Kay - delay: Timeout detection support 1426*c4e8edabSChris Kay 1427*c4e8edabSChris Kay - gicv3: Enabled multi-socket GIC redistributor frame discovery and migrated 1428*c4e8edabSChris Kay ARM platforms to the new API 1429*c4e8edabSChris Kay 1430*c4e8edabSChris Kay - Adds `gicv3_rdistif_probe` function that delegates the responsibility of 1431*c4e8edabSChris Kay discovering the corresponding redistributor base frame to each CPU itself. 1432*c4e8edabSChris Kay 1433*c4e8edabSChris Kay - sbsa: Add SBSA watchdog driver 1434*c4e8edabSChris Kay 1435*c4e8edabSChris Kay - st/stm32_hash: Add HASH driver 1436*c4e8edabSChris Kay 1437*c4e8edabSChris Kay - ti/uart: Add an AArch32 variant 1438*c4e8edabSChris Kay- Library at ROM (romlib) 1439*c4e8edabSChris Kay - Introduce BTI support in Library at ROM (romlib) 1440*c4e8edabSChris Kay- New Platforms Support 1441*c4e8edabSChris Kay - amlogic: g12a: New platform support added for the S905X2 (G12A) platform 1442*c4e8edabSChris Kay - amlogic: meson/gxl: New platform support added for Amlogic Meson S905x (GXL) 1443*c4e8edabSChris Kay - arm/a5ds: New platform support added for A5 DesignStart 1444*c4e8edabSChris Kay - arm/corstone: New platform support added for Corstone-700 1445*c4e8edabSChris Kay - intel: New platform support added for Agilex 1446*c4e8edabSChris Kay - mediatek: New platform support added for MediaTek mt8183 1447*c4e8edabSChris Kay - qemu/qemu_sbsa: New platform support added for QEMU SBSA platform 1448*c4e8edabSChris Kay - renesas/rcar_gen3: plat: New platform support added for D3 1449*c4e8edabSChris Kay - rockchip: New platform support added for px30 1450*c4e8edabSChris Kay - rockchip: New platform support added for rk3288 1451*c4e8edabSChris Kay - rpi: New platform support added for Raspberry Pi 4 1452*c4e8edabSChris Kay- Platforms 1453*c4e8edabSChris Kay - arm/common: Introduce wrapper functions to setup secure watchdog 1454*c4e8edabSChris Kay - arm/fvp: Add Delay Timer driver to BL1 and BL31 and option for defining 1455*c4e8edabSChris Kay platform DRAM2 base 1456*c4e8edabSChris Kay - arm/fvp: Add Linux DTS files for 32 bit threaded FVPs 1457*c4e8edabSChris Kay - arm/n1sdp: Add code for DDR ECC enablement and BL33 copy to DDR, Initialise 1458*c4e8edabSChris Kay CNTFRQ in Non Secure CNTBaseN 1459*c4e8edabSChris Kay - arm/juno: Use shared mbedtls heap between BL1 and BL2 and add basic support 1460*c4e8edabSChris Kay for dynamic config 1461*c4e8edabSChris Kay - imx: Basic support for PicoPi iMX7D, rdc module init, caam module init, 1462*c4e8edabSChris Kay aipstz init, IMX_SIP_GET_SOC_INFO, IMX_SIP_BUILDINFO added 1463*c4e8edabSChris Kay - intel: Add ncore ccu driver 1464*c4e8edabSChris Kay - mediatek/mt81\*: Use new bl31_params_parse() helper 1465*c4e8edabSChris Kay - nvidia: tegra: Add support for multi console interface 1466*c4e8edabSChris Kay - qemu/qemu_sbsa: Adding memory mapping for both FLASH0/FLASH1 1467*c4e8edabSChris Kay - qemu: Added gicv3 support, new console interface in AArch32, and 1468*c4e8edabSChris Kay sub-platforms 1469*c4e8edabSChris Kay - renesas/rcar_gen3: plat: Add R-Car V3M support, new board revision for 1470*c4e8edabSChris Kay H3ULCB, DBSC4 setting before self-refresh mode 1471*c4e8edabSChris Kay - socionext/uniphier: Support console based on multi-console 1472*c4e8edabSChris Kay - st: stm32mp1: Add OP-TEE, Avenger96, watchdog, LpDDR3, authentication 1473*c4e8edabSChris Kay support and general SYSCFG management 1474*c4e8edabSChris Kay - ti/k3: common: Add support for J721E, Use coherent memory for shared data, 1475*c4e8edabSChris Kay Trap all asynchronous bus errors to EL3 1476*c4e8edabSChris Kay - xilinx/zynqmp: Add support for multi console interface, Initialize IPI table 1477*c4e8edabSChris Kay from zynqmp_config_setup() 1478*c4e8edabSChris Kay- PSCI 1479*c4e8edabSChris Kay - Adding new optional PSCI hook `pwr_domain_on_finish_late` 1480*c4e8edabSChris Kay - This PSCI hook `pwr_domain_on_finish_late` is similar to 1481*c4e8edabSChris Kay `pwr_domain_on_finish` but is guaranteed to be invoked when the respective 1482*c4e8edabSChris Kay core and cluster are participating in coherency. 1483*c4e8edabSChris Kay- Security 1484*c4e8edabSChris Kay - Speculative Store Bypass Safe (SSBS): Further enhance protection against 1485*c4e8edabSChris Kay Spectre variant 4 by disabling speculative loads/stores (SPSR.SSBS bit) by 1486*c4e8edabSChris Kay default. 1487*c4e8edabSChris Kay - UBSAN support and handlers 1488*c4e8edabSChris Kay - Adds support for the Undefined Behaviour sanitizer. There are two types of 1489*c4e8edabSChris Kay support offered - minimalistic trapping support which essentially 1490*c4e8edabSChris Kay immediately crashes on undefined behaviour and full support with full 1491*c4e8edabSChris Kay debug messages. 1492*c4e8edabSChris Kay- Tools 1493*c4e8edabSChris Kay - cert_create: Add support for bigger RSA key sizes (3KB and 4KB), previously 1494*c4e8edabSChris Kay the maximum size was 2KB. 1495*c4e8edabSChris Kay - fiptool: Add support to build fiptool on Windows. 1496*c4e8edabSChris Kay 1497*c4e8edabSChris Kay### Changed 1498*c4e8edabSChris Kay 1499*c4e8edabSChris Kay- Architecture 1500*c4e8edabSChris Kay - Refactor ARMv8.3 Pointer Authentication support code 1501*c4e8edabSChris Kay - backtrace: Strip PAC field when PAUTH is enabled 1502*c4e8edabSChris Kay - Prettify crash reporting output on AArch64. 1503*c4e8edabSChris Kay - Rework smc_unknown return code path in smc_handler 1504*c4e8edabSChris Kay - Leverage the existing `el3_exit()` return routine for smc_unknown return 1505*c4e8edabSChris Kay path rather than a custom set of instructions. 1506*c4e8edabSChris Kay- BL-Specific 1507*c4e8edabSChris Kay - Invalidate dcache build option for BL2 entry at EL3 1508*c4e8edabSChris Kay - Add missing support for BL2_AT_EL3 in XIP memory 1509*c4e8edabSChris Kay- Boot Flow 1510*c4e8edabSChris Kay - Add helper to parse BL31 parameters (both versions) 1511*c4e8edabSChris Kay - Factor out cross-BL API into export headers suitable for 3rd party code 1512*c4e8edabSChris Kay - Introduce lightweight BL platform parameter library 1513*c4e8edabSChris Kay- Drivers 1514*c4e8edabSChris Kay - auth: Memory optimization for Chain of Trust (CoT) description 1515*c4e8edabSChris Kay - bsec: Move bsec_mode_is_closed_device() service to platform 1516*c4e8edabSChris Kay - cryptocell: Move Cryptocell specific API into driver 1517*c4e8edabSChris Kay - gicv3: Prevent pending G1S interrupt from becoming G0 interrupt 1518*c4e8edabSChris Kay - mbedtls: Remove weak heap implementation 1519*c4e8edabSChris Kay - mmc: Increase delay between ACMD41 retries 1520*c4e8edabSChris Kay - mmc: stm32_sdmmc2: Correctly manage block size 1521*c4e8edabSChris Kay - mmc: stm32_sdmmc2: Manage max-frequency property from DT 1522*c4e8edabSChris Kay - synopsys/emmc: Do not change FIFO TH as this breaks some platforms 1523*c4e8edabSChris Kay - synopsys: Update synopsys drivers to not rely on undefined overflow 1524*c4e8edabSChris Kay behaviour 1525*c4e8edabSChris Kay - ufs: Extend the delay after reset to wait for some slower chips 1526*c4e8edabSChris Kay- Platforms 1527*c4e8edabSChris Kay - amlogic/meson/gxl: Remove BL2 dependency from BL31 1528*c4e8edabSChris Kay - arm/common: Shorten the Firmware Update (FWU) process 1529*c4e8edabSChris Kay - arm/fvp: Remove GIC initialisation from secondary core cold boot 1530*c4e8edabSChris Kay - arm/sgm: Temporarily disable shared Mbed TLS heap for SGM 1531*c4e8edabSChris Kay - hisilicon: Update hisilicon drivers to not rely on undefined overflow 1532*c4e8edabSChris Kay behaviour 1533*c4e8edabSChris Kay - imx: imx8: Replace PLAT_IMX8\* with PLAT_imx8\*, remove duplicated linker 1534*c4e8edabSChris Kay symbols and deprecated code include, keep only IRQ 32 unmasked, enable all 1535*c4e8edabSChris Kay power domain by default 1536*c4e8edabSChris Kay - marvell: Prevent SError accessing PCIe link, Switch to xlat_tables_v2, do 1537*c4e8edabSChris Kay not rely on argument passed via smc, make sure that comphy init will use 1538*c4e8edabSChris Kay correct address 1539*c4e8edabSChris Kay - mediatek: mt8173: Refactor RTC and PMIC drivers 1540*c4e8edabSChris Kay - mediatek: mt8173: Apply MULTI_CONSOLE framework 1541*c4e8edabSChris Kay - nvidia: Tegra: memctrl_v2: fix "overflow before widen" coverity issue 1542*c4e8edabSChris Kay - qemu: Simplify the image size calculation, Move and generalise FDT PSCI 1543*c4e8edabSChris Kay fixup, move gicv2 codes to separate file 1544*c4e8edabSChris Kay - renesas/rcar_gen3: Convert to multi-console API, update QoS setting, Update 1545*c4e8edabSChris Kay IPL and Secure Monitor Rev2.0.4, Change to restore timer counter value at 1546*c4e8edabSChris Kay resume, Update DDR setting rev.0.35, qos: change subslot cycle, Change 1547*c4e8edabSChris Kay periodic write DQ training option. 1548*c4e8edabSChris Kay - rockchip: Allow SOCs with undefined wfe check bits, Streamline and complete 1549*c4e8edabSChris Kay UARTn_BASE macros, drop rockchip-specific imported linker symbols for bl31, 1550*c4e8edabSChris Kay Disable binary generation for all SOCs, Allow console device to be set by 1551*c4e8edabSChris Kay DTB, Use new bl31_params_parse functions 1552*c4e8edabSChris Kay - rpi/rpi3: Move shared rpi3 files into common directory 1553*c4e8edabSChris Kay - socionext/uniphier: Set CONSOLE_FLAG_TRANSLATE_CRLF and clean up console 1554*c4e8edabSChris Kay driver 1555*c4e8edabSChris Kay - socionext/uniphier: Replace DIV_ROUND_UP() with div_round_up() from 1556*c4e8edabSChris Kay utils_def.h 1557*c4e8edabSChris Kay - st/stm32mp: Split stm32mp_io_setup function, move 1558*c4e8edabSChris Kay stm32_get_gpio_bank_clock() to private file, correctly handle Clock 1559*c4e8edabSChris Kay Spreading Generator, move oscillator functions to generic file, realign 1560*c4e8edabSChris Kay device tree files with internal devs, enable RTCAPB clock for dual-core 1561*c4e8edabSChris Kay chips, use a common function to check spinlock is available, move 1562*c4e8edabSChris Kay check_header() to common code 1563*c4e8edabSChris Kay - ti/k3: Enable SEPARATE_CODE_AND_RODATA by default, Remove shared RAM space, 1564*c4e8edabSChris Kay Drop \_ADDRESS from K3_USART_BASE to match other defines, Remove MSMC port 1565*c4e8edabSChris Kay definitions, Allow USE_COHERENT_MEM for K3, Set L2 latency on A72 cores 1566*c4e8edabSChris Kay- PSCI 1567*c4e8edabSChris Kay - PSCI: Lookup list of parent nodes to lock only once 1568*c4e8edabSChris Kay- Secure Partition Manager (SPM): SPCI Prototype 1569*c4e8edabSChris Kay - Fix service UUID lookup 1570*c4e8edabSChris Kay - Adjust size of virtual address space per partition 1571*c4e8edabSChris Kay - Refactor xlat context creation 1572*c4e8edabSChris Kay - Move shim layer to TTBR1_EL1 1573*c4e8edabSChris Kay - Ignore empty regions in resource description 1574*c4e8edabSChris Kay- Security 1575*c4e8edabSChris Kay - Refactor SPSR initialisation code 1576*c4e8edabSChris Kay - SMMUv3: Abort DMA transactions 1577*c4e8edabSChris Kay - For security DMA should be blocked at the SMMU by default unless 1578*c4e8edabSChris Kay explicitly enabled for a device. SMMU is disabled after reset with all 1579*c4e8edabSChris Kay streams bypassing the SMMU, and abortion of all incoming transactions 1580*c4e8edabSChris Kay implements a default deny policy on reset. 1581*c4e8edabSChris Kay - Moves `bl1_platform_setup()` function from arm_bl1_setup.c to FVP 1582*c4e8edabSChris Kay platforms' fvp_bl1_setup.c and fvp_ve_bl1_setup.c files. 1583*c4e8edabSChris Kay- Tools 1584*c4e8edabSChris Kay - cert_create: Remove RSA PKCS#1 v1.5 support 1585*c4e8edabSChris Kay 1586*c4e8edabSChris Kay### Resolved Issues 1587*c4e8edabSChris Kay 1588*c4e8edabSChris Kay- Architecture 1589*c4e8edabSChris Kay - Fix the CAS spinlock implementation by adding a missing DSB in 1590*c4e8edabSChris Kay `spin_unlock()` 1591*c4e8edabSChris Kay - AArch64: Fix SCTLR bit definitions 1592*c4e8edabSChris Kay - Removes incorrect `SCTLR_V_BIT` definition and adds definitions for 1593*c4e8edabSChris Kay ARMv8.3-Pauth `EnIB`, `EnDA` and `EnDB` bits. 1594*c4e8edabSChris Kay - Fix restoration of PAuth context 1595*c4e8edabSChris Kay - Replace call to `pauth_context_save()` with `pauth_context_restore()` in 1596*c4e8edabSChris Kay case of unknown SMC call. 1597*c4e8edabSChris Kay- BL-Specific Issues 1598*c4e8edabSChris Kay - Fix BL31 crash reporting on AArch64 only platforms 1599*c4e8edabSChris Kay- Build System 1600*c4e8edabSChris Kay - Remove several warnings reported with W=2 and W=1 1601*c4e8edabSChris Kay- Code Quality Issues 1602*c4e8edabSChris Kay - SCTLR and ACTLR are 32-bit for AArch32 and 64-bit for AArch64 1603*c4e8edabSChris Kay - Unify type of "cpu_idx" across PSCI module. 1604*c4e8edabSChris Kay - Assert if power level value greater then PSCI_INVALID_PWR_LVL 1605*c4e8edabSChris Kay - Unsigned long should not be used as per coding guidelines 1606*c4e8edabSChris Kay - Reduce the number of memory leaks in cert_create 1607*c4e8edabSChris Kay - Fix type of cot_desc_ptr 1608*c4e8edabSChris Kay - Use explicit-width data types in AAPCS parameter structs 1609*c4e8edabSChris Kay - Add python configuration for editorconfig 1610*c4e8edabSChris Kay - BL1: Fix type consistency 1611*c4e8edabSChris Kay - Enable -Wshift-overflow=2 to check for undefined shift behavior 1612*c4e8edabSChris Kay - Updated upstream platforms to not rely on undefined overflow behaviour 1613*c4e8edabSChris Kay- Coverity Quality Issues 1614*c4e8edabSChris Kay - Remove GGC ignore -Warray-bounds 1615*c4e8edabSChris Kay - Fix Coverity #261967, Infinite loop 1616*c4e8edabSChris Kay - Fix Coverity #343017, Missing unlock 1617*c4e8edabSChris Kay - Fix Coverity #343008, Side affect in assertion 1618*c4e8edabSChris Kay - Fix Coverity #342970, Uninitialized scalar variable 1619*c4e8edabSChris Kay- CPU Support 1620*c4e8edabSChris Kay - cortex-a12: Fix MIDR mask 1621*c4e8edabSChris Kay- Drivers 1622*c4e8edabSChris Kay - console: Remove Arm console unregister on suspend 1623*c4e8edabSChris Kay - gicv3: Fix support for full SPI range 1624*c4e8edabSChris Kay - scmi: Fix wrong payload length 1625*c4e8edabSChris Kay- Library Code 1626*c4e8edabSChris Kay - libc: Fix sparse warning for \_\_assert() 1627*c4e8edabSChris Kay - libc: Fix memchr implementation 1628*c4e8edabSChris Kay- Platforms 1629*c4e8edabSChris Kay - rpi: rpi3: Fix compilation error when stack protector is enabled 1630*c4e8edabSChris Kay - socionext/uniphier: Fix compilation fail for SPM support build config 1631*c4e8edabSChris Kay - st/stm32mp1: Fix TZC400 configuration against non-secure DDR 1632*c4e8edabSChris Kay - ti/k3: common: Fix RO data area size calculation 1633*c4e8edabSChris Kay- Security 1634*c4e8edabSChris Kay - AArch32: Disable Secure Cycle Counter 1635*c4e8edabSChris Kay - Changes the implementation for disabling Secure Cycle Counter. For ARMv8.5 1636*c4e8edabSChris Kay the counter gets disabled by setting `SDCR.SCCD` bit on CPU cold/warm 1637*c4e8edabSChris Kay boot. For the earlier architectures PMCR register is saved/restored on 1638*c4e8edabSChris Kay secure world entry/exit from/to Non-secure state, and cycle counting gets 1639*c4e8edabSChris Kay disabled by setting PMCR.DP bit. 1640*c4e8edabSChris Kay - AArch64: Disable Secure Cycle Counter 1641*c4e8edabSChris Kay - For ARMv8.5 the counter gets disabled by setting `MDCR_El3.SCCD` bit on 1642*c4e8edabSChris Kay CPU cold/warm boot. For the earlier architectures PMCR_EL0 register is 1643*c4e8edabSChris Kay saved/restored on secure world entry/exit from/to Non-secure state, and 1644*c4e8edabSChris Kay cycle counting gets disabled by setting PMCR_EL0.DP bit. 1645*c4e8edabSChris Kay 1646*c4e8edabSChris Kay### Deprecations 1647*c4e8edabSChris Kay 1648*c4e8edabSChris Kay- Common Code 1649*c4e8edabSChris Kay - Remove MULTI_CONSOLE_API flag and references to it 1650*c4e8edabSChris Kay - Remove deprecated `plat_crash_console_*` 1651*c4e8edabSChris Kay - Remove deprecated interfaces `get_afflvl_shift`, `mpidr_mask_lower_afflvls`, 1652*c4e8edabSChris Kay `eret` 1653*c4e8edabSChris Kay - AARCH32/AARCH64 macros are now deprecated in favor of `__aarch64__` 1654*c4e8edabSChris Kay - `__ASSEMBLY__` macro is now deprecated in favor of `__ASSEMBLER__` 1655*c4e8edabSChris Kay- Drivers 1656*c4e8edabSChris Kay - console: Removed legacy console API 1657*c4e8edabSChris Kay - console: Remove deprecated finish_console_register 1658*c4e8edabSChris Kay - tzc: Remove deprecated types `tzc_action_t` and `tzc_region_attributes_t` 1659*c4e8edabSChris Kay- Secure Partition Manager (SPM): 1660*c4e8edabSChris Kay - Prototype SPCI-based SPM (services/std_svc/spm) will be replaced with 1661*c4e8edabSChris Kay alternative methods of secure partitioning support. 1662*c4e8edabSChris Kay 1663*c4e8edabSChris Kay### Known Issues 1664*c4e8edabSChris Kay 1665*c4e8edabSChris Kay- Build System Issues 1666*c4e8edabSChris Kay - dtb: DTB creation not supported when building on a Windows host. 1667*c4e8edabSChris Kay 1668*c4e8edabSChris Kay This step in the build process is skipped when running on a Windows host. A 1669*c4e8edabSChris Kay known issue from the 1.6 release. 1670*c4e8edabSChris Kay- Platform Issues 1671*c4e8edabSChris Kay - arm/juno: System suspend from Linux does not function as documented in the 1672*c4e8edabSChris Kay user guide 1673*c4e8edabSChris Kay 1674*c4e8edabSChris Kay Following the instructions provided in the user guide document does not 1675*c4e8edabSChris Kay result in the platform entering system suspend state as expected. A message 1676*c4e8edabSChris Kay relating to the hdlcd driver failing to suspend will be emitted on the Linux 1677*c4e8edabSChris Kay terminal. 1678*c4e8edabSChris Kay 1679*c4e8edabSChris Kay - mediatek/mt6795: This platform does not build in this release 1680*c4e8edabSChris Kay 1681*c4e8edabSChris Kay## 2.1 (2019-03-29) 1682*c4e8edabSChris Kay 1683*c4e8edabSChris Kay### New Features 1684*c4e8edabSChris Kay 1685*c4e8edabSChris Kay- Architecture 1686*c4e8edabSChris Kay 1687*c4e8edabSChris Kay - Support for ARMv8.3 pointer authentication in the normal and secure worlds 1688*c4e8edabSChris Kay 1689*c4e8edabSChris Kay The use of pointer authentication in the normal world is enabled whenever 1690*c4e8edabSChris Kay architectural support is available, without the need for additional build 1691*c4e8edabSChris Kay flags. 1692*c4e8edabSChris Kay 1693*c4e8edabSChris Kay Use of pointer authentication in the secure world remains an experimental 1694*c4e8edabSChris Kay configuration at this time. Using both the `ENABLE_PAUTH` and 1695*c4e8edabSChris Kay `CTX_INCLUDE_PAUTH_REGS` build flags, pointer authentication can be enabled 1696*c4e8edabSChris Kay in EL3 and S-EL1/0. 1697*c4e8edabSChris Kay 1698*c4e8edabSChris Kay See the {ref}`Firmware Design` document for additional details on the use of 1699*c4e8edabSChris Kay pointer authentication. 1700*c4e8edabSChris Kay 1701*c4e8edabSChris Kay - Enable Data Independent Timing (DIT) in EL3, where supported 1702*c4e8edabSChris Kay 1703*c4e8edabSChris Kay- Build System 1704*c4e8edabSChris Kay 1705*c4e8edabSChris Kay - Support for BL-specific build flags 1706*c4e8edabSChris Kay 1707*c4e8edabSChris Kay - Support setting compiler target architecture based on `ARM_ARCH_MINOR` build 1708*c4e8edabSChris Kay option. 1709*c4e8edabSChris Kay 1710*c4e8edabSChris Kay - New `RECLAIM_INIT_CODE` build flag: 1711*c4e8edabSChris Kay 1712*c4e8edabSChris Kay A significant amount of the code used for the initialization of BL31 is not 1713*c4e8edabSChris Kay needed again after boot time. In order to reduce the runtime memory 1714*c4e8edabSChris Kay footprint, the memory used for this code can be reclaimed after 1715*c4e8edabSChris Kay initialization. 1716*c4e8edabSChris Kay 1717*c4e8edabSChris Kay Certain boot-time functions were marked with the `__init` attribute to 1718*c4e8edabSChris Kay enable this reclamation. 1719*c4e8edabSChris Kay 1720*c4e8edabSChris Kay- CPU Support 1721*c4e8edabSChris Kay 1722*c4e8edabSChris Kay - cortex-a76: Workaround for erratum 1073348 1723*c4e8edabSChris Kay - cortex-a76: Workaround for erratum 1220197 1724*c4e8edabSChris Kay - cortex-a76: Workaround for erratum 1130799 1725*c4e8edabSChris Kay - cortex-a75: Workaround for erratum 790748 1726*c4e8edabSChris Kay - cortex-a75: Workaround for erratum 764081 1727*c4e8edabSChris Kay - cortex-a73: Workaround for erratum 852427 1728*c4e8edabSChris Kay - cortex-a73: Workaround for erratum 855423 1729*c4e8edabSChris Kay - cortex-a57: Workaround for erratum 817169 1730*c4e8edabSChris Kay - cortex-a57: Workaround for erratum 814670 1731*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 903758 1732*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 846532 1733*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 798797 1734*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 778703 1735*c4e8edabSChris Kay - cortex-a55: Workaround for erratum 768277 1736*c4e8edabSChris Kay - cortex-a53: Workaround for erratum 819472 1737*c4e8edabSChris Kay - cortex-a53: Workaround for erratum 824069 1738*c4e8edabSChris Kay - cortex-a53: Workaround for erratum 827319 1739*c4e8edabSChris Kay - cortex-a17: Workaround for erratum 852423 1740*c4e8edabSChris Kay - cortex-a17: Workaround for erratum 852421 1741*c4e8edabSChris Kay - cortex-a15: Workaround for erratum 816470 1742*c4e8edabSChris Kay - cortex-a15: Workaround for erratum 827671 1743*c4e8edabSChris Kay 1744*c4e8edabSChris Kay- Documentation 1745*c4e8edabSChris Kay 1746*c4e8edabSChris Kay - Exception Handling Framework documentation 1747*c4e8edabSChris Kay - Library at ROM (romlib) documentation 1748*c4e8edabSChris Kay - RAS framework documentation 1749*c4e8edabSChris Kay - Coding Guidelines document 1750*c4e8edabSChris Kay 1751*c4e8edabSChris Kay- Drivers 1752*c4e8edabSChris Kay 1753*c4e8edabSChris Kay - ccn: Add API for setting and reading node registers 1754*c4e8edabSChris Kay 1755*c4e8edabSChris Kay - Adds `ccn_read_node_reg` function 1756*c4e8edabSChris Kay - Adds `ccn_write_node_reg` function 1757*c4e8edabSChris Kay 1758*c4e8edabSChris Kay - partition: Support MBR partition entries 1759*c4e8edabSChris Kay 1760*c4e8edabSChris Kay - scmi: Add `plat_css_get_scmi_info` function 1761*c4e8edabSChris Kay 1762*c4e8edabSChris Kay Adds a new API `plat_css_get_scmi_info` which lets the platform register a 1763*c4e8edabSChris Kay platform-specific instance of `scmi_channel_plat_info_t` and remove the 1764*c4e8edabSChris Kay default values 1765*c4e8edabSChris Kay 1766*c4e8edabSChris Kay - tzc380: Add TZC-380 TrustZone Controller driver 1767*c4e8edabSChris Kay 1768*c4e8edabSChris Kay - tzc-dmc620: Add driver to manage the TrustZone Controller within the DMC-620 1769*c4e8edabSChris Kay Dynamic Memory Controller 1770*c4e8edabSChris Kay 1771*c4e8edabSChris Kay- Library at ROM (romlib) 1772*c4e8edabSChris Kay 1773*c4e8edabSChris Kay - Add platform-specific jump table list 1774*c4e8edabSChris Kay 1775*c4e8edabSChris Kay - Allow patching of romlib functions 1776*c4e8edabSChris Kay 1777*c4e8edabSChris Kay This change allows patching of functions in the romlib. This can be done by 1778*c4e8edabSChris Kay adding "patch" at the end of the jump table entry for the function that 1779*c4e8edabSChris Kay needs to be patched in the file jmptbl.i. 1780*c4e8edabSChris Kay 1781*c4e8edabSChris Kay- Library Code 1782*c4e8edabSChris Kay 1783*c4e8edabSChris Kay - Support non-LPAE-enabled MMU tables in AArch32 1784*c4e8edabSChris Kay - mmio: Add `mmio_clrsetbits_16` function 1785*c4e8edabSChris Kay - 16-bit variant of `mmio_clrsetbits` 1786*c4e8edabSChris Kay - object_pool: Add Object Pool Allocator 1787*c4e8edabSChris Kay - Manages object allocation using a fixed-size static array 1788*c4e8edabSChris Kay - Adds `pool_alloc` and `pool_alloc_n` functions 1789*c4e8edabSChris Kay - Does not provide any functions to free allocated objects (by design) 1790*c4e8edabSChris Kay - libc: Added `strlcpy` function 1791*c4e8edabSChris Kay - libc: Import `strrchr` function from FreeBSD 1792*c4e8edabSChris Kay - xlat_tables: Add support for ARMv8.4-TTST 1793*c4e8edabSChris Kay - xlat_tables: Support mapping regions without an explicitly specified VA 1794*c4e8edabSChris Kay 1795*c4e8edabSChris Kay- Math 1796*c4e8edabSChris Kay 1797*c4e8edabSChris Kay - Added softudiv macro to support software division 1798*c4e8edabSChris Kay 1799*c4e8edabSChris Kay- Memory Partitioning And Monitoring (MPAM) 1800*c4e8edabSChris Kay 1801*c4e8edabSChris Kay - Enabled MPAM EL2 traps (`MPAMHCR_EL2` and `MPAM_EL2`) 1802*c4e8edabSChris Kay 1803*c4e8edabSChris Kay- Platforms 1804*c4e8edabSChris Kay 1805*c4e8edabSChris Kay - amlogic: Add support for Meson S905 (GXBB) 1806*c4e8edabSChris Kay 1807*c4e8edabSChris Kay - arm/fvp_ve: Add support for FVP Versatile Express platform 1808*c4e8edabSChris Kay 1809*c4e8edabSChris Kay - arm/n1sdp: Add support for Neoverse N1 System Development platform 1810*c4e8edabSChris Kay 1811*c4e8edabSChris Kay - arm/rde1edge: Add support for Neoverse E1 platform 1812*c4e8edabSChris Kay 1813*c4e8edabSChris Kay - arm/rdn1edge: Add support for Neoverse N1 platform 1814*c4e8edabSChris Kay 1815*c4e8edabSChris Kay - arm: Add support for booting directly to Linux without an intermediate 1816*c4e8edabSChris Kay loader (AArch32) 1817*c4e8edabSChris Kay 1818*c4e8edabSChris Kay - arm/juno: Enable new CPU errata workarounds for A53 and A57 1819*c4e8edabSChris Kay 1820*c4e8edabSChris Kay - arm/juno: Add romlib support 1821*c4e8edabSChris Kay 1822*c4e8edabSChris Kay Building a combined BL1 and ROMLIB binary file with the correct page 1823*c4e8edabSChris Kay alignment is now supported on the Juno platform. When `USE_ROMLIB` is set 1824*c4e8edabSChris Kay for Juno, it generates the combined file `bl1_romlib.bin` which needs to be 1825*c4e8edabSChris Kay used instead of bl1.bin. 1826*c4e8edabSChris Kay 1827*c4e8edabSChris Kay - intel/stratix: Add support for Intel Stratix 10 SoC FPGA platform 1828*c4e8edabSChris Kay 1829*c4e8edabSChris Kay - marvell: Add support for Armada-37xx SoC platform 1830*c4e8edabSChris Kay 1831*c4e8edabSChris Kay - nxp: Add support for i.MX8M and i.MX7 Warp7 platforms 1832*c4e8edabSChris Kay 1833*c4e8edabSChris Kay - renesas: Add support for R-Car Gen3 platform 1834*c4e8edabSChris Kay 1835*c4e8edabSChris Kay - xilinx: Add support for Versal ACAP platforms 1836*c4e8edabSChris Kay 1837*c4e8edabSChris Kay- Position-Independent Executable (PIE) 1838*c4e8edabSChris Kay 1839*c4e8edabSChris Kay PIE support has initially been added to BL31. The `ENABLE_PIE` build flag is 1840*c4e8edabSChris Kay used to enable or disable this functionality as required. 1841*c4e8edabSChris Kay 1842*c4e8edabSChris Kay- Secure Partition Manager 1843*c4e8edabSChris Kay 1844*c4e8edabSChris Kay - New SPM implementation based on SPCI Alpha 1 draft specification 1845*c4e8edabSChris Kay 1846*c4e8edabSChris Kay A new version of SPM has been implemented, based on the SPCI (Secure 1847*c4e8edabSChris Kay Partition Client Interface) and SPRT (Secure Partition Runtime) draft 1848*c4e8edabSChris Kay specifications. 1849*c4e8edabSChris Kay 1850*c4e8edabSChris Kay The new implementation is a prototype that is expected to undergo intensive 1851*c4e8edabSChris Kay rework as the specifications change. It has basic support for multiple 1852*c4e8edabSChris Kay Secure Partitions and Resource Descriptions. 1853*c4e8edabSChris Kay 1854*c4e8edabSChris Kay The older version of SPM, based on MM (ARM Management Mode Interface 1855*c4e8edabSChris Kay Specification), is still present in the codebase. A new build flag, `SPM_MM` 1856*c4e8edabSChris Kay has been added to allow selection of the desired implementation. This flag 1857*c4e8edabSChris Kay defaults to 1, selecting the MM-based implementation. 1858*c4e8edabSChris Kay 1859*c4e8edabSChris Kay- Security 1860*c4e8edabSChris Kay 1861*c4e8edabSChris Kay - Spectre Variant-1 mitigations (`CVE-2017-5753`) 1862*c4e8edabSChris Kay 1863*c4e8edabSChris Kay - Use Speculation Store Bypass Safe (SSBS) functionality where available 1864*c4e8edabSChris Kay 1865*c4e8edabSChris Kay Provides mitigation against `CVE-2018-19440` (Not saving x0 to x3 registers 1866*c4e8edabSChris Kay can leak information from one Normal World SMC client to another) 1867*c4e8edabSChris Kay 1868*c4e8edabSChris Kay### Changed 1869*c4e8edabSChris Kay 1870*c4e8edabSChris Kay- Build System 1871*c4e8edabSChris Kay 1872*c4e8edabSChris Kay - Warning levels are now selectable with `W=<1,2,3>` 1873*c4e8edabSChris Kay - Removed unneeded include paths in PLAT_INCLUDES 1874*c4e8edabSChris Kay - "Warnings as errors" (Werror) can be disabled using `E=0` 1875*c4e8edabSChris Kay - Support totally quiet output with `-s` flag 1876*c4e8edabSChris Kay - Support passing options to checkpatch using `CHECKPATCH_OPTS=<opts>` 1877*c4e8edabSChris Kay - Invoke host compiler with `HOSTCC / HOSTCCFLAGS` instead of `CC / CFLAGS` 1878*c4e8edabSChris Kay - Make device tree pre-processing similar to U-boot/Linux by: 1879*c4e8edabSChris Kay - Creating separate `CPPFLAGS` for DT preprocessing so that compiler options 1880*c4e8edabSChris Kay specific to it can be accommodated. 1881*c4e8edabSChris Kay - Replacing `CPP` with `PP` for DT pre-processing 1882*c4e8edabSChris Kay 1883*c4e8edabSChris Kay- CPU Support 1884*c4e8edabSChris Kay 1885*c4e8edabSChris Kay - Errata report function definition is now mandatory for CPU support files 1886*c4e8edabSChris Kay 1887*c4e8edabSChris Kay CPU operation files must now define a `<name>_errata_report` function to 1888*c4e8edabSChris Kay print errata status. This is no longer a weak reference. 1889*c4e8edabSChris Kay 1890*c4e8edabSChris Kay- Documentation 1891*c4e8edabSChris Kay 1892*c4e8edabSChris Kay - Migrated some content from GitHub wiki to `docs/` directory 1893*c4e8edabSChris Kay - Security advisories now have CVE links 1894*c4e8edabSChris Kay - Updated copyright guidelines 1895*c4e8edabSChris Kay 1896*c4e8edabSChris Kay- Drivers 1897*c4e8edabSChris Kay 1898*c4e8edabSChris Kay - console: The `MULTI_CONSOLE_API` framework has been rewritten in C 1899*c4e8edabSChris Kay 1900*c4e8edabSChris Kay - console: Ported multi-console driver to AArch32 1901*c4e8edabSChris Kay 1902*c4e8edabSChris Kay - gic: Remove 'lowest priority' constants 1903*c4e8edabSChris Kay 1904*c4e8edabSChris Kay Removed `GIC_LOWEST_SEC_PRIORITY` and `GIC_LOWEST_NS_PRIORITY`. Platforms 1905*c4e8edabSChris Kay should define these if required, or instead determine the correct priority 1906*c4e8edabSChris Kay values at runtime. 1907*c4e8edabSChris Kay 1908*c4e8edabSChris Kay - delay_timer: Check that the Generic Timer extension is present 1909*c4e8edabSChris Kay 1910*c4e8edabSChris Kay - mmc: Increase command reply timeout to 10 milliseconds 1911*c4e8edabSChris Kay 1912*c4e8edabSChris Kay - mmc: Poll eMMC device status to ensure `EXT_CSD` command completion 1913*c4e8edabSChris Kay 1914*c4e8edabSChris Kay - mmc: Correctly check return code from `mmc_fill_device_info` 1915*c4e8edabSChris Kay 1916*c4e8edabSChris Kay- External Libraries 1917*c4e8edabSChris Kay 1918*c4e8edabSChris Kay - libfdt: Upgraded from 1.4.2 to 1.4.6-9 1919*c4e8edabSChris Kay 1920*c4e8edabSChris Kay > 1921*c4e8edabSChris Kay 1922*c4e8edabSChris Kay - mbed TLS: Upgraded from 2.12 to 2.16 1923*c4e8edabSChris Kay 1924*c4e8edabSChris Kay > 1925*c4e8edabSChris Kay 1926*c4e8edabSChris Kay This change incorporates fixes for security issues that should be reviewed to 1927*c4e8edabSChris Kay determine if they are relevant for software implementations using Trusted 1928*c4e8edabSChris Kay Firmware-A. See the [mbed TLS releases] page for details on changes from the 1929*c4e8edabSChris Kay 2.12 to the 2.16 release. 1930*c4e8edabSChris Kay 1931*c4e8edabSChris Kay- Library Code 1932*c4e8edabSChris Kay 1933*c4e8edabSChris Kay - compiler-rt: Updated `lshrdi3.c` and `int_lib.h` with changes from LLVM 1934*c4e8edabSChris Kay master branch (r345645) 1935*c4e8edabSChris Kay - cpu: Updated macro that checks need for `CVE-2017-5715` mitigation 1936*c4e8edabSChris Kay - libc: Made setjmp and longjmp C standard compliant 1937*c4e8edabSChris Kay - libc: Allowed overriding the default libc (use `OVERRIDE_LIBC`) 1938*c4e8edabSChris Kay - libc: Moved setjmp and longjmp to the `libc/` directory 1939*c4e8edabSChris Kay 1940*c4e8edabSChris Kay- Platforms 1941*c4e8edabSChris Kay 1942*c4e8edabSChris Kay - Removed Mbed TLS dependency from plat_bl_common.c 1943*c4e8edabSChris Kay 1944*c4e8edabSChris Kay - arm: Removed unused `ARM_MAP_BL_ROMLIB` macro 1945*c4e8edabSChris Kay 1946*c4e8edabSChris Kay - arm: Removed `ARM_BOARD_OPTIMISE_MEM` feature and build flag 1947*c4e8edabSChris Kay 1948*c4e8edabSChris Kay - arm: Moved several components into `drivers/` directory 1949*c4e8edabSChris Kay 1950*c4e8edabSChris Kay This affects the SDS, SCP, SCPI, MHU and SCMI components 1951*c4e8edabSChris Kay 1952*c4e8edabSChris Kay - arm/juno: Increased maximum BL2 image size to `0xF000` 1953*c4e8edabSChris Kay 1954*c4e8edabSChris Kay This change was required to accommodate a larger `libfdt` library 1955*c4e8edabSChris Kay 1956*c4e8edabSChris Kay- SCMI 1957*c4e8edabSChris Kay 1958*c4e8edabSChris Kay - Optimized bakery locks when hardware-assisted coherency is enabled using the 1959*c4e8edabSChris Kay `HW_ASSISTED_COHERENCY` build flag 1960*c4e8edabSChris Kay 1961*c4e8edabSChris Kay- SDEI 1962*c4e8edabSChris Kay 1963*c4e8edabSChris Kay - Added support for unconditionally resuming secure world execution after {{ 1964*c4e8edabSChris Kay SDEI }} event processing completes 1965*c4e8edabSChris Kay 1966*c4e8edabSChris Kay {{ SDEI }} interrupts, although targeting EL3, occur on behalf of the 1967*c4e8edabSChris Kay non-secure world, and may have higher priority than secure world interrupts. 1968*c4e8edabSChris Kay Therefore they might preempt secure execution and yield execution to the 1969*c4e8edabSChris Kay non-secure {{ SDEI }} handler. Upon completion of {{ SDEI }} event handling, 1970*c4e8edabSChris Kay resume secure execution if it was preempted. 1971*c4e8edabSChris Kay 1972*c4e8edabSChris Kay- Translation Tables (XLAT) 1973*c4e8edabSChris Kay 1974*c4e8edabSChris Kay - Dynamically detect need for `Common not Private (TTBRn_ELx.CnP)` bit 1975*c4e8edabSChris Kay 1976*c4e8edabSChris Kay Properly handle the case where `ARMv8.2-TTCNP` is implemented in a CPU that 1977*c4e8edabSChris Kay does not implement all mandatory v8.2 features (and so must claim to 1978*c4e8edabSChris Kay implement a lower architecture version). 1979*c4e8edabSChris Kay 1980*c4e8edabSChris Kay### Resolved Issues 1981*c4e8edabSChris Kay 1982*c4e8edabSChris Kay- Architecture 1983*c4e8edabSChris Kay - Incorrect check for SSBS feature detection 1984*c4e8edabSChris Kay - Unintentional register clobber in AArch32 reset_handler function 1985*c4e8edabSChris Kay- Build System 1986*c4e8edabSChris Kay - Dependency issue during DTB image build 1987*c4e8edabSChris Kay - Incorrect variable expansion in Arm platform makefiles 1988*c4e8edabSChris Kay - Building on Windows with verbose mode (`V=1`) enabled is broken 1989*c4e8edabSChris Kay - AArch32 compilation flags is missing `$(march32-directive)` 1990*c4e8edabSChris Kay- BL-Specific Issues 1991*c4e8edabSChris Kay - bl2: `uintptr_t is not defined` error when `BL2_IN_XIP_MEM` is defined 1992*c4e8edabSChris Kay - bl2: Missing prototype warning in `bl2_arch_setup` 1993*c4e8edabSChris Kay - bl31: Omission of Global Offset Table (GOT) section 1994*c4e8edabSChris Kay- Code Quality Issues 1995*c4e8edabSChris Kay - Multiple MISRA compliance issues 1996*c4e8edabSChris Kay - Potential NULL pointer dereference (Coverity-detected) 1997*c4e8edabSChris Kay- Drivers 1998*c4e8edabSChris Kay - mmc: Local declaration of `scr` variable causes a cache issue when 1999*c4e8edabSChris Kay invalidating after the read DMA transfer completes 2000*c4e8edabSChris Kay - mmc: `ACMD41` does not send voltage information during initialization, 2001*c4e8edabSChris Kay resulting in the command being treated as a query. This prevents the command 2002*c4e8edabSChris Kay from initializing the controller. 2003*c4e8edabSChris Kay - mmc: When checking device state using `mmc_device_state()` there are no 2004*c4e8edabSChris Kay retries attempted in the event of an error 2005*c4e8edabSChris Kay - ccn: Incorrect Region ID calculation for RN-I nodes 2006*c4e8edabSChris Kay - console: `Fix MULTI_CONSOLE_API` when used as a crash console 2007*c4e8edabSChris Kay - partition: Improper NULL checking in gpt.c 2008*c4e8edabSChris Kay - partition: Compilation failure in `VERBOSE` mode (`V=1`) 2009*c4e8edabSChris Kay- Library Code 2010*c4e8edabSChris Kay - common: Incorrect check for Address Authentication support 2011*c4e8edabSChris Kay 2012*c4e8edabSChris Kay - xlat: Fix XLAT_V1 / XLAT_V2 incompatibility 2013*c4e8edabSChris Kay 2014*c4e8edabSChris Kay The file `arm_xlat_tables.h` has been renamed to `xlat_tables_compat.h` and 2015*c4e8edabSChris Kay has been moved to a common folder. This header can be used to guarantee 2016*c4e8edabSChris Kay compatibility, as it includes the correct header based on 2017*c4e8edabSChris Kay `XLAT_TABLES_LIB_V2`. 2018*c4e8edabSChris Kay 2019*c4e8edabSChris Kay - xlat: armclang unused-function warning on `xlat_clean_dcache_range` 2020*c4e8edabSChris Kay 2021*c4e8edabSChris Kay - xlat: Invalid `mm_cursor` checks in `mmap_add` and `mmap_add_ctx` 2022*c4e8edabSChris Kay 2023*c4e8edabSChris Kay - sdei: Missing `context.h` header 2024*c4e8edabSChris Kay- Platforms 2025*c4e8edabSChris Kay - common: Missing prototype warning for `plat_log_get_prefix` 2026*c4e8edabSChris Kay 2027*c4e8edabSChris Kay - arm: Insufficient maximum BL33 image size 2028*c4e8edabSChris Kay 2029*c4e8edabSChris Kay - arm: Potential memory corruption during BL2-BL31 transition 2030*c4e8edabSChris Kay 2031*c4e8edabSChris Kay On Arm platforms, the BL2 memory can be overlaid by BL31/BL32. The memory 2032*c4e8edabSChris Kay descriptors describing the list of executable images are created in BL2 R/W 2033*c4e8edabSChris Kay memory, which could be possibly corrupted later on by BL31/BL32 due to 2034*c4e8edabSChris Kay overlay. This patch creates a reserved location in SRAM for these 2035*c4e8edabSChris Kay descriptors and are copied over by BL2 before handing over to next BL image. 2036*c4e8edabSChris Kay 2037*c4e8edabSChris Kay - juno: Invalid behaviour when `CSS_USE_SCMI_SDS_DRIVER` is not set 2038*c4e8edabSChris Kay 2039*c4e8edabSChris Kay In `juno_pm.c` the `css_scmi_override_pm_ops` function was used regardless 2040*c4e8edabSChris Kay of whether the build flag was set. The original behaviour has been restored 2041*c4e8edabSChris Kay in the case where the build flag is not set. 2042*c4e8edabSChris Kay- Tools 2043*c4e8edabSChris Kay - fiptool: Incorrect UUID parsing of blob parameters 2044*c4e8edabSChris Kay - doimage: Incorrect object rules in Makefile 2045*c4e8edabSChris Kay 2046*c4e8edabSChris Kay### Deprecations 2047*c4e8edabSChris Kay 2048*c4e8edabSChris Kay- Common Code 2049*c4e8edabSChris Kay - `plat_crash_console_init` function 2050*c4e8edabSChris Kay - `plat_crash_console_putc` function 2051*c4e8edabSChris Kay - `plat_crash_console_flush` function 2052*c4e8edabSChris Kay - `finish_console_register` macro 2053*c4e8edabSChris Kay- AArch64-specific Code 2054*c4e8edabSChris Kay - helpers: `get_afflvl_shift` 2055*c4e8edabSChris Kay - helpers: `mpidr_mask_lower_afflvls` 2056*c4e8edabSChris Kay - helpers: `eret` 2057*c4e8edabSChris Kay- Secure Partition Manager (SPM) 2058*c4e8edabSChris Kay - Boot-info structure 2059*c4e8edabSChris Kay 2060*c4e8edabSChris Kay### Known Issues 2061*c4e8edabSChris Kay 2062*c4e8edabSChris Kay- Build System Issues 2063*c4e8edabSChris Kay - dtb: DTB creation not supported when building on a Windows host. 2064*c4e8edabSChris Kay 2065*c4e8edabSChris Kay This step in the build process is skipped when running on a Windows host. A 2066*c4e8edabSChris Kay known issue from the 1.6 release. 2067*c4e8edabSChris Kay- Platform Issues 2068*c4e8edabSChris Kay - arm/juno: System suspend from Linux does not function as documented in the 2069*c4e8edabSChris Kay user guide 2070*c4e8edabSChris Kay 2071*c4e8edabSChris Kay Following the instructions provided in the user guide document does not 2072*c4e8edabSChris Kay result in the platform entering system suspend state as expected. A message 2073*c4e8edabSChris Kay relating to the hdlcd driver failing to suspend will be emitted on the Linux 2074*c4e8edabSChris Kay terminal. 2075*c4e8edabSChris Kay 2076*c4e8edabSChris Kay - arm/juno: The firmware update use-cases do not work with motherboard 2077*c4e8edabSChris Kay firmware version \< v1.5.0 (the reset reason is not preserved). The Linaro 2078*c4e8edabSChris Kay 18.04 release has MB v1.4.9. The MB v1.5.0 is available in Linaro 18.10 2079*c4e8edabSChris Kay release. 2080*c4e8edabSChris Kay 2081*c4e8edabSChris Kay - mediatek/mt6795: This platform does not build in this release 2082*c4e8edabSChris Kay 2083*c4e8edabSChris Kay## 2.0 (2018-10-02) 2084*c4e8edabSChris Kay 2085*c4e8edabSChris Kay### New Features 2086*c4e8edabSChris Kay 2087*c4e8edabSChris Kay- Removal of a number of deprecated APIs 2088*c4e8edabSChris Kay 2089*c4e8edabSChris Kay - A new Platform Compatibility Policy document has been created which 2090*c4e8edabSChris Kay references a wiki page that maintains a listing of deprecated interfaces and 2091*c4e8edabSChris Kay the release after which they will be removed. 2092*c4e8edabSChris Kay - All deprecated interfaces except the MULTI_CONSOLE_API have been removed 2093*c4e8edabSChris Kay from the code base. 2094*c4e8edabSChris Kay - Various Arm and partner platforms have been updated to remove the use of 2095*c4e8edabSChris Kay removed APIs in this release. 2096*c4e8edabSChris Kay - This release is otherwise unchanged from 1.6 release 2097*c4e8edabSChris Kay 2098*c4e8edabSChris Kay### Issues resolved since last release 2099*c4e8edabSChris Kay 2100*c4e8edabSChris Kay- No issues known at 1.6 release resolved in 2.0 release 2101*c4e8edabSChris Kay 2102*c4e8edabSChris Kay### Known Issues 2103*c4e8edabSChris Kay 2104*c4e8edabSChris Kay- DTB creation not supported when building on a Windows host. This step in the 2105*c4e8edabSChris Kay build process is skipped when running on a Windows host. Known issue from 1.6 2106*c4e8edabSChris Kay version. 2107*c4e8edabSChris Kay- As a result of removal of deprecated interfaces the Nvidia Tegra, Marvell 2108*c4e8edabSChris Kay Armada 8K and MediaTek MT6795 platforms do not build in this release. Also 2109*c4e8edabSChris Kay MediaTek MT8173, NXP QorIQ LS1043A, NXP i.MX8QX, NXP i.MX8QMa, Rockchip 2110*c4e8edabSChris Kay RK3328, Rockchip RK3368 and Rockchip RK3399 platforms have not been confirmed 2111*c4e8edabSChris Kay to be working after the removal of the deprecated interfaces although they do 2112*c4e8edabSChris Kay build. 2113*c4e8edabSChris Kay 2114*c4e8edabSChris Kay## 1.6 (2018-09-21) 2115*c4e8edabSChris Kay 2116*c4e8edabSChris Kay### New Features 2117*c4e8edabSChris Kay 2118*c4e8edabSChris Kay- Addressing Speculation Security Vulnerabilities 2119*c4e8edabSChris Kay 2120*c4e8edabSChris Kay - Implement static workaround for CVE-2018-3639 for AArch32 and AArch64 2121*c4e8edabSChris Kay - Add support for dynamic mitigation for CVE-2018-3639 2122*c4e8edabSChris Kay - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76 2123*c4e8edabSChris Kay - Ensure {{ SDEI }} handler executes with CVE-2018-3639 mitigation enabled 2124*c4e8edabSChris Kay 2125*c4e8edabSChris Kay- Introduce RAS handling on AArch64 2126*c4e8edabSChris Kay 2127*c4e8edabSChris Kay - Some RAS extensions are mandatory for Armv8.2 CPUs, with others mandatory 2128*c4e8edabSChris Kay for Armv8.4 CPUs however, all extensions are also optional extensions to the 2129*c4e8edabSChris Kay base Armv8.0 architecture. 2130*c4e8edabSChris Kay - The Armv8 RAS Extensions introduced Standard Error Records which are a set 2131*c4e8edabSChris Kay of standard registers to configure RAS node policy and allow RAS Nodes to 2132*c4e8edabSChris Kay record and expose error information for error handling agents. 2133*c4e8edabSChris Kay - Capabilities are provided to support RAS Node enumeration and iteration 2134*c4e8edabSChris Kay along with individual interrupt registrations and fault injections support. 2135*c4e8edabSChris Kay - Introduce handlers for Uncontainable errors, Double Faults and EL3 External 2136*c4e8edabSChris Kay Aborts 2137*c4e8edabSChris Kay 2138*c4e8edabSChris Kay- Enable Memory Partitioning And Monitoring (MPAM) for lower EL's 2139*c4e8edabSChris Kay 2140*c4e8edabSChris Kay - Memory Partitioning And Monitoring is an Armv8.4 feature that enables 2141*c4e8edabSChris Kay various memory system components and resources to define partitions. 2142*c4e8edabSChris Kay Software running at various ELs can then assign themselves to the desired 2143*c4e8edabSChris Kay partition to control their performance aspects. 2144*c4e8edabSChris Kay - When ENABLE_MPAM_FOR_LOWER_ELS is set to 1, EL3 allows lower ELs to access 2145*c4e8edabSChris Kay their own MPAM registers without trapping to EL3. This patch however, 2146*c4e8edabSChris Kay doesn't make use of partitioning in EL3; platform initialisation code should 2147*c4e8edabSChris Kay configure and use partitions in EL3 if required. 2148*c4e8edabSChris Kay 2149*c4e8edabSChris Kay- Introduce ROM Lib Feature 2150*c4e8edabSChris Kay 2151*c4e8edabSChris Kay - Support combining several libraries into a self-called "romlib" image, that 2152*c4e8edabSChris Kay may be shared across images to reduce memory footprint. The romlib image is 2153*c4e8edabSChris Kay stored in ROM but is accessed through a jump-table that may be stored in 2154*c4e8edabSChris Kay read-write memory, allowing for the library code to be patched. 2155*c4e8edabSChris Kay 2156*c4e8edabSChris Kay- Introduce Backtrace Feature 2157*c4e8edabSChris Kay 2158*c4e8edabSChris Kay - This function displays the backtrace, the current EL and security state to 2159*c4e8edabSChris Kay allow a post-processing tool to choose the right binary to interpret the 2160*c4e8edabSChris Kay dump. 2161*c4e8edabSChris Kay - Print backtrace in assert() and panic() to the console. 2162*c4e8edabSChris Kay 2163*c4e8edabSChris Kay- Code hygiene changes and alignment with MISRA C-2012 guideline with fixes 2164*c4e8edabSChris Kay addressing issues complying to the following rules: 2165*c4e8edabSChris Kay 2166*c4e8edabSChris Kay - MISRA rules 4.9, 5.1, 5.3, 5.7, 8.2-8.5, 8.8, 8.13, 9.3, 10.1, 10.3-10.4, 2167*c4e8edabSChris Kay 10.8, 11.3, 11.6, 12.1, 14.4, 15.7, 16.1-16.7, 17.7-17.8, 20.7, 20.10, 2168*c4e8edabSChris Kay 20.12, 21.1, 21.15, 22.7 2169*c4e8edabSChris Kay - Clean up the usage of void pointers to access symbols 2170*c4e8edabSChris Kay - Increase usage of static qualifier to locally used functions and data 2171*c4e8edabSChris Kay - Migrated to use of u_register_t for register read/write to better match 2172*c4e8edabSChris Kay AArch32 and AArch64 type sizes 2173*c4e8edabSChris Kay - Use int-ll64 for both AArch32 and AArch64 to assist in consistent format 2174*c4e8edabSChris Kay strings between architectures 2175*c4e8edabSChris Kay - Clean up TF-A libc by removing non arm copyrighted implementations and 2176*c4e8edabSChris Kay replacing them with modified FreeBSD and SCC implementations 2177*c4e8edabSChris Kay 2178*c4e8edabSChris Kay- Various changes to support Clang linker and assembler 2179*c4e8edabSChris Kay 2180*c4e8edabSChris Kay - The clang assembler/preprocessor is used when Clang is selected. However, 2181*c4e8edabSChris Kay the clang linker is not used because it is unable to link TF-A objects due 2182*c4e8edabSChris Kay to immaturity of clang linker functionality at this time. 2183*c4e8edabSChris Kay 2184*c4e8edabSChris Kay- Refactor support APIs into Libraries 2185*c4e8edabSChris Kay 2186*c4e8edabSChris Kay - Evolve libfdt, mbed TLS library and standard C library sources as proper 2187*c4e8edabSChris Kay libraries that TF-A may be linked against. 2188*c4e8edabSChris Kay 2189*c4e8edabSChris Kay- CPU Enhancements 2190*c4e8edabSChris Kay 2191*c4e8edabSChris Kay - Add CPU support for Cortex-Ares and Cortex-A76 2192*c4e8edabSChris Kay - Add AMU support for Cortex-Ares 2193*c4e8edabSChris Kay - Add initial CPU support for Cortex-Deimos 2194*c4e8edabSChris Kay - Add initial CPU support for Cortex-Helios 2195*c4e8edabSChris Kay - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76 2196*c4e8edabSChris Kay - Implement Cortex-Ares erratum 1043202 workaround 2197*c4e8edabSChris Kay - Implement DSU erratum 936184 workaround 2198*c4e8edabSChris Kay - Check presence of fix for errata 843419 in Cortex-A53 2199*c4e8edabSChris Kay - Check presence of fix for errata 835769 in Cortex-A53 2200*c4e8edabSChris Kay 2201*c4e8edabSChris Kay- Translation Tables Enhancements 2202*c4e8edabSChris Kay 2203*c4e8edabSChris Kay - The xlat v2 library has been refactored in order to be reused by different 2204*c4e8edabSChris Kay TF components at different EL's including the addition of EL2. Some 2205*c4e8edabSChris Kay refactoring to make the code more generic and less specific to TF, in order 2206*c4e8edabSChris Kay to reuse the library outside of this project. 2207*c4e8edabSChris Kay 2208*c4e8edabSChris Kay- SPM Enhancements 2209*c4e8edabSChris Kay 2210*c4e8edabSChris Kay - General cleanups and refactoring to pave the way to multiple partitions 2211*c4e8edabSChris Kay support 2212*c4e8edabSChris Kay 2213*c4e8edabSChris Kay- SDEI Enhancements 2214*c4e8edabSChris Kay 2215*c4e8edabSChris Kay - Allow platforms to define explicit events 2216*c4e8edabSChris Kay - Determine client EL from NS context's SCR_EL3 2217*c4e8edabSChris Kay - Make dispatches synchronous 2218*c4e8edabSChris Kay - Introduce jump primitives for BL31 2219*c4e8edabSChris Kay - Mask events after CPU wakeup in {{ SDEI }} dispatcher to conform to the 2220*c4e8edabSChris Kay specification 2221*c4e8edabSChris Kay 2222*c4e8edabSChris Kay- Misc TF-A Core Common Code Enhancements 2223*c4e8edabSChris Kay 2224*c4e8edabSChris Kay - Add support for eXecute In Place (XIP) memory in BL2 2225*c4e8edabSChris Kay - Add support for the SMC Calling Convention 2.0 2226*c4e8edabSChris Kay - Introduce External Abort handling on AArch64 External Abort routed to EL3 2227*c4e8edabSChris Kay was reported as an unhandled exception and caused a panic. This change 2228*c4e8edabSChris Kay enables Trusted Firmware-A to handle External Aborts routed to EL3. 2229*c4e8edabSChris Kay - Save value of ACTLR_EL1 implementation-defined register in the CPU context 2230*c4e8edabSChris Kay structure rather than forcing it to 0. 2231*c4e8edabSChris Kay - Introduce ARM_LINUX_KERNEL_AS_BL33 build option, which allows BL31 to 2232*c4e8edabSChris Kay directly jump to a Linux kernel. This makes for a quicker and simpler boot 2233*c4e8edabSChris Kay flow, which might be useful in some test environments. 2234*c4e8edabSChris Kay - Add dynamic configurations for BL31, BL32 and BL33 enabling support for 2235*c4e8edabSChris Kay Chain of Trust (COT). 2236*c4e8edabSChris Kay - Make TF UUID RFC 4122 compliant 2237*c4e8edabSChris Kay 2238*c4e8edabSChris Kay- New Platform Support 2239*c4e8edabSChris Kay 2240*c4e8edabSChris Kay - Arm SGI-575 2241*c4e8edabSChris Kay - Arm SGM-775 2242*c4e8edabSChris Kay - Allwinner sun50i_64 2243*c4e8edabSChris Kay - Allwinner sun50i_h6 2244*c4e8edabSChris Kay - NXP QorIQ LS1043A 2245*c4e8edabSChris Kay - NXP i.MX8QX 2246*c4e8edabSChris Kay - NXP i.MX8QM 2247*c4e8edabSChris Kay - NXP i.MX7Solo WaRP7 2248*c4e8edabSChris Kay - TI K3 2249*c4e8edabSChris Kay - Socionext Synquacer SC2A11 2250*c4e8edabSChris Kay - Marvell Armada 8K 2251*c4e8edabSChris Kay - STMicroelectronics STM32MP1 2252*c4e8edabSChris Kay 2253*c4e8edabSChris Kay- Misc Generic Platform Common Code Enhancements 2254*c4e8edabSChris Kay 2255*c4e8edabSChris Kay - Add MMC framework that supports both eMMC and SD card devices 2256*c4e8edabSChris Kay 2257*c4e8edabSChris Kay- Misc Arm Platform Common Code Enhancements 2258*c4e8edabSChris Kay 2259*c4e8edabSChris Kay - Demonstrate PSCI MEM_PROTECT from el3_runtime 2260*c4e8edabSChris Kay - Provide RAS support 2261*c4e8edabSChris Kay - Migrate AArch64 port to the multi console driver. The old API is deprecated 2262*c4e8edabSChris Kay and will eventually be removed. 2263*c4e8edabSChris Kay - Move BL31 below BL2 to enable BL2 overlay resulting in changes in the layout 2264*c4e8edabSChris Kay of BL images in memory to enable more efficient use of available space. 2265*c4e8edabSChris Kay - Add cpp build processing for dtb that allows processing device tree with 2266*c4e8edabSChris Kay external includes. 2267*c4e8edabSChris Kay - Extend FIP io driver to support multiple FIP devices 2268*c4e8edabSChris Kay - Add support for SCMI AP core configuration protocol v1.0 2269*c4e8edabSChris Kay - Use SCMI AP core protocol to set the warm boot entrypoint 2270*c4e8edabSChris Kay - Add support to Mbed TLS drivers for shared heap among different BL images to 2271*c4e8edabSChris Kay help optimise memory usage 2272*c4e8edabSChris Kay - Enable non-secure access to UART1 through a build option to support a serial 2273*c4e8edabSChris Kay debug port for debugger connection 2274*c4e8edabSChris Kay 2275*c4e8edabSChris Kay- Enhancements for Arm Juno Platform 2276*c4e8edabSChris Kay 2277*c4e8edabSChris Kay - Add support for TrustZone Media Protection 1 (TZMP1) 2278*c4e8edabSChris Kay 2279*c4e8edabSChris Kay- Enhancements for Arm FVP Platform 2280*c4e8edabSChris Kay 2281*c4e8edabSChris Kay - Dynamic_config: remove the FVP dtb files 2282*c4e8edabSChris Kay - Set DYNAMIC_WORKAROUND_CVE_2018_3639=1 on FVP by default 2283*c4e8edabSChris Kay - Set the ability to dynamically disable Trusted Boot Board authentication to 2284*c4e8edabSChris Kay be off by default with DYN_DISABLE_AUTH 2285*c4e8edabSChris Kay - Add librom enhancement support in FVP 2286*c4e8edabSChris Kay - Support shared Mbed TLS heap between BL1 and BL2 that allow a reduction in 2287*c4e8edabSChris Kay BL2 size for FVP 2288*c4e8edabSChris Kay 2289*c4e8edabSChris Kay- Enhancements for Arm SGI/SGM Platform 2290*c4e8edabSChris Kay 2291*c4e8edabSChris Kay - Enable ARM_PLAT_MT flag for SGI-575 2292*c4e8edabSChris Kay - Add dts files to enable support for dynamic config 2293*c4e8edabSChris Kay - Add RAS support 2294*c4e8edabSChris Kay - Support shared Mbed TLS heap for SGI and SGM between BL1 and BL2 2295*c4e8edabSChris Kay 2296*c4e8edabSChris Kay- Enhancements for Non Arm Platforms 2297*c4e8edabSChris Kay 2298*c4e8edabSChris Kay - Raspberry Pi Platform 2299*c4e8edabSChris Kay - Hikey Platforms 2300*c4e8edabSChris Kay - Xilinx Platforms 2301*c4e8edabSChris Kay - QEMU Platform 2302*c4e8edabSChris Kay - Rockchip rk3399 Platform 2303*c4e8edabSChris Kay - TI Platforms 2304*c4e8edabSChris Kay - Socionext Platforms 2305*c4e8edabSChris Kay - Allwinner Platforms 2306*c4e8edabSChris Kay - NXP Platforms 2307*c4e8edabSChris Kay - NVIDIA Tegra Platform 2308*c4e8edabSChris Kay - Marvell Platforms 2309*c4e8edabSChris Kay - STMicroelectronics STM32MP1 Platform 2310*c4e8edabSChris Kay 2311*c4e8edabSChris Kay### Issues resolved since last release 2312*c4e8edabSChris Kay 2313*c4e8edabSChris Kay- No issues known at 1.5 release resolved in 1.6 release 2314*c4e8edabSChris Kay 2315*c4e8edabSChris Kay### Known Issues 2316*c4e8edabSChris Kay 2317*c4e8edabSChris Kay- DTB creation not supported when building on a Windows host. This step in the 2318*c4e8edabSChris Kay build process is skipped when running on a Windows host. Known issue from 1.5 2319*c4e8edabSChris Kay version. 2320*c4e8edabSChris Kay 2321*c4e8edabSChris Kay## 1.5 (2018-03-20) 2322*c4e8edabSChris Kay 2323*c4e8edabSChris Kay### New features 2324*c4e8edabSChris Kay 2325*c4e8edabSChris Kay- Added new firmware support to enable RAS (Reliability, Availability, and 2326*c4e8edabSChris Kay Serviceability) functionality. 2327*c4e8edabSChris Kay 2328*c4e8edabSChris Kay - Secure Partition Manager (SPM): A Secure Partition is a software execution 2329*c4e8edabSChris Kay environment instantiated in S-EL0 that can be used to implement simple 2330*c4e8edabSChris Kay management and security services. The SPM is the firmware component that is 2331*c4e8edabSChris Kay responsible for managing a Secure Partition. 2332*c4e8edabSChris Kay 2333*c4e8edabSChris Kay - SDEI dispatcher: Support for interrupt-based {{ SDEI }} events and all 2334*c4e8edabSChris Kay interfaces as defined by the {{ SDEI }} specification v1.0, see 2335*c4e8edabSChris Kay [SDEI Specification] 2336*c4e8edabSChris Kay 2337*c4e8edabSChris Kay - Exception Handling Framework (EHF): Framework that allows dispatching of EL3 2338*c4e8edabSChris Kay interrupts to their registered handlers which are registered based on their 2339*c4e8edabSChris Kay priorities. Facilitates firmware-first error handling policy where 2340*c4e8edabSChris Kay asynchronous exceptions may be routed to EL3. 2341*c4e8edabSChris Kay 2342*c4e8edabSChris Kay Integrated the TSPD with EHF. 2343*c4e8edabSChris Kay 2344*c4e8edabSChris Kay- Updated PSCI support: 2345*c4e8edabSChris Kay 2346*c4e8edabSChris Kay - Implemented PSCI v1.1 optional features `MEM_PROTECT` and `SYSTEM_RESET2`. 2347*c4e8edabSChris Kay The supported PSCI version was updated to v1.1. 2348*c4e8edabSChris Kay 2349*c4e8edabSChris Kay - Improved PSCI STAT timestamp collection, including moving accounting for 2350*c4e8edabSChris Kay retention states to be inside the locks and fixing handling of wrap-around 2351*c4e8edabSChris Kay when calculating residency in AArch32 execution state. 2352*c4e8edabSChris Kay 2353*c4e8edabSChris Kay - Added optional handler for early suspend that executes when suspending to a 2354*c4e8edabSChris Kay power-down state and with data caches enabled. 2355*c4e8edabSChris Kay 2356*c4e8edabSChris Kay This may provide a performance improvement on platforms where it is safe to 2357*c4e8edabSChris Kay perform some or all of the platform actions from `pwr_domain_suspend` with 2358*c4e8edabSChris Kay the data caches enabled. 2359*c4e8edabSChris Kay 2360*c4e8edabSChris Kay- Enabled build option, BL2_AT_EL3, for BL2 to allow execution at EL3 without 2361*c4e8edabSChris Kay any dependency on TF BL1. 2362*c4e8edabSChris Kay 2363*c4e8edabSChris Kay This allows platforms which already have a non-TF Boot ROM to directly load 2364*c4e8edabSChris Kay and execute BL2 and subsequent BL stages without need for BL1. This was not 2365*c4e8edabSChris Kay previously possible because BL2 executes at S-EL1 and cannot jump straight to 2366*c4e8edabSChris Kay EL3. 2367*c4e8edabSChris Kay 2368*c4e8edabSChris Kay- Implemented support for SMCCC v1.1, including `SMCCC_VERSION` and 2369*c4e8edabSChris Kay `SMCCC_ARCH_FEATURES`. 2370*c4e8edabSChris Kay 2371*c4e8edabSChris Kay Additionally, added support for `SMCCC_VERSION` in PSCI features to enable 2372*c4e8edabSChris Kay discovery of the SMCCC version via PSCI feature call. 2373*c4e8edabSChris Kay 2374*c4e8edabSChris Kay- Added Dynamic Configuration framework which enables each of the boot loader 2375*c4e8edabSChris Kay stages to be dynamically configured at runtime if required by the platform. 2376*c4e8edabSChris Kay The boot loader stage may optionally specify a firmware configuration file 2377*c4e8edabSChris Kay and/or hardware configuration file that can then be shared with the next boot 2378*c4e8edabSChris Kay loader stage. 2379*c4e8edabSChris Kay 2380*c4e8edabSChris Kay Introduced a new BL handover interface that essentially allows passing of 4 2381*c4e8edabSChris Kay arguments between the different BL stages. 2382*c4e8edabSChris Kay 2383*c4e8edabSChris Kay Updated cert_create and fip_tool to support the dynamic configuration files. 2384*c4e8edabSChris Kay The COT also updated to support these new files. 2385*c4e8edabSChris Kay 2386*c4e8edabSChris Kay- Code hygiene changes and alignment with MISRA guideline: 2387*c4e8edabSChris Kay 2388*c4e8edabSChris Kay - Fix use of undefined macros. 2389*c4e8edabSChris Kay - Achieved compliance with Mandatory MISRA coding rules. 2390*c4e8edabSChris Kay - Achieved compliance for following Required MISRA rules for the default build 2391*c4e8edabSChris Kay configurations on FVP and Juno platforms : 7.3, 8.3, 8.4, 8.5 and 8.8. 2392*c4e8edabSChris Kay 2393*c4e8edabSChris Kay- Added support for Armv8.2-A architectural features: 2394*c4e8edabSChris Kay 2395*c4e8edabSChris Kay - Updated translation table set-up to set the CnP (Common not Private) bit for 2396*c4e8edabSChris Kay secure page tables so that multiple PEs in the same Inner Shareable domain 2397*c4e8edabSChris Kay can use the same translation table entries for a given stage of translation 2398*c4e8edabSChris Kay in a particular translation regime. 2399*c4e8edabSChris Kay - Extended the supported values of ID_AA64MMFR0_EL1.PARange to include the 2400*c4e8edabSChris Kay 52-bit Physical Address range. 2401*c4e8edabSChris Kay - Added support for the Scalable Vector Extension to allow Normal world 2402*c4e8edabSChris Kay software to access SVE functionality but disable access to SVE, SIMD and 2403*c4e8edabSChris Kay floating point functionality from the Secure world in order to prevent 2404*c4e8edabSChris Kay corruption of the Z-registers. 2405*c4e8edabSChris Kay 2406*c4e8edabSChris Kay- Added support for Armv8.4-A architectural feature Activity Monitor Unit (AMU) 2407*c4e8edabSChris Kay 2408*c4e8edabSChris Kay extensions. 2409*c4e8edabSChris Kay 2410*c4e8edabSChris Kay In addition to the v8.4 architectural extension, AMU support on Cortex-A75 was 2411*c4e8edabSChris Kay implemented. 2412*c4e8edabSChris Kay 2413*c4e8edabSChris Kay- Enhanced OP-TEE support to enable use of pageable OP-TEE image. The Arm 2414*c4e8edabSChris Kay standard platforms are updated to load up to 3 images for OP-TEE; header, 2415*c4e8edabSChris Kay pager image and paged image. 2416*c4e8edabSChris Kay 2417*c4e8edabSChris Kay The chain of trust is extended to support the additional images. 2418*c4e8edabSChris Kay 2419*c4e8edabSChris Kay- Enhancements to the translation table library: 2420*c4e8edabSChris Kay 2421*c4e8edabSChris Kay - Introduced APIs to get and set the memory attributes of a region. 2422*c4e8edabSChris Kay - Added support to manage both privilege levels in translation regimes that 2423*c4e8edabSChris Kay describe translations for 2 Exception levels, specifically the EL1&0 2424*c4e8edabSChris Kay translation regime, and extended the memory map region attributes to include 2425*c4e8edabSChris Kay specifying Non-privileged access. 2426*c4e8edabSChris Kay - Added support to specify the granularity of the mappings of each region, for 2427*c4e8edabSChris Kay instance a 2MB region can be specified to be mapped with 4KB page tables 2428*c4e8edabSChris Kay instead of a 2MB block. 2429*c4e8edabSChris Kay - Disabled the higher VA range to avoid unpredictable behaviour if there is an 2430*c4e8edabSChris Kay attempt to access addresses in the higher VA range. 2431*c4e8edabSChris Kay - Added helpers for Device and Normal memory MAIR encodings that align with 2432*c4e8edabSChris Kay the Arm Architecture Reference Manual for Armv8-A (Arm DDI0487B.b). 2433*c4e8edabSChris Kay - Code hygiene including fixing type length and signedness of constants, 2434*c4e8edabSChris Kay refactoring of function to enable the MMU, removing all instances where the 2435*c4e8edabSChris Kay virtual address space is hardcoded and added comments that document 2436*c4e8edabSChris Kay alignment needed between memory attributes and attributes specified in 2437*c4e8edabSChris Kay TCR_ELx. 2438*c4e8edabSChris Kay 2439*c4e8edabSChris Kay- Updated GIC support: 2440*c4e8edabSChris Kay 2441*c4e8edabSChris Kay - Introduce new APIs for GICv2 and GICv3 that provide the capability to 2442*c4e8edabSChris Kay specify interrupt properties rather than list of interrupt numbers alone. 2443*c4e8edabSChris Kay The Arm platforms and other upstream platforms are migrated to use interrupt 2444*c4e8edabSChris Kay properties. 2445*c4e8edabSChris Kay 2446*c4e8edabSChris Kay - Added helpers to save / restore the GICv3 context, specifically the 2447*c4e8edabSChris Kay Distributor and Redistributor contexts and architectural parts of the ITS 2448*c4e8edabSChris Kay power management. The Distributor and Redistributor helpers also support the 2449*c4e8edabSChris Kay implementation-defined part of GIC-500 and GIC-600. 2450*c4e8edabSChris Kay 2451*c4e8edabSChris Kay Updated the Arm FVP platform to save / restore the GICv3 context on system 2452*c4e8edabSChris Kay suspend / resume as an example of how to use the helpers. 2453*c4e8edabSChris Kay 2454*c4e8edabSChris Kay Introduced a new TZC secured DDR carve-out for use by Arm platforms for 2455*c4e8edabSChris Kay storing EL3 runtime data such as the GICv3 register context. 2456*c4e8edabSChris Kay 2457*c4e8edabSChris Kay- Added support for Armv7-A architecture via build option ARM_ARCH_MAJOR=7. This 2458*c4e8edabSChris Kay includes following features: 2459*c4e8edabSChris Kay 2460*c4e8edabSChris Kay - Updates GICv2 driver to manage GICv1 with security extensions. 2461*c4e8edabSChris Kay - Software implementation for 32bit division. 2462*c4e8edabSChris Kay - Enabled use of generic timer for platforms that do not set 2463*c4e8edabSChris Kay ARM_CORTEX_Ax=yes. 2464*c4e8edabSChris Kay - Support for Armv7-A Virtualization extensions \[DDI0406C_C\]. 2465*c4e8edabSChris Kay - Support for both Armv7-A platforms that only have 32-bit addressing and 2466*c4e8edabSChris Kay Armv7-A platforms that support large page addressing. 2467*c4e8edabSChris Kay - Included support for following Armv7 CPUs: Cortex-A12, Cortex-A17, 2468*c4e8edabSChris Kay Cortex-A7, Cortex-A5, Cortex-A9, Cortex-A15. 2469*c4e8edabSChris Kay - Added support in QEMU for Armv7-A/Cortex-A15. 2470*c4e8edabSChris Kay 2471*c4e8edabSChris Kay- Enhancements to Firmware Update feature: 2472*c4e8edabSChris Kay 2473*c4e8edabSChris Kay - Updated the FWU documentation to describe the additional images needed for 2474*c4e8edabSChris Kay Firmware update, and how they are used for both the Juno platform and the 2475*c4e8edabSChris Kay Arm FVP platforms. 2476*c4e8edabSChris Kay 2477*c4e8edabSChris Kay- Enhancements to Trusted Board Boot feature: 2478*c4e8edabSChris Kay 2479*c4e8edabSChris Kay - Added support to cert_create tool for RSA PKCS1# v1.5 and SHA384, SHA512 and 2480*c4e8edabSChris Kay SHA256. 2481*c4e8edabSChris Kay - For Arm platforms added support to use ECDSA keys. 2482*c4e8edabSChris Kay - Enhanced the mbed TLS wrapper layer to include support for both RSA and 2483*c4e8edabSChris Kay ECDSA to enable runtime selection between RSA and ECDSA keys. 2484*c4e8edabSChris Kay 2485*c4e8edabSChris Kay- Added support for secure interrupt handling in AArch32 sp_min, hardcoded to 2486*c4e8edabSChris Kay only handle FIQs. 2487*c4e8edabSChris Kay 2488*c4e8edabSChris Kay- Added support to allow a platform to load images from multiple boot sources, 2489*c4e8edabSChris Kay for example from a second flash drive. 2490*c4e8edabSChris Kay 2491*c4e8edabSChris Kay- Added a logging framework that allows platforms to reduce the logging level at 2492*c4e8edabSChris Kay runtime and additionally the prefix string can be defined by the platform. 2493*c4e8edabSChris Kay 2494*c4e8edabSChris Kay- Further improvements to register initialisation: 2495*c4e8edabSChris Kay 2496*c4e8edabSChris Kay - Control register PMCR_EL0 / PMCR is set to prohibit cycle counting in the 2497*c4e8edabSChris Kay secure world. This register is added to the list of registers that are saved 2498*c4e8edabSChris Kay and restored during world switch. 2499*c4e8edabSChris Kay - When EL3 is running in AArch32 execution state, the Non-secure version of 2500*c4e8edabSChris Kay SCTLR is explicitly initialised during the warmboot flow rather than relying 2501*c4e8edabSChris Kay on the hardware to set the correct reset values. 2502*c4e8edabSChris Kay 2503*c4e8edabSChris Kay- Enhanced support for Arm platforms: 2504*c4e8edabSChris Kay 2505*c4e8edabSChris Kay - Introduced driver for Shared-Data-Structure (SDS) framework which is used 2506*c4e8edabSChris Kay for communication between SCP and the AP CPU, replacing Boot-Over_MHU (BOM) 2507*c4e8edabSChris Kay protocol. 2508*c4e8edabSChris Kay 2509*c4e8edabSChris Kay The Juno platform is migrated to use SDS with the SCMI support added in v1.3 2510*c4e8edabSChris Kay and is set as default. 2511*c4e8edabSChris Kay 2512*c4e8edabSChris Kay The driver can be found in the plat/arm/css/drivers folder. 2513*c4e8edabSChris Kay 2514*c4e8edabSChris Kay - Improved memory usage by only mapping TSP memory region when the TSPD has 2515*c4e8edabSChris Kay been included in the build. This reduces the memory footprint and avoids 2516*c4e8edabSChris Kay unnecessary memory being mapped. 2517*c4e8edabSChris Kay 2518*c4e8edabSChris Kay - Updated support for multi-threading CPUs for FVP platforms - always check 2519*c4e8edabSChris Kay the MT field in MPDIR and access the bit fields accordingly. 2520*c4e8edabSChris Kay 2521*c4e8edabSChris Kay - Support building for platforms that model DynamIQ configuration by 2522*c4e8edabSChris Kay implementing all CPUs in a single cluster. 2523*c4e8edabSChris Kay 2524*c4e8edabSChris Kay - Improved nor flash driver, for instance clearing status registers before 2525*c4e8edabSChris Kay sending commands. Driver can be found plat/arm/board/common folder. 2526*c4e8edabSChris Kay 2527*c4e8edabSChris Kay- Enhancements to QEMU platform: 2528*c4e8edabSChris Kay 2529*c4e8edabSChris Kay - Added support for TBB. 2530*c4e8edabSChris Kay - Added support for using OP-TEE pageable image. 2531*c4e8edabSChris Kay - Added support for LOAD_IMAGE_V2. 2532*c4e8edabSChris Kay - Migrated to use translation table library v2 by default. 2533*c4e8edabSChris Kay - Added support for SEPARATE_CODE_AND_RODATA. 2534*c4e8edabSChris Kay 2535*c4e8edabSChris Kay- Applied workarounds CVE-2017-5715 on Arm Cortex-A57, -A72, -A73 and -A75, and 2536*c4e8edabSChris Kay for Armv7-A CPUs Cortex-A9, -A15 and -A17. 2537*c4e8edabSChris Kay 2538*c4e8edabSChris Kay- Applied errata workaround for Arm Cortex-A57: 859972. 2539*c4e8edabSChris Kay 2540*c4e8edabSChris Kay- Applied errata workaround for Arm Cortex-A72: 859971. 2541*c4e8edabSChris Kay 2542*c4e8edabSChris Kay- Added support for Poplar 96Board platform. 2543*c4e8edabSChris Kay 2544*c4e8edabSChris Kay- Added support for Raspberry Pi 3 platform. 2545*c4e8edabSChris Kay 2546*c4e8edabSChris Kay- Added Call Frame Information (CFI) assembler directives to the vector entries 2547*c4e8edabSChris Kay which enables debuggers to display the backtrace of functions that triggered a 2548*c4e8edabSChris Kay synchronous abort. 2549*c4e8edabSChris Kay 2550*c4e8edabSChris Kay- Added ability to build dtb. 2551*c4e8edabSChris Kay 2552*c4e8edabSChris Kay- Added support for pre-tool (cert_create and fiptool) image processing enabling 2553*c4e8edabSChris Kay compression of the image files before processing by cert_create and fiptool. 2554*c4e8edabSChris Kay 2555*c4e8edabSChris Kay This can reduce fip size and may also speed up loading of images. The image 2556*c4e8edabSChris Kay verification will also get faster because certificates are generated based on 2557*c4e8edabSChris Kay compressed images. 2558*c4e8edabSChris Kay 2559*c4e8edabSChris Kay Imported zlib 1.2.11 to implement gunzip() for data compression. 2560*c4e8edabSChris Kay 2561*c4e8edabSChris Kay- Enhancements to fiptool: 2562*c4e8edabSChris Kay 2563*c4e8edabSChris Kay - Enabled the fiptool to be built using Visual Studio. 2564*c4e8edabSChris Kay - Added padding bytes at the end of the last image in the fip to be facilitate 2565*c4e8edabSChris Kay transfer by DMA. 2566*c4e8edabSChris Kay 2567*c4e8edabSChris Kay### Issues resolved since last release 2568*c4e8edabSChris Kay 2569*c4e8edabSChris Kay- TF-A can be built with optimisations disabled (-O0). 2570*c4e8edabSChris Kay- Memory layout updated to enable Trusted Board Boot on Juno platform when 2571*c4e8edabSChris Kay running TF-A in AArch32 execution mode (resolving [tf-issue#501]). 2572*c4e8edabSChris Kay 2573*c4e8edabSChris Kay### Known Issues 2574*c4e8edabSChris Kay 2575*c4e8edabSChris Kay- DTB creation not supported when building on a Windows host. This step in the 2576*c4e8edabSChris Kay build process is skipped when running on a Windows host. 2577*c4e8edabSChris Kay 2578*c4e8edabSChris Kay## 1.4 (2017-07-07) 2579*c4e8edabSChris Kay 2580*c4e8edabSChris Kay### New features 2581*c4e8edabSChris Kay 2582*c4e8edabSChris Kay- Enabled support for platforms with hardware assisted coherency. 2583*c4e8edabSChris Kay 2584*c4e8edabSChris Kay A new build option HW_ASSISTED_COHERENCY allows platforms to take advantage of 2585*c4e8edabSChris Kay the following optimisations: 2586*c4e8edabSChris Kay 2587*c4e8edabSChris Kay - Skip performing cache maintenance during power-up and power-down. 2588*c4e8edabSChris Kay - Use spin-locks instead of bakery locks. 2589*c4e8edabSChris Kay - Enable data caches early on warm-booted CPUs. 2590*c4e8edabSChris Kay 2591*c4e8edabSChris Kay- Added support for Cortex-A75 and Cortex-A55 processors. 2592*c4e8edabSChris Kay 2593*c4e8edabSChris Kay Both Cortex-A75 and Cortex-A55 processors use the Arm DynamIQ Shared Unit 2594*c4e8edabSChris Kay (DSU). The power-down and power-up sequences are therefore mostly managed in 2595*c4e8edabSChris Kay hardware, reducing complexity of the software operations. 2596*c4e8edabSChris Kay 2597*c4e8edabSChris Kay- Introduced Arm GIC-600 driver. 2598*c4e8edabSChris Kay 2599*c4e8edabSChris Kay Arm GIC-600 IP complies with Arm GICv3 architecture. For FVP platforms, the 2600*c4e8edabSChris Kay GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600. 2601*c4e8edabSChris Kay 2602*c4e8edabSChris Kay- Updated GICv3 support: 2603*c4e8edabSChris Kay 2604*c4e8edabSChris Kay - Introduced power management APIs for GICv3 Redistributor. These APIs allow 2605*c4e8edabSChris Kay platforms to power down the Redistributor during CPU power on/off. Requires 2606*c4e8edabSChris Kay the GICv3 implementations to have power management operations. 2607*c4e8edabSChris Kay 2608*c4e8edabSChris Kay Implemented the power management APIs for FVP. 2609*c4e8edabSChris Kay 2610*c4e8edabSChris Kay - GIC driver data is flushed by the primary CPU so that secondary CPU do not 2611*c4e8edabSChris Kay read stale GIC data. 2612*c4e8edabSChris Kay 2613*c4e8edabSChris Kay- Added support for Arm System Control and Management Interface v1.0 (SCMI). 2614*c4e8edabSChris Kay 2615*c4e8edabSChris Kay The SCMI driver implements the power domain management and system power 2616*c4e8edabSChris Kay management protocol of the SCMI specification (Arm DEN 0056ASCMI) for 2617*c4e8edabSChris Kay communicating with any compliant power controller. 2618*c4e8edabSChris Kay 2619*c4e8edabSChris Kay Support is added for the Juno platform. The driver can be found in the 2620*c4e8edabSChris Kay plat/arm/css/drivers folder. 2621*c4e8edabSChris Kay 2622*c4e8edabSChris Kay- Added support to enable pre-integration of TBB with the Arm TrustZone 2623*c4e8edabSChris Kay CryptoCell product, to take advantage of its hardware Root of Trust and crypto 2624*c4e8edabSChris Kay acceleration services. 2625*c4e8edabSChris Kay 2626*c4e8edabSChris Kay- Enabled Statistical Profiling Extensions for lower ELs. 2627*c4e8edabSChris Kay 2628*c4e8edabSChris Kay The firmware support is limited to the use of SPE in the Non-secure state and 2629*c4e8edabSChris Kay accesses to the SPE specific registers from S-EL1 will trap to EL3. 2630*c4e8edabSChris Kay 2631*c4e8edabSChris Kay The SPE are architecturally specified for AArch64 only. 2632*c4e8edabSChris Kay 2633*c4e8edabSChris Kay- Code hygiene changes aligned with MISRA guidelines: 2634*c4e8edabSChris Kay 2635*c4e8edabSChris Kay - Fixed signed / unsigned comparison warnings in the translation table 2636*c4e8edabSChris Kay library. 2637*c4e8edabSChris Kay - Added U(\_x) macro and together with the existing ULL(\_x) macro fixed some 2638*c4e8edabSChris Kay of the signed-ness defects flagged by the MISRA scanner. 2639*c4e8edabSChris Kay 2640*c4e8edabSChris Kay- Enhancements to Firmware Update feature: 2641*c4e8edabSChris Kay 2642*c4e8edabSChris Kay - The FWU logic now checks for overlapping images to prevent execution of 2643*c4e8edabSChris Kay unauthenticated arbitrary code. 2644*c4e8edabSChris Kay - Introduced new FWU_SMC_IMAGE_RESET SMC that changes the image loading state 2645*c4e8edabSChris Kay machine to go from COPYING, COPIED or AUTHENTICATED states to RESET state. 2646*c4e8edabSChris Kay Previously, this was only possible when the authentication of an image 2647*c4e8edabSChris Kay failed or when the execution of the image finished. 2648*c4e8edabSChris Kay - Fixed integer overflow which addressed TFV-1: Malformed Firmware Update SMC 2649*c4e8edabSChris Kay can result in copy of unexpectedly large data into secure memory. 2650*c4e8edabSChris Kay 2651*c4e8edabSChris Kay- Introduced support for Arm Compiler 6 and LLVM (clang). 2652*c4e8edabSChris Kay 2653*c4e8edabSChris Kay TF-A can now also be built with the Arm Compiler 6 or the clang compilers. The 2654*c4e8edabSChris Kay assembler and linker must be provided by the GNU toolchain. 2655*c4e8edabSChris Kay 2656*c4e8edabSChris Kay Tested with Arm CC 6.7 and clang 3.9.x and 4.0.x. 2657*c4e8edabSChris Kay 2658*c4e8edabSChris Kay- Memory footprint improvements: 2659*c4e8edabSChris Kay 2660*c4e8edabSChris Kay - Introduced `tf_snprintf`, a reduced version of `snprintf` which has support 2661*c4e8edabSChris Kay for a limited set of formats. 2662*c4e8edabSChris Kay 2663*c4e8edabSChris Kay The mbedtls driver is updated to optionally use `tf_snprintf` instead of 2664*c4e8edabSChris Kay `snprintf`. 2665*c4e8edabSChris Kay 2666*c4e8edabSChris Kay - The `assert()` is updated to no longer print the function name, and 2667*c4e8edabSChris Kay additional logging options are supported via an optional platform define 2668*c4e8edabSChris Kay `PLAT_LOG_LEVEL_ASSERT`, which controls how verbose the assert output is. 2669*c4e8edabSChris Kay 2670*c4e8edabSChris Kay- Enhancements to TF-A support when running in AArch32 execution state: 2671*c4e8edabSChris Kay 2672*c4e8edabSChris Kay - Support booting SP_MIN and BL33 in AArch32 execution mode on Juno. Due to 2673*c4e8edabSChris Kay hardware limitations, BL1 and BL2 boot in AArch64 state and there is 2674*c4e8edabSChris Kay additional trampoline code to warm reset into SP_MIN in AArch32 execution 2675*c4e8edabSChris Kay state. 2676*c4e8edabSChris Kay - Added support for Arm Cortex-A53/57/72 MPCore processors including the 2677*c4e8edabSChris Kay errata workarounds that are already implemented for AArch64 execution state. 2678*c4e8edabSChris Kay - For FVP platforms, added AArch32 Trusted Board Boot support, including the 2679*c4e8edabSChris Kay Firmware Update feature. 2680*c4e8edabSChris Kay 2681*c4e8edabSChris Kay- Introduced Arm SiP service for use by Arm standard platforms. 2682*c4e8edabSChris Kay 2683*c4e8edabSChris Kay - Added new Arm SiP Service SMCs to enable the Non-secure world to read PMF 2684*c4e8edabSChris Kay timestamps. 2685*c4e8edabSChris Kay 2686*c4e8edabSChris Kay Added PMF instrumentation points in TF-A in order to quantify the overall 2687*c4e8edabSChris Kay time spent in the PSCI software implementation. 2688*c4e8edabSChris Kay 2689*c4e8edabSChris Kay - Added new Arm SiP service SMC to switch execution state. 2690*c4e8edabSChris Kay 2691*c4e8edabSChris Kay This allows the lower exception level to change its execution state from 2692*c4e8edabSChris Kay AArch64 to AArch32, or vice verse, via a request to EL3. 2693*c4e8edabSChris Kay 2694*c4e8edabSChris Kay- Migrated to use SPDX\[0\] license identifiers to make software license 2695*c4e8edabSChris Kay auditing simpler. 2696*c4e8edabSChris Kay 2697*c4e8edabSChris Kay \:::\{note} Files that have been imported by FreeBSD have not been modified. 2698*c4e8edabSChris Kay \::: 2699*c4e8edabSChris Kay 2700*c4e8edabSChris Kay \[0\]: <https://spdx.org/> 2701*c4e8edabSChris Kay 2702*c4e8edabSChris Kay- Enhancements to the translation table library: 2703*c4e8edabSChris Kay 2704*c4e8edabSChris Kay - Added version 2 of translation table library that allows different 2705*c4e8edabSChris Kay translation tables to be modified by using different 'contexts'. Version 1 2706*c4e8edabSChris Kay of the translation table library only allows the current EL's translation 2707*c4e8edabSChris Kay tables to be modified. 2708*c4e8edabSChris Kay 2709*c4e8edabSChris Kay Version 2 of the translation table also added support for dynamic regions; 2710*c4e8edabSChris Kay regions that can be added and removed dynamically whilst the MMU is enabled. 2711*c4e8edabSChris Kay Static regions can only be added or removed before the MMU is enabled. 2712*c4e8edabSChris Kay 2713*c4e8edabSChris Kay The dynamic mapping functionality is enabled or disabled when compiling by 2714*c4e8edabSChris Kay setting the build option PLAT_XLAT_TABLES_DYNAMIC to 1 or 0. This can be 2715*c4e8edabSChris Kay done per-image. 2716*c4e8edabSChris Kay 2717*c4e8edabSChris Kay - Added support for translation regimes with two virtual address spaces such 2718*c4e8edabSChris Kay as the one shared by EL1 and EL0. 2719*c4e8edabSChris Kay 2720*c4e8edabSChris Kay The library does not support initializing translation tables for EL0 2721*c4e8edabSChris Kay software. 2722*c4e8edabSChris Kay 2723*c4e8edabSChris Kay - Added support to mark the translation tables as non-cacheable using an 2724*c4e8edabSChris Kay additional build option `XLAT_TABLE_NC`. 2725*c4e8edabSChris Kay 2726*c4e8edabSChris Kay- Added support for GCC stack protection. A new build option 2727*c4e8edabSChris Kay ENABLE_STACK_PROTECTOR was introduced that enables compilation of all BL 2728*c4e8edabSChris Kay images with one of the GCC -fstack-protector-\* options. 2729*c4e8edabSChris Kay 2730*c4e8edabSChris Kay A new platform function plat_get_stack_protector_canary() was introduced that 2731*c4e8edabSChris Kay returns a value used to initialize the canary for stack corruption detection. 2732*c4e8edabSChris Kay For increased effectiveness of protection platforms must provide an 2733*c4e8edabSChris Kay implementation that returns a random value. 2734*c4e8edabSChris Kay 2735*c4e8edabSChris Kay- Enhanced support for Arm platforms: 2736*c4e8edabSChris Kay 2737*c4e8edabSChris Kay - Added support for multi-threading CPUs, indicated by `MT` field in MPDIR. A 2738*c4e8edabSChris Kay new build flag `ARM_PLAT_MT` is added, and when enabled, the functions 2739*c4e8edabSChris Kay accessing MPIDR assume that the `MT` bit is set for the platform and access 2740*c4e8edabSChris Kay the bit fields accordingly. 2741*c4e8edabSChris Kay 2742*c4e8edabSChris Kay Also, a new API `plat_arm_get_cpu_pe_count` is added when `ARM_PLAT_MT` is 2743*c4e8edabSChris Kay enabled, returning the Processing Element count within the physical CPU 2744*c4e8edabSChris Kay corresponding to `mpidr`. 2745*c4e8edabSChris Kay 2746*c4e8edabSChris Kay - The Arm platforms migrated to use version 2 of the translation tables. 2747*c4e8edabSChris Kay 2748*c4e8edabSChris Kay - Introduced a new Arm platform layer API `plat_arm_psci_override_pm_ops` 2749*c4e8edabSChris Kay which allows Arm platforms to modify `plat_arm_psci_pm_ops` and therefore 2750*c4e8edabSChris Kay dynamically define PSCI capability. 2751*c4e8edabSChris Kay 2752*c4e8edabSChris Kay - The Arm platforms migrated to use IMAGE_LOAD_V2 by default. 2753*c4e8edabSChris Kay 2754*c4e8edabSChris Kay- Enhanced reporting of errata workaround status with the following policy: 2755*c4e8edabSChris Kay 2756*c4e8edabSChris Kay - If an errata workaround is enabled: 2757*c4e8edabSChris Kay 2758*c4e8edabSChris Kay - If it applies (i.e. the CPU is affected by the errata), an INFO message is 2759*c4e8edabSChris Kay printed, confirming that the errata workaround has been applied. 2760*c4e8edabSChris Kay - If it does not apply, a VERBOSE message is printed, confirming that the 2761*c4e8edabSChris Kay errata workaround has been skipped. 2762*c4e8edabSChris Kay 2763*c4e8edabSChris Kay - If an errata workaround is not enabled, but would have applied had it been, 2764*c4e8edabSChris Kay a WARN message is printed, alerting that errata workaround is missing. 2765*c4e8edabSChris Kay 2766*c4e8edabSChris Kay- Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the 2767*c4e8edabSChris Kay architecture version to target TF-A. 2768*c4e8edabSChris Kay 2769*c4e8edabSChris Kay- Updated the spin lock implementation to use the more efficient CAS (Compare 2770*c4e8edabSChris Kay And Swap) instruction when available. This instruction was introduced in 2771*c4e8edabSChris Kay Armv8.1-A. 2772*c4e8edabSChris Kay 2773*c4e8edabSChris Kay- Applied errata workaround for Arm Cortex-A53: 855873. 2774*c4e8edabSChris Kay 2775*c4e8edabSChris Kay- Applied errata workaround for Arm-Cortex-A57: 813419. 2776*c4e8edabSChris Kay 2777*c4e8edabSChris Kay- Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and 2778*c4e8edabSChris Kay AArch32 execution states. 2779*c4e8edabSChris Kay 2780*c4e8edabSChris Kay- Added support for Socionext UniPhier SoC platform. 2781*c4e8edabSChris Kay 2782*c4e8edabSChris Kay- Added support for Hikey960 and Hikey platforms. 2783*c4e8edabSChris Kay 2784*c4e8edabSChris Kay- Added support for Rockchip RK3328 platform. 2785*c4e8edabSChris Kay 2786*c4e8edabSChris Kay- Added support for NVidia Tegra T186 platform. 2787*c4e8edabSChris Kay 2788*c4e8edabSChris Kay- Added support for Designware emmc driver. 2789*c4e8edabSChris Kay 2790*c4e8edabSChris Kay- Imported libfdt v1.4.2 that addresses buffer overflow in fdt_offset_ptr(). 2791*c4e8edabSChris Kay 2792*c4e8edabSChris Kay- Enhanced the CPU operations framework to allow power handlers to be registered 2793*c4e8edabSChris Kay on per-level basis. This enables support for future CPUs that have multiple 2794*c4e8edabSChris Kay threads which might need powering down individually. 2795*c4e8edabSChris Kay 2796*c4e8edabSChris Kay- Updated register initialisation to prevent unexpected behaviour: 2797*c4e8edabSChris Kay 2798*c4e8edabSChris Kay - Debug registers MDCR-EL3/SDCR and MDCR_EL2/HDCR are initialised to avoid 2799*c4e8edabSChris Kay unexpected traps into the higher exception levels and disable secure 2800*c4e8edabSChris Kay self-hosted debug. Additionally, secure privileged external debug on Juno is 2801*c4e8edabSChris Kay disabled by programming the appropriate Juno SoC registers. 2802*c4e8edabSChris Kay - EL2 and EL3 configurable controls are initialised to avoid unexpected traps 2803*c4e8edabSChris Kay in the higher exception levels. 2804*c4e8edabSChris Kay - Essential control registers are fully initialised on EL3 start-up, when 2805*c4e8edabSChris Kay initialising the non-secure and secure context structures and when preparing 2806*c4e8edabSChris Kay to leave EL3 for a lower EL. This gives better alignment with the Arm ARM 2807*c4e8edabSChris Kay which states that software must initialise RES0 and RES1 fields with 0 / 1. 2808*c4e8edabSChris Kay 2809*c4e8edabSChris Kay- Enhanced PSCI support: 2810*c4e8edabSChris Kay 2811*c4e8edabSChris Kay - Introduced new platform interfaces that decouple PSCI stat residency 2812*c4e8edabSChris Kay calculation from PMF, enabling platforms to use alternative methods of 2813*c4e8edabSChris Kay capturing timestamps. 2814*c4e8edabSChris Kay - PSCI stat accounting performed for retention/standby states when requested 2815*c4e8edabSChris Kay at multiple power levels. 2816*c4e8edabSChris Kay 2817*c4e8edabSChris Kay- Simplified fiptool to have a single linked list of image descriptors. 2818*c4e8edabSChris Kay 2819*c4e8edabSChris Kay- For the TSP, resolved corruption of pre-empted secure context by aborting any 2820*c4e8edabSChris Kay pre-empted SMC during PSCI power management requests. 2821*c4e8edabSChris Kay 2822*c4e8edabSChris Kay### Issues resolved since last release 2823*c4e8edabSChris Kay 2824*c4e8edabSChris Kay- TF-A can be built with the latest mbed TLS version (v2.4.2). The earlier 2825*c4e8edabSChris Kay version 2.3.0 cannot be used due to build warnings that the TF-A build system 2826*c4e8edabSChris Kay interprets as errors. 2827*c4e8edabSChris Kay- TBBR, including the Firmware Update feature is now supported on FVP platforms 2828*c4e8edabSChris Kay when running TF-A in AArch32 state. 2829*c4e8edabSChris Kay- The version of the AEMv8 Base FVP used in this release has resolved the issue 2830*c4e8edabSChris Kay of the model executing a reset instead of terminating in response to a 2831*c4e8edabSChris Kay shutdown request using the PSCI SYSTEM_OFF API. 2832*c4e8edabSChris Kay 2833*c4e8edabSChris Kay### Known Issues 2834*c4e8edabSChris Kay 2835*c4e8edabSChris Kay- Building TF-A with compiler optimisations disabled (-O0) fails. 2836*c4e8edabSChris Kay- Trusted Board Boot currently does not work on Juno when running Trusted 2837*c4e8edabSChris Kay Firmware in AArch32 execution state due to error when loading the sp_min to 2838*c4e8edabSChris Kay memory because of lack of free space available. See [tf-issue#501] for more 2839*c4e8edabSChris Kay details. 2840*c4e8edabSChris Kay- The errata workaround for A53 errata 843419 is only available from binutils 2841*c4e8edabSChris Kay 2.26 and is not present in GCC4.9. If this errata is applicable to the 2842*c4e8edabSChris Kay platform, please use GCC compiler version of at least 5.0. See [PR#1002] for 2843*c4e8edabSChris Kay more details. 2844*c4e8edabSChris Kay 2845*c4e8edabSChris Kay## 1.3 (2016-10-13) 2846*c4e8edabSChris Kay 2847*c4e8edabSChris Kay### New features 2848*c4e8edabSChris Kay 2849*c4e8edabSChris Kay- Added support for running TF-A in AArch32 execution state. 2850*c4e8edabSChris Kay 2851*c4e8edabSChris Kay The PSCI library has been refactored to allow integration with **EL3 Runtime 2852*c4e8edabSChris Kay Software**. This is software that is executing at the highest secure privilege 2853*c4e8edabSChris Kay which is EL3 in AArch64 or Secure SVC/Monitor mode in AArch32. See 2854*c4e8edabSChris Kay \{ref}`PSCI Library Integration guide for Armv8-A AArch32 systems`. 2855*c4e8edabSChris Kay 2856*c4e8edabSChris Kay Included is a minimal AArch32 Secure Payload, **SP-MIN**, that illustrates the 2857*c4e8edabSChris Kay usage and integration of the PSCI library with EL3 Runtime Software running in 2858*c4e8edabSChris Kay AArch32 state. 2859*c4e8edabSChris Kay 2860*c4e8edabSChris Kay Booting to the BL1/BL2 images as well as booting straight to the Secure 2861*c4e8edabSChris Kay Payload is supported. 2862*c4e8edabSChris Kay 2863*c4e8edabSChris Kay- Improvements to the initialization framework for the PSCI service and Arm 2864*c4e8edabSChris Kay Standard Services in general. 2865*c4e8edabSChris Kay 2866*c4e8edabSChris Kay The PSCI service is now initialized as part of Arm Standard Service 2867*c4e8edabSChris Kay initialization. This consolidates the initializations of any Arm Standard 2868*c4e8edabSChris Kay Service that may be added in the future. 2869*c4e8edabSChris Kay 2870*c4e8edabSChris Kay A new function `get_arm_std_svc_args()` is introduced to get arguments 2871*c4e8edabSChris Kay corresponding to each standard service and must be implemented by the EL3 2872*c4e8edabSChris Kay Runtime Software. 2873*c4e8edabSChris Kay 2874*c4e8edabSChris Kay For PSCI, a new versioned structure `psci_lib_args_t` is introduced to 2875*c4e8edabSChris Kay initialize the PSCI Library. **Note** this is a compatibility break due to the 2876*c4e8edabSChris Kay change in the prototype of `psci_setup()`. 2877*c4e8edabSChris Kay 2878*c4e8edabSChris Kay- To support AArch32 builds of BL1 and BL2, implemented a new, alternative 2879*c4e8edabSChris Kay firmware image loading mechanism that adds flexibility. 2880*c4e8edabSChris Kay 2881*c4e8edabSChris Kay The current mechanism has a hard-coded set of images and execution order 2882*c4e8edabSChris Kay (BL31, BL32, etc). The new mechanism is data-driven by a list of image 2883*c4e8edabSChris Kay descriptors provided by the platform code. 2884*c4e8edabSChris Kay 2885*c4e8edabSChris Kay Arm platforms have been updated to support the new loading mechanism. 2886*c4e8edabSChris Kay 2887*c4e8edabSChris Kay The new mechanism is enabled by a build flag (`LOAD_IMAGE_V2`) which is 2888*c4e8edabSChris Kay currently off by default for the AArch64 build. 2889*c4e8edabSChris Kay 2890*c4e8edabSChris Kay **Note** `TRUSTED_BOARD_BOOT` is currently not supported when `LOAD_IMAGE_V2` 2891*c4e8edabSChris Kay is enabled. 2892*c4e8edabSChris Kay 2893*c4e8edabSChris Kay- Updated requirements for making contributions to TF-A. 2894*c4e8edabSChris Kay 2895*c4e8edabSChris Kay Commits now must have a 'Signed-off-by:' field to certify that the 2896*c4e8edabSChris Kay contribution has been made under the terms of the 2897*c4e8edabSChris Kay {download}`Developer Certificate of Origin <../dco.txt>`. 2898*c4e8edabSChris Kay 2899*c4e8edabSChris Kay A signed CLA is no longer required. 2900*c4e8edabSChris Kay 2901*c4e8edabSChris Kay The {ref}`Contributor's Guide` has been updated to reflect this change. 2902*c4e8edabSChris Kay 2903*c4e8edabSChris Kay- Introduced Performance Measurement Framework (PMF) which provides support for 2904*c4e8edabSChris Kay capturing, storing, dumping and retrieving time-stamps to measure the 2905*c4e8edabSChris Kay execution time of critical paths in the firmware. This relies on defining 2906*c4e8edabSChris Kay fixed sample points at key places in the code. 2907*c4e8edabSChris Kay 2908*c4e8edabSChris Kay- To support the QEMU platform port, imported libfdt v1.4.1 from 2909*c4e8edabSChris Kay <https://git.kernel.org/pub/scm/utils/dtc/dtc.git> 2910*c4e8edabSChris Kay 2911*c4e8edabSChris Kay- Updated PSCI support: 2912*c4e8edabSChris Kay 2913*c4e8edabSChris Kay - Added support for PSCI NODE_HW_STATE API for Arm platforms. 2914*c4e8edabSChris Kay - New optional platform hook, `pwr_domain_pwr_down_wfi()`, in `plat_psci_ops` 2915*c4e8edabSChris Kay to enable platforms to perform platform-specific actions needed to enter 2916*c4e8edabSChris Kay powerdown, including the 'wfi' invocation. 2917*c4e8edabSChris Kay - PSCI STAT residency and count functions have been added on Arm platforms by 2918*c4e8edabSChris Kay using PMF. 2919*c4e8edabSChris Kay 2920*c4e8edabSChris Kay- Enhancements to the translation table library: 2921*c4e8edabSChris Kay 2922*c4e8edabSChris Kay - Limited memory mapping support for region overlaps to only allow regions to 2923*c4e8edabSChris Kay overlap that are identity mapped or have the same virtual to physical 2924*c4e8edabSChris Kay address offset, and overlap completely but must not cover the same area. 2925*c4e8edabSChris Kay 2926*c4e8edabSChris Kay This limitation will enable future enhancements without having to support 2927*c4e8edabSChris Kay complex edge cases that may not be necessary. 2928*c4e8edabSChris Kay 2929*c4e8edabSChris Kay - The initial translation lookup level is now inferred from the virtual 2930*c4e8edabSChris Kay address space size. Previously, it was hard-coded. 2931*c4e8edabSChris Kay 2932*c4e8edabSChris Kay - Added support for mapping Normal, Inner Non-cacheable, Outer Non-cacheable 2933*c4e8edabSChris Kay memory in the translation table library. 2934*c4e8edabSChris Kay 2935*c4e8edabSChris Kay This can be useful to map a non-cacheable memory region, such as a DMA 2936*c4e8edabSChris Kay buffer. 2937*c4e8edabSChris Kay 2938*c4e8edabSChris Kay - Introduced the MT_EXECUTE/MT_EXECUTE_NEVER memory mapping attributes to 2939*c4e8edabSChris Kay specify the access permissions for instruction execution of a memory region. 2940*c4e8edabSChris Kay 2941*c4e8edabSChris Kay- Enabled support to isolate code and read-only data on separate memory pages, 2942*c4e8edabSChris Kay allowing independent access control to be applied to each. 2943*c4e8edabSChris Kay 2944*c4e8edabSChris Kay- Enabled SCR_EL3.SIF (Secure Instruction Fetch) bit in BL1 and BL31 common 2945*c4e8edabSChris Kay architectural setup code, preventing fetching instructions from non-secure 2946*c4e8edabSChris Kay memory when in secure state. 2947*c4e8edabSChris Kay 2948*c4e8edabSChris Kay- Enhancements to FIP support: 2949*c4e8edabSChris Kay 2950*c4e8edabSChris Kay - Replaced `fip_create` with `fiptool` which provides a more consistent and 2951*c4e8edabSChris Kay intuitive interface as well as additional support to remove an image from a 2952*c4e8edabSChris Kay FIP file. 2953*c4e8edabSChris Kay - Enabled printing the SHA256 digest with info command, allowing quick 2954*c4e8edabSChris Kay verification of an image within a FIP without having to extract the image 2955*c4e8edabSChris Kay and running sha256sum on it. 2956*c4e8edabSChris Kay - Added support for unpacking the contents of an existing FIP file into the 2957*c4e8edabSChris Kay working directory. 2958*c4e8edabSChris Kay - Aligned command line options for specifying images to use same naming 2959*c4e8edabSChris Kay convention as specified by TBBR and already used in cert_create tool. 2960*c4e8edabSChris Kay 2961*c4e8edabSChris Kay- Refactored the TZC-400 driver to also support memory controllers that 2962*c4e8edabSChris Kay integrate TZC functionality, for example Arm CoreLink DMC-500. Also added 2963*c4e8edabSChris Kay DMC-500 specific support. 2964*c4e8edabSChris Kay 2965*c4e8edabSChris Kay- Implemented generic delay timer based on the system generic counter and 2966*c4e8edabSChris Kay migrated all platforms to use it. 2967*c4e8edabSChris Kay 2968*c4e8edabSChris Kay- Enhanced support for Arm platforms: 2969*c4e8edabSChris Kay 2970*c4e8edabSChris Kay - Updated image loading support to make SCP images (SCP_BL2 and SCP_BL2U) 2971*c4e8edabSChris Kay optional. 2972*c4e8edabSChris Kay - Enhanced topology description support to allow multi-cluster topology 2973*c4e8edabSChris Kay definitions. 2974*c4e8edabSChris Kay - Added interconnect abstraction layer to help platform ports select the right 2975*c4e8edabSChris Kay interconnect driver, CCI or CCN, for the platform. 2976*c4e8edabSChris Kay - Added support to allow loading BL31 in the TZC-secured DRAM instead of the 2977*c4e8edabSChris Kay default secure SRAM. 2978*c4e8edabSChris Kay - Added support to use a System Security Control (SSC) Registers Unit enabling 2979*c4e8edabSChris Kay TF-A to be compiled to support multiple Arm platforms and then select one at 2980*c4e8edabSChris Kay runtime. 2981*c4e8edabSChris Kay - Restricted mapping of Trusted ROM in BL1 to what is actually needed by BL1 2982*c4e8edabSChris Kay rather than entire Trusted ROM region. 2983*c4e8edabSChris Kay - Flash is now mapped as execute-never by default. This increases security by 2984*c4e8edabSChris Kay restricting the executable region to what is strictly needed. 2985*c4e8edabSChris Kay 2986*c4e8edabSChris Kay- Applied following erratum workarounds for Cortex-A57: 833471, 826977, 829520, 2987*c4e8edabSChris Kay 828024 and 826974. 2988*c4e8edabSChris Kay 2989*c4e8edabSChris Kay- Added support for Mediatek MT6795 platform. 2990*c4e8edabSChris Kay 2991*c4e8edabSChris Kay- Added support for QEMU virtualization Armv8-A target. 2992*c4e8edabSChris Kay 2993*c4e8edabSChris Kay- Added support for Rockchip RK3368 and RK3399 platforms. 2994*c4e8edabSChris Kay 2995*c4e8edabSChris Kay- Added support for Xilinx Zynq UltraScale+ MPSoC platform. 2996*c4e8edabSChris Kay 2997*c4e8edabSChris Kay- Added support for Arm Cortex-A73 MPCore Processor. 2998*c4e8edabSChris Kay 2999*c4e8edabSChris Kay- Added support for Arm Cortex-A72 processor. 3000*c4e8edabSChris Kay 3001*c4e8edabSChris Kay- Added support for Arm Cortex-A35 processor. 3002*c4e8edabSChris Kay 3003*c4e8edabSChris Kay- Added support for Arm Cortex-A32 MPCore Processor. 3004*c4e8edabSChris Kay 3005*c4e8edabSChris Kay- Enabled preloaded BL33 alternative boot flow, in which BL2 does not load BL33 3006*c4e8edabSChris Kay from non-volatile storage and BL31 hands execution over to a preloaded BL33. 3007*c4e8edabSChris Kay The User Guide has been updated with an example of how to use this option with 3008*c4e8edabSChris Kay a bootwrapped kernel. 3009*c4e8edabSChris Kay 3010*c4e8edabSChris Kay- Added support to build TF-A on a Windows-based host machine. 3011*c4e8edabSChris Kay 3012*c4e8edabSChris Kay- Updated Trusted Board Boot prototype implementation: 3013*c4e8edabSChris Kay 3014*c4e8edabSChris Kay - Enabled the ability for a production ROM with TBBR enabled to boot test 3015*c4e8edabSChris Kay software before a real ROTPK is deployed (e.g. manufacturing mode). Added 3016*c4e8edabSChris Kay support to use ROTPK in certificate without verifying against the platform 3017*c4e8edabSChris Kay value when `ROTPK_NOT_DEPLOYED` bit is set. 3018*c4e8edabSChris Kay - Added support for non-volatile counter authentication to the Authentication 3019*c4e8edabSChris Kay Module to protect against roll-back. 3020*c4e8edabSChris Kay 3021*c4e8edabSChris Kay- Updated GICv3 support: 3022*c4e8edabSChris Kay 3023*c4e8edabSChris Kay - Enabled processor power-down and automatic power-on using GICv3. 3024*c4e8edabSChris Kay - Enabled G1S or G0 interrupts to be configured independently. 3025*c4e8edabSChris Kay - Changed FVP default interrupt driver to be the GICv3-only driver. **Note** 3026*c4e8edabSChris Kay the default build of TF-A will not be able to boot Linux kernel with GICv2 3027*c4e8edabSChris Kay FDT blob. 3028*c4e8edabSChris Kay - Enabled wake-up from CPU_SUSPEND to stand-by by temporarily re-routing 3029*c4e8edabSChris Kay interrupts and then restoring after resume. 3030*c4e8edabSChris Kay 3031*c4e8edabSChris Kay### Issues resolved since last release 3032*c4e8edabSChris Kay 3033*c4e8edabSChris Kay### Known issues 3034*c4e8edabSChris Kay 3035*c4e8edabSChris Kay- The version of the AEMv8 Base FVP used in this release resets the model 3036*c4e8edabSChris Kay instead of terminating its execution in response to a shutdown request using 3037*c4e8edabSChris Kay the PSCI `SYSTEM_OFF` API. This issue will be fixed in a future version of the 3038*c4e8edabSChris Kay model. 3039*c4e8edabSChris Kay- Building TF-A with compiler optimisations disabled (`-O0`) fails. 3040*c4e8edabSChris Kay- TF-A cannot be built with mbed TLS version v2.3.0 due to build warnings that 3041*c4e8edabSChris Kay the TF-A build system interprets as errors. 3042*c4e8edabSChris Kay- TBBR is not currently supported when running TF-A in AArch32 state. 3043*c4e8edabSChris Kay 3044*c4e8edabSChris Kay## 1.2 (2015-12-22) 3045*c4e8edabSChris Kay 3046*c4e8edabSChris Kay### New features 3047*c4e8edabSChris Kay 3048*c4e8edabSChris Kay- The Trusted Board Boot implementation on Arm platforms now conforms to the 3049*c4e8edabSChris Kay mandatory requirements of the TBBR specification. 3050*c4e8edabSChris Kay 3051*c4e8edabSChris Kay In particular, the boot process is now guarded by a Trusted Watchdog, which 3052*c4e8edabSChris Kay will reset the system in case of an authentication or loading error. On Arm 3053*c4e8edabSChris Kay platforms, a secure instance of Arm SP805 is used as the Trusted Watchdog. 3054*c4e8edabSChris Kay 3055*c4e8edabSChris Kay Also, a firmware update process has been implemented. It enables authenticated 3056*c4e8edabSChris Kay firmware to update firmware images from external interfaces to SoC 3057*c4e8edabSChris Kay Non-Volatile memories. This feature functions even when the current firmware 3058*c4e8edabSChris Kay in the system is corrupt or missing; it therefore may be used as a recovery 3059*c4e8edabSChris Kay mode. 3060*c4e8edabSChris Kay 3061*c4e8edabSChris Kay- Improvements have been made to the Certificate Generation Tool (`cert_create`) 3062*c4e8edabSChris Kay as follows. 3063*c4e8edabSChris Kay 3064*c4e8edabSChris Kay - Added support for the Firmware Update process by extending the Chain of 3065*c4e8edabSChris Kay Trust definition in the tool to include the Firmware Update certificate and 3066*c4e8edabSChris Kay the required extensions. 3067*c4e8edabSChris Kay - Introduced a new API that allows one to specify command line options in the 3068*c4e8edabSChris Kay Chain of Trust description. This makes the declaration of the tool's 3069*c4e8edabSChris Kay arguments more flexible and easier to extend. 3070*c4e8edabSChris Kay - The tool has been reworked to follow a data driven approach, which makes it 3071*c4e8edabSChris Kay easier to maintain and extend. 3072*c4e8edabSChris Kay 3073*c4e8edabSChris Kay- Extended the FIP tool (`fip_create`) to support the new set of images involved 3074*c4e8edabSChris Kay in the Firmware Update process. 3075*c4e8edabSChris Kay 3076*c4e8edabSChris Kay- Various memory footprint improvements. In particular: 3077*c4e8edabSChris Kay 3078*c4e8edabSChris Kay - The bakery lock structure for coherent memory has been optimised. 3079*c4e8edabSChris Kay - The mbed TLS SHA1 functions are not needed, as SHA256 is used to generate 3080*c4e8edabSChris Kay the certificate signature. Therefore, they have been compiled out, reducing 3081*c4e8edabSChris Kay the memory footprint of BL1 and BL2 by approximately 6 KB. 3082*c4e8edabSChris Kay - On Arm development platforms, each BL stage now individually defines the 3083*c4e8edabSChris Kay number of regions that it needs to map in the MMU. 3084*c4e8edabSChris Kay 3085*c4e8edabSChris Kay- Added the following new design documents: 3086*c4e8edabSChris Kay 3087*c4e8edabSChris Kay - {ref}`Authentication Framework & Chain of Trust` 3088*c4e8edabSChris Kay - {ref}`Firmware Update (FWU)` 3089*c4e8edabSChris Kay - {ref}`CPU Reset` 3090*c4e8edabSChris Kay - {ref}`PSCI Power Domain Tree Structure` 3091*c4e8edabSChris Kay 3092*c4e8edabSChris Kay- Applied the new image terminology to the code base and documentation, as 3093*c4e8edabSChris Kay described in the {ref}`Image Terminology` document. 3094*c4e8edabSChris Kay 3095*c4e8edabSChris Kay- The build system has been reworked to improve readability and facilitate 3096*c4e8edabSChris Kay adding future extensions. 3097*c4e8edabSChris Kay 3098*c4e8edabSChris Kay- On Arm standard platforms, BL31 uses the boot console during cold boot but 3099*c4e8edabSChris Kay switches to the runtime console for any later logs at runtime. The TSP uses 3100*c4e8edabSChris Kay the runtime console for all output. 3101*c4e8edabSChris Kay 3102*c4e8edabSChris Kay- Implemented a basic NOR flash driver for Arm platforms. It programs the device 3103*c4e8edabSChris Kay using CFI (Common Flash Interface) standard commands. 3104*c4e8edabSChris Kay 3105*c4e8edabSChris Kay- Implemented support for booting EL3 payloads on Arm platforms, which reduces 3106*c4e8edabSChris Kay the complexity of developing EL3 baremetal code by doing essential baremetal 3107*c4e8edabSChris Kay initialization. 3108*c4e8edabSChris Kay 3109*c4e8edabSChris Kay- Provided separate drivers for GICv3 and GICv2. These expect the entire 3110*c4e8edabSChris Kay software stack to use either GICv2 or GICv3; hybrid GIC software systems are 3111*c4e8edabSChris Kay no longer supported and the legacy Arm GIC driver has been deprecated. 3112*c4e8edabSChris Kay 3113*c4e8edabSChris Kay- Added support for Juno r1 and r2. A single set of Juno TF-A binaries can run 3114*c4e8edabSChris Kay on Juno r0, r1 and r2 boards. Note that this TF-A version depends on a Linaro 3115*c4e8edabSChris Kay release that does *not* contain Juno r2 support. 3116*c4e8edabSChris Kay 3117*c4e8edabSChris Kay- Added support for MediaTek mt8173 platform. 3118*c4e8edabSChris Kay 3119*c4e8edabSChris Kay- Implemented a generic driver for Arm CCN IP. 3120*c4e8edabSChris Kay 3121*c4e8edabSChris Kay- Major rework of the PSCI implementation. 3122*c4e8edabSChris Kay 3123*c4e8edabSChris Kay - Added framework to handle composite power states. 3124*c4e8edabSChris Kay - Decoupled the notions of affinity instances (which describes the 3125*c4e8edabSChris Kay hierarchical arrangement of cores) and of power domain topology, instead of 3126*c4e8edabSChris Kay assuming a one-to-one mapping. 3127*c4e8edabSChris Kay - Better alignment with version 1.0 of the PSCI specification. 3128*c4e8edabSChris Kay 3129*c4e8edabSChris Kay- Added support for the SYSTEM_SUSPEND PSCI API on Arm platforms. When invoked 3130*c4e8edabSChris Kay on the last running core on a supported platform, this puts the system into a 3131*c4e8edabSChris Kay low power mode with memory retention. 3132*c4e8edabSChris Kay 3133*c4e8edabSChris Kay- Unified the reset handling code as much as possible across BL stages. Also 3134*c4e8edabSChris Kay introduced some build options to enable optimization of the reset path on 3135*c4e8edabSChris Kay platforms that support it. 3136*c4e8edabSChris Kay 3137*c4e8edabSChris Kay- Added a simple delay timer API, as well as an SP804 timer driver, which is 3138*c4e8edabSChris Kay enabled on FVP. 3139*c4e8edabSChris Kay 3140*c4e8edabSChris Kay- Added support for NVidia Tegra T210 and T132 SoCs. 3141*c4e8edabSChris Kay 3142*c4e8edabSChris Kay- Reorganised Arm platforms ports to greatly improve code shareability and 3143*c4e8edabSChris Kay facilitate the reuse of some of this code by other platforms. 3144*c4e8edabSChris Kay 3145*c4e8edabSChris Kay- Added support for Arm Cortex-A72 processor in the CPU specific framework. 3146*c4e8edabSChris Kay 3147*c4e8edabSChris Kay- Provided better error handling. Platform ports can now define their own error 3148*c4e8edabSChris Kay handling, for example to perform platform specific bookkeeping or post-error 3149*c4e8edabSChris Kay actions. 3150*c4e8edabSChris Kay 3151*c4e8edabSChris Kay- Implemented a unified driver for Arm Cache Coherent Interconnects used for 3152*c4e8edabSChris Kay both CCI-400 & CCI-500 IPs. Arm platforms ports have been migrated to this 3153*c4e8edabSChris Kay common driver. The standalone CCI-400 driver has been deprecated. 3154*c4e8edabSChris Kay 3155*c4e8edabSChris Kay### Issues resolved since last release 3156*c4e8edabSChris Kay 3157*c4e8edabSChris Kay- The Trusted Board Boot implementation has been redesigned to provide greater 3158*c4e8edabSChris Kay modularity and scalability. See the 3159*c4e8edabSChris Kay \{ref}`Authentication Framework & Chain of Trust` document. All missing 3160*c4e8edabSChris Kay mandatory features are now implemented. 3161*c4e8edabSChris Kay- The FVP and Juno ports may now use the hash of the ROTPK stored in the Trusted 3162*c4e8edabSChris Kay Key Storage registers to verify the ROTPK. Alternatively, a development public 3163*c4e8edabSChris Kay key hash embedded in the BL1 and BL2 binaries might be used instead. The 3164*c4e8edabSChris Kay location of the ROTPK is chosen at build-time using the `ARM_ROTPK_LOCATION` 3165*c4e8edabSChris Kay build option. 3166*c4e8edabSChris Kay- GICv3 is now fully supported and stable. 3167*c4e8edabSChris Kay 3168*c4e8edabSChris Kay### Known issues 3169*c4e8edabSChris Kay 3170*c4e8edabSChris Kay- The version of the AEMv8 Base FVP used in this release resets the model 3171*c4e8edabSChris Kay instead of terminating its execution in response to a shutdown request using 3172*c4e8edabSChris Kay the PSCI `SYSTEM_OFF` API. This issue will be fixed in a future version of the 3173*c4e8edabSChris Kay model. 3174*c4e8edabSChris Kay- While this version has low on-chip RAM requirements, there are further RAM 3175*c4e8edabSChris Kay usage enhancements that could be made. 3176*c4e8edabSChris Kay- The upstream documentation could be improved for structural consistency, 3177*c4e8edabSChris Kay clarity and completeness. In particular, the design documentation is 3178*c4e8edabSChris Kay incomplete for PSCI, the TSP(D) and the Juno platform. 3179*c4e8edabSChris Kay- Building TF-A with compiler optimisations disabled (`-O0`) fails. 3180*c4e8edabSChris Kay 3181*c4e8edabSChris Kay## 1.1 (2015-02-04) 3182*c4e8edabSChris Kay 3183*c4e8edabSChris Kay### New features 3184*c4e8edabSChris Kay 3185*c4e8edabSChris Kay- A prototype implementation of Trusted Board Boot has been added. Boot loader 3186*c4e8edabSChris Kay images are verified by BL1 and BL2 during the cold boot path. BL1 and BL2 use 3187*c4e8edabSChris Kay the PolarSSL SSL library to verify certificates and images. The OpenSSL 3188*c4e8edabSChris Kay library is used to create the X.509 certificates. Support has been added to 3189*c4e8edabSChris Kay `fip_create` tool to package the certificates in a FIP. 3190*c4e8edabSChris Kay 3191*c4e8edabSChris Kay- Support for calling CPU and platform specific reset handlers upon entry into 3192*c4e8edabSChris Kay BL3-1 during the cold and warm boot paths has been added. This happens after 3193*c4e8edabSChris Kay another Boot ROM `reset_handler()` has already run. This enables a developer 3194*c4e8edabSChris Kay to perform additional actions or undo actions already performed during the 3195*c4e8edabSChris Kay first call of the reset handlers e.g. apply additional errata workarounds. 3196*c4e8edabSChris Kay 3197*c4e8edabSChris Kay- Support has been added to demonstrate routing of IRQs to EL3 instead of S-EL1 3198*c4e8edabSChris Kay when execution is in secure world. 3199*c4e8edabSChris Kay 3200*c4e8edabSChris Kay- The PSCI implementation now conforms to version 1.0 of the PSCI specification. 3201*c4e8edabSChris Kay All the mandatory APIs and selected optional APIs are supported. In 3202*c4e8edabSChris Kay particular, support for the `PSCI_FEATURES` API has been added. A capability 3203*c4e8edabSChris Kay variable is constructed during initialization by examining the `plat_pm_ops` 3204*c4e8edabSChris Kay and `spd_pm_ops` exported by the platform and the Secure Payload Dispatcher. 3205*c4e8edabSChris Kay This is used by the PSCI FEATURES function to determine which PSCI APIs are 3206*c4e8edabSChris Kay supported by the platform. 3207*c4e8edabSChris Kay 3208*c4e8edabSChris Kay- Improvements have been made to the PSCI code as follows. 3209*c4e8edabSChris Kay 3210*c4e8edabSChris Kay - The code has been refactored to remove redundant parameters from internal 3211*c4e8edabSChris Kay functions. 3212*c4e8edabSChris Kay - Changes have been made to the code for PSCI `CPU_SUSPEND`, `CPU_ON` and 3213*c4e8edabSChris Kay `CPU_OFF` calls to facilitate an early return to the caller in case a 3214*c4e8edabSChris Kay failure condition is detected. For example, a PSCI `CPU_SUSPEND` call 3215*c4e8edabSChris Kay returns `SUCCESS` to the caller if a pending interrupt is detected early in 3216*c4e8edabSChris Kay the code path. 3217*c4e8edabSChris Kay - Optional platform APIs have been added to validate the `power_state` and 3218*c4e8edabSChris Kay `entrypoint` parameters early in PSCI `CPU_ON` and `CPU_SUSPEND` code paths. 3219*c4e8edabSChris Kay - PSCI migrate APIs have been reworked to invoke the SPD hook to determine the 3220*c4e8edabSChris Kay type of Trusted OS and the CPU it is resident on (if applicable). Also, 3221*c4e8edabSChris Kay during a PSCI `MIGRATE` call, the SPD hook to migrate the Trusted OS is 3222*c4e8edabSChris Kay invoked. 3223*c4e8edabSChris Kay 3224*c4e8edabSChris Kay- It is now possible to build TF-A without marking at least an extra page of 3225*c4e8edabSChris Kay memory as coherent. The build flag `USE_COHERENT_MEM` can be used to choose 3226*c4e8edabSChris Kay between the two implementations. This has been made possible through these 3227*c4e8edabSChris Kay changes. 3228*c4e8edabSChris Kay 3229*c4e8edabSChris Kay - An implementation of Bakery locks, where the locks are not allocated in 3230*c4e8edabSChris Kay coherent memory has been added. 3231*c4e8edabSChris Kay - Memory which was previously marked as coherent is now kept coherent through 3232*c4e8edabSChris Kay the use of software cache maintenance operations. 3233*c4e8edabSChris Kay 3234*c4e8edabSChris Kay Approximately, 4K worth of memory is saved for each boot loader stage when 3235*c4e8edabSChris Kay `USE_COHERENT_MEM=0`. Enabling this option increases the latencies associated 3236*c4e8edabSChris Kay with acquire and release of locks. It also requires changes to the platform 3237*c4e8edabSChris Kay ports. 3238*c4e8edabSChris Kay 3239*c4e8edabSChris Kay- It is now possible to specify the name of the FIP at build time by defining 3240*c4e8edabSChris Kay the `FIP_NAME` variable. 3241*c4e8edabSChris Kay 3242*c4e8edabSChris Kay- Issues with dependencies on the 'fiptool' makefile target have been rectified. 3243*c4e8edabSChris Kay The `fip_create` tool is now rebuilt whenever its source files change. 3244*c4e8edabSChris Kay 3245*c4e8edabSChris Kay- The BL3-1 runtime console is now also used as the crash console. The crash 3246*c4e8edabSChris Kay console is changed to SoC UART0 (UART2) from the previous FPGA UART0 (UART0) 3247*c4e8edabSChris Kay on Juno. In FVP, it is changed from UART0 to UART1. 3248*c4e8edabSChris Kay 3249*c4e8edabSChris Kay- CPU errata workarounds are applied only when the revision and part number 3250*c4e8edabSChris Kay match. This behaviour has been made consistent across the debug and release 3251*c4e8edabSChris Kay builds. The debug build additionally prints a warning if a mismatch is 3252*c4e8edabSChris Kay detected. 3253*c4e8edabSChris Kay 3254*c4e8edabSChris Kay- It is now possible to issue cache maintenance operations by set/way for a 3255*c4e8edabSChris Kay particular level of data cache. Levels 1-3 are currently supported. 3256*c4e8edabSChris Kay 3257*c4e8edabSChris Kay- The following improvements have been made to the FVP port. 3258*c4e8edabSChris Kay 3259*c4e8edabSChris Kay - The build option `FVP_SHARED_DATA_LOCATION` which allowed relocation of 3260*c4e8edabSChris Kay shared data into the Trusted DRAM has been deprecated. Shared data is now 3261*c4e8edabSChris Kay always located at the base of Trusted SRAM. 3262*c4e8edabSChris Kay - BL2 Translation tables have been updated to map only the region of DRAM 3263*c4e8edabSChris Kay which is accessible to normal world. This is the region of the 2GB DDR-DRAM 3264*c4e8edabSChris Kay memory at 0x80000000 excluding the top 16MB. The top 16MB is accessible to 3265*c4e8edabSChris Kay only the secure world. 3266*c4e8edabSChris Kay - BL3-2 can now reside in the top 16MB of DRAM which is accessible only to the 3267*c4e8edabSChris Kay secure world. This can be done by setting the build flag 3268*c4e8edabSChris Kay `FVP_TSP_RAM_LOCATION` to the value `dram`. 3269*c4e8edabSChris Kay 3270*c4e8edabSChris Kay- Separate translation tables are created for each boot loader image. The 3271*c4e8edabSChris Kay `IMAGE_BLx` build options are used to do this. This allows each stage to 3272*c4e8edabSChris Kay create mappings only for areas in the memory map that it needs. 3273*c4e8edabSChris Kay 3274*c4e8edabSChris Kay- A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been added. 3275*c4e8edabSChris Kay Details of using it with TF-A can be found in {ref}`OP-TEE Dispatcher` 3276*c4e8edabSChris Kay 3277*c4e8edabSChris Kay### Issues resolved since last release 3278*c4e8edabSChris Kay 3279*c4e8edabSChris Kay- The Juno port has been aligned with the FVP port as follows. 3280*c4e8edabSChris Kay 3281*c4e8edabSChris Kay - Support for reclaiming all BL1 RW memory and BL2 memory by overlaying the 3282*c4e8edabSChris Kay BL3-1/BL3-2 NOBITS sections on top of them has been added to the Juno port. 3283*c4e8edabSChris Kay - The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured using 3284*c4e8edabSChris Kay the TZC-400 controller to be accessible only to the secure world. 3285*c4e8edabSChris Kay - The Arm GIC driver is used to configure the GIC-400 instead of using a GIC 3286*c4e8edabSChris Kay driver private to the Juno port. 3287*c4e8edabSChris Kay - PSCI `CPU_SUSPEND` calls that target a standby state are now supported. 3288*c4e8edabSChris Kay - The TZC-400 driver is used to configure the controller instead of direct 3289*c4e8edabSChris Kay accesses to the registers. 3290*c4e8edabSChris Kay 3291*c4e8edabSChris Kay- The Linux kernel version referred to in the user guide has DVFS and HMP 3292*c4e8edabSChris Kay support enabled. 3293*c4e8edabSChris Kay 3294*c4e8edabSChris Kay- DS-5 v5.19 did not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in CADI 3295*c4e8edabSChris Kay server mode. This issue is not seen with DS-5 v5.20 and Version 6.2 of the 3296*c4e8edabSChris Kay Cortex-A57-A53 Base FVPs. 3297*c4e8edabSChris Kay 3298*c4e8edabSChris Kay### Known issues 3299*c4e8edabSChris Kay 3300*c4e8edabSChris Kay- The Trusted Board Boot implementation is a prototype. There are issues with 3301*c4e8edabSChris Kay the modularity and scalability of the design. Support for a Trusted Watchdog, 3302*c4e8edabSChris Kay firmware update mechanism, recovery images and Trusted debug is absent. These 3303*c4e8edabSChris Kay issues will be addressed in future releases. 3304*c4e8edabSChris Kay- The FVP and Juno ports do not use the hash of the ROTPK stored in the Trusted 3305*c4e8edabSChris Kay Key Storage registers to verify the ROTPK in the `plat_match_rotpk()` 3306*c4e8edabSChris Kay function. This prevents the correct establishment of the Chain of Trust at the 3307*c4e8edabSChris Kay first step in the Trusted Board Boot process. 3308*c4e8edabSChris Kay- The version of the AEMv8 Base FVP used in this release resets the model 3309*c4e8edabSChris Kay instead of terminating its execution in response to a shutdown request using 3310*c4e8edabSChris Kay the PSCI `SYSTEM_OFF` API. This issue will be fixed in a future version of the 3311*c4e8edabSChris Kay model. 3312*c4e8edabSChris Kay- GICv3 support is experimental. There are known issues with GICv3 3313*c4e8edabSChris Kay initialization in the TF-A. 3314*c4e8edabSChris Kay- While this version greatly reduces the on-chip RAM requirements, there are 3315*c4e8edabSChris Kay further RAM usage enhancements that could be made. 3316*c4e8edabSChris Kay- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and 3317*c4e8edabSChris Kay its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. 3318*c4e8edabSChris Kay- The Juno-specific firmware design documentation is incomplete. 3319*c4e8edabSChris Kay 3320*c4e8edabSChris Kay## 1.0 (2014-08-28) 3321*c4e8edabSChris Kay 3322*c4e8edabSChris Kay### New features 3323*c4e8edabSChris Kay 3324*c4e8edabSChris Kay- It is now possible to map higher physical addresses using non-flat virtual to 3325*c4e8edabSChris Kay physical address mappings in the MMU setup. 3326*c4e8edabSChris Kay 3327*c4e8edabSChris Kay- Wider use is now made of the per-CPU data cache in BL3-1 to store: 3328*c4e8edabSChris Kay 3329*c4e8edabSChris Kay - Pointers to the non-secure and secure security state contexts. 3330*c4e8edabSChris Kay - A pointer to the CPU-specific operations. 3331*c4e8edabSChris Kay - A pointer to PSCI specific information (for example the current power 3332*c4e8edabSChris Kay state). 3333*c4e8edabSChris Kay - A crash reporting buffer. 3334*c4e8edabSChris Kay 3335*c4e8edabSChris Kay- The following RAM usage improvements result in a BL3-1 RAM usage reduction 3336*c4e8edabSChris Kay from 96KB to 56KB (for FVP with TSPD), and a total RAM usage reduction across 3337*c4e8edabSChris Kay all images from 208KB to 88KB, compared to the previous release. 3338*c4e8edabSChris Kay 3339*c4e8edabSChris Kay - Removed the separate `early_exception` vectors from BL3-1 (2KB code size 3340*c4e8edabSChris Kay saving). 3341*c4e8edabSChris Kay - Removed NSRAM from the FVP memory map, allowing the removal of one (4KB) 3342*c4e8edabSChris Kay translation table. 3343*c4e8edabSChris Kay - Eliminated the internal `psci_suspend_context` array, saving 2KB. 3344*c4e8edabSChris Kay - Correctly dimensioned the PSCI `aff_map_node` array, saving 1.5KB in the FVP 3345*c4e8edabSChris Kay port. 3346*c4e8edabSChris Kay - Removed calling CPU mpidr from the bakery lock API, saving 160 bytes. 3347*c4e8edabSChris Kay - Removed current CPU mpidr from PSCI common code, saving 160 bytes. 3348*c4e8edabSChris Kay - Inlined the mmio accessor functions, saving 360 bytes. 3349*c4e8edabSChris Kay - Fully reclaimed all BL1 RW memory and BL2 memory on the FVP port by 3350*c4e8edabSChris Kay overlaying the BL3-1/BL3-2 NOBITS sections on top of these at runtime. 3351*c4e8edabSChris Kay - Made storing the FP register context optional, saving 0.5KB per context (8KB 3352*c4e8edabSChris Kay on the FVP port, with TSPD enabled and running on 8 CPUs). 3353*c4e8edabSChris Kay - Implemented a leaner `tf_printf()` function, allowing the stack to be 3354*c4e8edabSChris Kay greatly reduced. 3355*c4e8edabSChris Kay - Removed coherent stacks from the codebase. Stacks allocated in normal memory 3356*c4e8edabSChris Kay are now used before and after the MMU is enabled. This saves 768 bytes per 3357*c4e8edabSChris Kay CPU in BL3-1. 3358*c4e8edabSChris Kay - Reworked the crash reporting in BL3-1 to use less stack. 3359*c4e8edabSChris Kay - Optimized the EL3 register state stored in the `cpu_context` structure so 3360*c4e8edabSChris Kay that registers that do not change during normal execution are re-initialized 3361*c4e8edabSChris Kay each time during cold/warm boot, rather than restored from memory. This 3362*c4e8edabSChris Kay saves about 1.2KB. 3363*c4e8edabSChris Kay - As a result of some of the above, reduced the runtime stack size in all BL 3364*c4e8edabSChris Kay images. For BL3-1, this saves 1KB per CPU. 3365*c4e8edabSChris Kay 3366*c4e8edabSChris Kay- PSCI SMC handler improvements to correctly handle calls from secure states and 3367*c4e8edabSChris Kay from AArch32. 3368*c4e8edabSChris Kay 3369*c4e8edabSChris Kay- CPU contexts are now initialized from the `entry_point_info`. BL3-1 fully 3370*c4e8edabSChris Kay determines the exception level to use for the non-trusted firmware (BL3-3) 3371*c4e8edabSChris Kay based on the SPSR value provided by the BL2 platform code (or otherwise 3372*c4e8edabSChris Kay provided to BL3-1). This allows platform code to directly run non-trusted 3373*c4e8edabSChris Kay firmware payloads at either EL2 or EL1 without requiring an EL2 stub or OS 3374*c4e8edabSChris Kay loader. 3375*c4e8edabSChris Kay 3376*c4e8edabSChris Kay- Code refactoring improvements: 3377*c4e8edabSChris Kay 3378*c4e8edabSChris Kay - Refactored `fvp_config` into a common platform header. 3379*c4e8edabSChris Kay - Refactored the fvp gic code to be a generic driver that no longer has an 3380*c4e8edabSChris Kay explicit dependency on platform code. 3381*c4e8edabSChris Kay - Refactored the CCI-400 driver to not have dependency on platform code. 3382*c4e8edabSChris Kay - Simplified the IO driver so it's no longer necessary to call `io_init()` and 3383*c4e8edabSChris Kay moved all the IO storage framework code to one place. 3384*c4e8edabSChris Kay - Simplified the interface the the TZC-400 driver. 3385*c4e8edabSChris Kay - Clarified the platform porting interface to the TSP. 3386*c4e8edabSChris Kay - Reworked the TSPD setup code to support the alternate BL3-2 initialization 3387*c4e8edabSChris Kay flow where BL3-1 generic code hands control to BL3-2, rather than expecting 3388*c4e8edabSChris Kay the TSPD to hand control directly to BL3-2. 3389*c4e8edabSChris Kay - Considerable rework to PSCI generic code to support CPU specific operations. 3390*c4e8edabSChris Kay 3391*c4e8edabSChris Kay- Improved console log output, by: 3392*c4e8edabSChris Kay 3393*c4e8edabSChris Kay - Adding the concept of debug log levels. 3394*c4e8edabSChris Kay - Rationalizing the existing debug messages and adding new ones. 3395*c4e8edabSChris Kay - Printing out the version of each BL stage at runtime. 3396*c4e8edabSChris Kay - Adding support for printing console output from assembler code, including 3397*c4e8edabSChris Kay when a crash occurs before the C runtime is initialized. 3398*c4e8edabSChris Kay 3399*c4e8edabSChris Kay- Moved up to the latest versions of the FVPs, toolchain, EDK2, kernel, Linaro 3400*c4e8edabSChris Kay file system and DS-5. 3401*c4e8edabSChris Kay 3402*c4e8edabSChris Kay- On the FVP port, made the use of the Trusted DRAM region optional at build 3403*c4e8edabSChris Kay time (off by default). Normal platforms will not have such a "ready-to-use" 3404*c4e8edabSChris Kay DRAM area so it is not a good example to use it. 3405*c4e8edabSChris Kay 3406*c4e8edabSChris Kay- Added support for PSCI `SYSTEM_OFF` and `SYSTEM_RESET` APIs. 3407*c4e8edabSChris Kay 3408*c4e8edabSChris Kay- Added support for CPU specific reset sequences, power down sequences and 3409*c4e8edabSChris Kay register dumping during crash reporting. The CPU specific reset sequences 3410*c4e8edabSChris Kay include support for errata workarounds. 3411*c4e8edabSChris Kay 3412*c4e8edabSChris Kay- Merged the Juno port into the master branch. Added support for CPU hotplug and 3413*c4e8edabSChris Kay CPU idle. Updated the user guide to describe how to build and run on the Juno 3414*c4e8edabSChris Kay platform. 3415*c4e8edabSChris Kay 3416*c4e8edabSChris Kay### Issues resolved since last release 3417*c4e8edabSChris Kay 3418*c4e8edabSChris Kay- Removed the concept of top/bottom image loading. The image loader now 3419*c4e8edabSChris Kay automatically detects the position of the image inside the current memory 3420*c4e8edabSChris Kay layout and updates the layout to minimize fragmentation. This resolves the 3421*c4e8edabSChris Kay image loader limitations of previously releases. There are currently no plans 3422*c4e8edabSChris Kay to support dynamic image loading. 3423*c4e8edabSChris Kay- CPU idle now works on the publicized version of the Foundation FVP. 3424*c4e8edabSChris Kay- All known issues relating to the compiler version used have now been resolved. 3425*c4e8edabSChris Kay This TF-A version uses Linaro toolchain 14.07 (based on GCC 4.9). 3426*c4e8edabSChris Kay 3427*c4e8edabSChris Kay### Known issues 3428*c4e8edabSChris Kay 3429*c4e8edabSChris Kay- GICv3 support is experimental. The Linux kernel patches to support this are 3430*c4e8edabSChris Kay not widely available. There are known issues with GICv3 initialization in the 3431*c4e8edabSChris Kay TF-A. 3432*c4e8edabSChris Kay 3433*c4e8edabSChris Kay- While this version greatly reduces the on-chip RAM requirements, there are 3434*c4e8edabSChris Kay further RAM usage enhancements that could be made. 3435*c4e8edabSChris Kay 3436*c4e8edabSChris Kay- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and 3437*c4e8edabSChris Kay its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. 3438*c4e8edabSChris Kay 3439*c4e8edabSChris Kay- The Juno-specific firmware design documentation is incomplete. 3440*c4e8edabSChris Kay 3441*c4e8edabSChris Kay- Some recent enhancements to the FVP port have not yet been translated into the 3442*c4e8edabSChris Kay Juno port. These will be tracked via the tf-issues project. 3443*c4e8edabSChris Kay 3444*c4e8edabSChris Kay- The Linux kernel version referred to in the user guide has DVFS and HMP 3445*c4e8edabSChris Kay support disabled due to some known instabilities at the time of this release. 3446*c4e8edabSChris Kay A future kernel version will re-enable these features. 3447*c4e8edabSChris Kay 3448*c4e8edabSChris Kay- DS-5 v5.19 does not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in CADI 3449*c4e8edabSChris Kay server mode. This is because the `<SimName>` reported by the FVP in this 3450*c4e8edabSChris Kay version has changed. For example, for the Cortex-A57x4-A53x4 Base FVP, the 3451*c4e8edabSChris Kay `<SimName>` reported by the FVP is `FVP_Base_Cortex_A57x4_A53x4`, while DS-5 3452*c4e8edabSChris Kay expects it to be `FVP_Base_A57x4_A53x4`. 3453*c4e8edabSChris Kay 3454*c4e8edabSChris Kay The temporary fix to this problem is to change the name of the FVP in 3455*c4e8edabSChris Kay `sw/debugger/configdb/Boards/ARM FVP/Base_A57x4_A53x4/cadi_config.xml`. Change 3456*c4e8edabSChris Kay the following line: 3457*c4e8edabSChris Kay 3458*c4e8edabSChris Kay ``` 3459*c4e8edabSChris Kay <SimName>System Generator:FVP_Base_A57x4_A53x4</SimName> 3460*c4e8edabSChris Kay ``` 3461*c4e8edabSChris Kay 3462*c4e8edabSChris Kay to System Generator:FVP_Base_Cortex-A57x4_A53x4 3463*c4e8edabSChris Kay 3464*c4e8edabSChris Kay A similar change can be made to the other Cortex-A57-A53 Base FVP variants. 3465*c4e8edabSChris Kay 3466*c4e8edabSChris Kay## 0.4 (2014-06-03) 3467*c4e8edabSChris Kay 3468*c4e8edabSChris Kay### New features 3469*c4e8edabSChris Kay 3470*c4e8edabSChris Kay- Makefile improvements: 3471*c4e8edabSChris Kay 3472*c4e8edabSChris Kay - Improved dependency checking when building. 3473*c4e8edabSChris Kay - Removed `dump` target (build now always produces dump files). 3474*c4e8edabSChris Kay - Enabled platform ports to optionally make use of parts of the Trusted 3475*c4e8edabSChris Kay Firmware (e.g. BL3-1 only), rather than being forced to use all parts. Also 3476*c4e8edabSChris Kay made the `fip` target optional. 3477*c4e8edabSChris Kay - Specified the full path to source files and removed use of the `vpath` 3478*c4e8edabSChris Kay keyword. 3479*c4e8edabSChris Kay 3480*c4e8edabSChris Kay- Provided translation table library code for potential re-use by platforms 3481*c4e8edabSChris Kay other than the FVPs. 3482*c4e8edabSChris Kay 3483*c4e8edabSChris Kay- Moved architectural timer setup to platform-specific code. 3484*c4e8edabSChris Kay 3485*c4e8edabSChris Kay- Added standby state support to PSCI cpu_suspend implementation. 3486*c4e8edabSChris Kay 3487*c4e8edabSChris Kay- SRAM usage improvements: 3488*c4e8edabSChris Kay 3489*c4e8edabSChris Kay - Started using the `-ffunction-sections`, `-fdata-sections` and 3490*c4e8edabSChris Kay `--gc-sections` compiler/linker options to remove unused code and data from 3491*c4e8edabSChris Kay the images. Previously, all common functions were being built into all 3492*c4e8edabSChris Kay binary images, whether or not they were actually used. 3493*c4e8edabSChris Kay - Placed all assembler functions in their own section to allow more unused 3494*c4e8edabSChris Kay functions to be removed from images. 3495*c4e8edabSChris Kay - Updated BL1 and BL2 to use a single coherent stack each, rather than one per 3496*c4e8edabSChris Kay CPU. 3497*c4e8edabSChris Kay - Changed variables that were unnecessarily declared and initialized as 3498*c4e8edabSChris Kay non-const (i.e. in the .data section) so they are either uninitialized (zero 3499*c4e8edabSChris Kay init) or const. 3500*c4e8edabSChris Kay 3501*c4e8edabSChris Kay- Moved the Test Secure-EL1 Payload (BL3-2) to execute in Trusted SRAM by 3502*c4e8edabSChris Kay default. The option for it to run in Trusted DRAM remains. 3503*c4e8edabSChris Kay 3504*c4e8edabSChris Kay- Implemented a TrustZone Address Space Controller (TZC-400) driver. A default 3505*c4e8edabSChris Kay configuration is provided for the Base FVPs. This means the model parameter 3506*c4e8edabSChris Kay `-C bp.secure_memory=1` is now supported. 3507*c4e8edabSChris Kay 3508*c4e8edabSChris Kay- Started saving the PSCI cpu_suspend 'power_state' parameter prior to 3509*c4e8edabSChris Kay suspending a CPU. This allows platforms that implement multiple power-down 3510*c4e8edabSChris Kay states at the same affinity level to identify a specific state. 3511*c4e8edabSChris Kay 3512*c4e8edabSChris Kay- Refactored the entire codebase to reduce the amount of nesting in header files 3513*c4e8edabSChris Kay and to make the use of system/user includes more consistent. Also split 3514*c4e8edabSChris Kay platform.h to separate out the platform porting declarations from the required 3515*c4e8edabSChris Kay platform porting definitions and the definitions/declarations specific to the 3516*c4e8edabSChris Kay platform port. 3517*c4e8edabSChris Kay 3518*c4e8edabSChris Kay- Optimized the data cache clean/invalidate operations. 3519*c4e8edabSChris Kay 3520*c4e8edabSChris Kay- Improved the BL3-1 unhandled exception handling and reporting. Unhandled 3521*c4e8edabSChris Kay exceptions now result in a dump of registers to the console. 3522*c4e8edabSChris Kay 3523*c4e8edabSChris Kay- Major rework to the handover interface between BL stages, in particular the 3524*c4e8edabSChris Kay interface to BL3-1. The interface now conforms to a specification and is more 3525*c4e8edabSChris Kay future proof. 3526*c4e8edabSChris Kay 3527*c4e8edabSChris Kay- Added support for optionally making the BL3-1 entrypoint a reset handler 3528*c4e8edabSChris Kay (instead of BL1). This allows platforms with an alternative image loading 3529*c4e8edabSChris Kay architecture to re-use BL3-1 with fewer modifications to generic code. 3530*c4e8edabSChris Kay 3531*c4e8edabSChris Kay- Reserved some DDR DRAM for secure use on FVP platforms to avoid future 3532*c4e8edabSChris Kay compatibility problems with non-secure software. 3533*c4e8edabSChris Kay 3534*c4e8edabSChris Kay- Added support for secure interrupts targeting the Secure-EL1 Payload (SP) 3535*c4e8edabSChris Kay (using GICv2 routing only). Demonstrated this working by adding an interrupt 3536*c4e8edabSChris Kay target and supporting test code to the TSP. Also demonstrated non-secure 3537*c4e8edabSChris Kay interrupt handling during TSP processing. 3538*c4e8edabSChris Kay 3539*c4e8edabSChris Kay### Issues resolved since last release 3540*c4e8edabSChris Kay 3541*c4e8edabSChris Kay- Now support use of the model parameter `-C bp.secure_memory=1` in the Base 3542*c4e8edabSChris Kay FVPs (see **New features**). 3543*c4e8edabSChris Kay- Support for secure world interrupt handling now available (see **New 3544*c4e8edabSChris Kay features**). 3545*c4e8edabSChris Kay- Made enough SRAM savings (see **New features**) to enable the Test Secure-EL1 3546*c4e8edabSChris Kay Payload (BL3-2) to execute in Trusted SRAM by default. 3547*c4e8edabSChris Kay- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded 3548*c4e8edabSChris Kay 14.04) now correctly reports progress in the console. 3549*c4e8edabSChris Kay- Improved the Makefile structure to make it easier to separate out parts of the 3550*c4e8edabSChris Kay TF-A for re-use in platform ports. Also, improved target dependency checking. 3551*c4e8edabSChris Kay 3552*c4e8edabSChris Kay### Known issues 3553*c4e8edabSChris Kay 3554*c4e8edabSChris Kay- GICv3 support is experimental. The Linux kernel patches to support this are 3555*c4e8edabSChris Kay not widely available. There are known issues with GICv3 initialization in the 3556*c4e8edabSChris Kay TF-A. 3557*c4e8edabSChris Kay- Dynamic image loading is not available yet. The current image loader 3558*c4e8edabSChris Kay implementation (used to load BL2 and all subsequent images) has some 3559*c4e8edabSChris Kay limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead to 3560*c4e8edabSChris Kay loading errors, even if the images should theoretically fit in memory. 3561*c4e8edabSChris Kay- TF-A still uses too much on-chip Trusted SRAM. A number of RAM usage 3562*c4e8edabSChris Kay enhancements have been identified to rectify this situation. 3563*c4e8edabSChris Kay- CPU idle does not work on the advertised version of the Foundation FVP. Some 3564*c4e8edabSChris Kay FVP fixes are required that are not available externally at the time of 3565*c4e8edabSChris Kay writing. This can be worked around by disabling CPU idle in the Linux kernel. 3566*c4e8edabSChris Kay- Various bugs in TF-A, UEFI and the Linux kernel have been observed when using 3567*c4e8edabSChris Kay Linaro toolchain versions later than 13.11. Although most of these have been 3568*c4e8edabSChris Kay fixed, some remain at the time of writing. These mainly seem to relate to a 3569*c4e8edabSChris Kay subtle change in the way the compiler converts between 64-bit and 32-bit 3570*c4e8edabSChris Kay values (e.g. during casting operations), which reveals previously hidden bugs 3571*c4e8edabSChris Kay in client code. 3572*c4e8edabSChris Kay- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and 3573*c4e8edabSChris Kay its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. 3574*c4e8edabSChris Kay 3575*c4e8edabSChris Kay## 0.3 (2014-02-28) 3576*c4e8edabSChris Kay 3577*c4e8edabSChris Kay### New features 3578*c4e8edabSChris Kay 3579*c4e8edabSChris Kay- Support for Foundation FVP Version 2.0 added. The documented UEFI 3580*c4e8edabSChris Kay configuration disables some devices that are unavailable in the Foundation 3581*c4e8edabSChris Kay FVP, including MMC and CLCD. The resultant UEFI binary can be used on the 3582*c4e8edabSChris Kay AEMv8 and Cortex-A57-A53 Base FVPs, as well as the Foundation FVP. 3583*c4e8edabSChris Kay 3584*c4e8edabSChris Kay \:::\{note} The software will not work on Version 1.0 of the Foundation FVP. 3585*c4e8edabSChris Kay \::: 3586*c4e8edabSChris Kay 3587*c4e8edabSChris Kay- Enabled third party contributions. Added a new contributing.md containing 3588*c4e8edabSChris Kay instructions for how to contribute and updated copyright text in all files to 3589*c4e8edabSChris Kay acknowledge contributors. 3590*c4e8edabSChris Kay 3591*c4e8edabSChris Kay- The PSCI CPU_SUSPEND API has been stabilised to the extent where it can be 3592*c4e8edabSChris Kay used for entry into power down states with the following restrictions: 3593*c4e8edabSChris Kay 3594*c4e8edabSChris Kay - Entry into standby states is not supported. 3595*c4e8edabSChris Kay - The API is only supported on the AEMv8 and Cortex-A57-A53 Base FVPs. 3596*c4e8edabSChris Kay 3597*c4e8edabSChris Kay- The PSCI AFFINITY_INFO api has undergone limited testing on the Base FVPs to 3598*c4e8edabSChris Kay allow experimental use. 3599*c4e8edabSChris Kay 3600*c4e8edabSChris Kay- Required C library and runtime header files are now included locally in TF-A 3601*c4e8edabSChris Kay instead of depending on the toolchain standard include paths. The local 3602*c4e8edabSChris Kay implementation has been cleaned up and reduced in scope. 3603*c4e8edabSChris Kay 3604*c4e8edabSChris Kay- Added I/O abstraction framework, primarily to allow generic code to load 3605*c4e8edabSChris Kay images in a platform-independent way. The existing image loading code has been 3606*c4e8edabSChris Kay reworked to use the new framework. Semi-hosting and NOR flash I/O drivers are 3607*c4e8edabSChris Kay provided. 3608*c4e8edabSChris Kay 3609*c4e8edabSChris Kay- Introduced Firmware Image Package (FIP) handling code and tools. A FIP 3610*c4e8edabSChris Kay combines multiple firmware images with a Table of Contents (ToC) into a single 3611*c4e8edabSChris Kay binary image. The new FIP driver is another type of I/O driver. The Makefile 3612*c4e8edabSChris Kay builds a FIP by default and the FVP platform code expect to load a FIP from 3613*c4e8edabSChris Kay NOR flash, although some support for image loading using semi- hosting is 3614*c4e8edabSChris Kay retained. 3615*c4e8edabSChris Kay 3616*c4e8edabSChris Kay \:::\{note} Building a FIP by default is a non-backwards-compatible change. ::: 3617*c4e8edabSChris Kay 3618*c4e8edabSChris Kay \:::\{note} Generic BL2 code now loads a BL3-3 (non-trusted firmware) image 3619*c4e8edabSChris Kay into DRAM instead of expecting this to be pre-loaded at known location. This 3620*c4e8edabSChris Kay is also a non-backwards-compatible change. ::: 3621*c4e8edabSChris Kay 3622*c4e8edabSChris Kay \:::\{note} Some non-trusted firmware (e.g. UEFI) will need to be rebuilt so 3623*c4e8edabSChris Kay that it knows the new location to execute from and no longer needs to copy 3624*c4e8edabSChris Kay particular code modules to DRAM itself. ::: 3625*c4e8edabSChris Kay 3626*c4e8edabSChris Kay- Reworked BL2 to BL3-1 handover interface. A new composite structure 3627*c4e8edabSChris Kay (bl31_args) holds the superset of information that needs to be passed from BL2 3628*c4e8edabSChris Kay to BL3-1, including information on how handover execution control to BL3-2 (if 3629*c4e8edabSChris Kay present) and BL3-3 (non-trusted firmware). 3630*c4e8edabSChris Kay 3631*c4e8edabSChris Kay- Added library support for CPU context management, allowing the saving and 3632*c4e8edabSChris Kay restoring of 3633*c4e8edabSChris Kay 3634*c4e8edabSChris Kay - Shared system registers between Secure-EL1 and EL1. 3635*c4e8edabSChris Kay - VFP registers. 3636*c4e8edabSChris Kay - Essential EL3 system registers. 3637*c4e8edabSChris Kay 3638*c4e8edabSChris Kay- Added a framework for implementing EL3 runtime services. Reworked the PSCI 3639*c4e8edabSChris Kay implementation to be one such runtime service. 3640*c4e8edabSChris Kay 3641*c4e8edabSChris Kay- Reworked the exception handling logic, making use of both SP_EL0 and SP_EL3 3642*c4e8edabSChris Kay stack pointers for determining the type of exception, managing general purpose 3643*c4e8edabSChris Kay and system register context on exception entry/exit, and handling SMCs. SMCs 3644*c4e8edabSChris Kay are directed to the correct EL3 runtime service. 3645*c4e8edabSChris Kay 3646*c4e8edabSChris Kay- Added support for a Test Secure-EL1 Payload (TSP) and a corresponding 3647*c4e8edabSChris Kay Dispatcher (TSPD), which is loaded as an EL3 runtime service. The TSPD 3648*c4e8edabSChris Kay implements Secure Monitor functionality such as world switching and EL1 3649*c4e8edabSChris Kay context management, and is responsible for communication with the TSP. 3650*c4e8edabSChris Kay 3651*c4e8edabSChris Kay \:::\{note} The TSPD does not yet contain support for secure world interrupts. 3652*c4e8edabSChris Kay \::: 3653*c4e8edabSChris Kay 3654*c4e8edabSChris Kay \:::\{note} The TSP/TSPD is not built by default. ::: 3655*c4e8edabSChris Kay 3656*c4e8edabSChris Kay### Issues resolved since last release 3657*c4e8edabSChris Kay 3658*c4e8edabSChris Kay- Support has been added for switching context between secure and normal worlds 3659*c4e8edabSChris Kay in EL3. 3660*c4e8edabSChris Kay- PSCI API calls `AFFINITY_INFO` & `PSCI_VERSION` have now been tested (to a 3661*c4e8edabSChris Kay limited extent). 3662*c4e8edabSChris Kay- The TF-A build artifacts are now placed in the `./build` directory and 3663*c4e8edabSChris Kay sub-directories instead of being placed in the root of the project. 3664*c4e8edabSChris Kay- TF-A is now free from build warnings. Build warnings are now treated as 3665*c4e8edabSChris Kay errors. 3666*c4e8edabSChris Kay- TF-A now provides C library support locally within the project to maintain 3667*c4e8edabSChris Kay compatibility between toolchains/systems. 3668*c4e8edabSChris Kay- The PSCI locking code has been reworked so it no longer takes locks in an 3669*c4e8edabSChris Kay incorrect sequence. 3670*c4e8edabSChris Kay- The RAM-disk method of loading a Linux file-system has been confirmed to work 3671*c4e8edabSChris Kay with the TF-A and Linux kernel version (based on version 3.13) used in this 3672*c4e8edabSChris Kay release, for both Foundation and Base FVPs. 3673*c4e8edabSChris Kay 3674*c4e8edabSChris Kay### Known issues 3675*c4e8edabSChris Kay 3676*c4e8edabSChris KayThe following is a list of issues which are expected to be fixed in the future 3677*c4e8edabSChris Kayreleases of TF-A. 3678*c4e8edabSChris Kay 3679*c4e8edabSChris Kay- The TrustZone Address Space Controller (TZC-400) is not being programmed yet. 3680*c4e8edabSChris Kay Use of model parameter `-C bp.secure_memory=1` is not supported. 3681*c4e8edabSChris Kay- No support yet for secure world interrupt handling. 3682*c4e8edabSChris Kay- GICv3 support is experimental. The Linux kernel patches to support this are 3683*c4e8edabSChris Kay not widely available. There are known issues with GICv3 initialization in 3684*c4e8edabSChris Kay TF-A. 3685*c4e8edabSChris Kay- Dynamic image loading is not available yet. The current image loader 3686*c4e8edabSChris Kay implementation (used to load BL2 and all subsequent images) has some 3687*c4e8edabSChris Kay limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead to 3688*c4e8edabSChris Kay loading errors, even if the images should theoretically fit in memory. 3689*c4e8edabSChris Kay- TF-A uses too much on-chip Trusted SRAM. Currently the Test Secure-EL1 Payload 3690*c4e8edabSChris Kay (BL3-2) executes in Trusted DRAM since there is not enough SRAM. A number of 3691*c4e8edabSChris Kay RAM usage enhancements have been identified to rectify this situation. 3692*c4e8edabSChris Kay- CPU idle does not work on the advertised version of the Foundation FVP. Some 3693*c4e8edabSChris Kay FVP fixes are required that are not available externally at the time of 3694*c4e8edabSChris Kay writing. 3695*c4e8edabSChris Kay- Various bugs in TF-A, UEFI and the Linux kernel have been observed when using 3696*c4e8edabSChris Kay Linaro toolchain versions later than 13.11. Although most of these have been 3697*c4e8edabSChris Kay fixed, some remain at the time of writing. These mainly seem to relate to a 3698*c4e8edabSChris Kay subtle change in the way the compiler converts between 64-bit and 32-bit 3699*c4e8edabSChris Kay values (e.g. during casting operations), which reveals previously hidden bugs 3700*c4e8edabSChris Kay in client code. 3701*c4e8edabSChris Kay- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded 3702*c4e8edabSChris Kay 14.01) does not report progress correctly in the console. It only seems to 3703*c4e8edabSChris Kay produce error output, not standard output. It otherwise appears to function 3704*c4e8edabSChris Kay correctly. Other filesystem versions on the same software stack do not exhibit 3705*c4e8edabSChris Kay the problem. 3706*c4e8edabSChris Kay- The Makefile structure doesn't make it easy to separate out parts of the TF-A 3707*c4e8edabSChris Kay for re-use in platform ports, for example if only BL3-1 is required in a 3708*c4e8edabSChris Kay platform port. Also, dependency checking in the Makefile is flawed. 3709*c4e8edabSChris Kay- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and 3710*c4e8edabSChris Kay its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. 3711*c4e8edabSChris Kay 3712*c4e8edabSChris Kay## 0.2 (2013-10-25) 3713*c4e8edabSChris Kay 3714*c4e8edabSChris Kay### New features 3715*c4e8edabSChris Kay 3716*c4e8edabSChris Kay- First source release. 3717*c4e8edabSChris Kay- Code for the PSCI suspend feature is supplied, although this is not enabled by 3718*c4e8edabSChris Kay default since there are known issues (see below). 3719*c4e8edabSChris Kay 3720*c4e8edabSChris Kay### Issues resolved since last release 3721*c4e8edabSChris Kay 3722*c4e8edabSChris Kay- The "psci" nodes in the FDTs provided in this release now fully comply with 3723*c4e8edabSChris Kay the recommendations made in the PSCI specification. 3724*c4e8edabSChris Kay 3725*c4e8edabSChris Kay### Known issues 3726*c4e8edabSChris Kay 3727*c4e8edabSChris KayThe following is a list of issues which are expected to be fixed in the future 3728*c4e8edabSChris Kayreleases of TF-A. 3729*c4e8edabSChris Kay 3730*c4e8edabSChris Kay- The TrustZone Address Space Controller (TZC-400) is not being programmed yet. 3731*c4e8edabSChris Kay Use of model parameter `-C bp.secure_memory=1` is not supported. 3732*c4e8edabSChris Kay- No support yet for secure world interrupt handling or for switching context 3733*c4e8edabSChris Kay between secure and normal worlds in EL3. 3734*c4e8edabSChris Kay- GICv3 support is experimental. The Linux kernel patches to support this are 3735*c4e8edabSChris Kay not widely available. There are known issues with GICv3 initialization in 3736*c4e8edabSChris Kay TF-A. 3737*c4e8edabSChris Kay- Dynamic image loading is not available yet. The current image loader 3738*c4e8edabSChris Kay implementation (used to load BL2 and all subsequent images) has some 3739*c4e8edabSChris Kay limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead to 3740*c4e8edabSChris Kay loading errors, even if the images should theoretically fit in memory. 3741*c4e8edabSChris Kay- Although support for PSCI `CPU_SUSPEND` is present, it is not yet stable and 3742*c4e8edabSChris Kay ready for use. 3743*c4e8edabSChris Kay- PSCI API calls `AFFINITY_INFO` & `PSCI_VERSION` are implemented but have not 3744*c4e8edabSChris Kay been tested. 3745*c4e8edabSChris Kay- The TF-A make files result in all build artifacts being placed in the root of 3746*c4e8edabSChris Kay the project. These should be placed in appropriate sub-directories. 3747*c4e8edabSChris Kay- The compilation of TF-A is not free from compilation warnings. Some of these 3748*c4e8edabSChris Kay warnings have not been investigated yet so they could mask real bugs. 3749*c4e8edabSChris Kay- TF-A currently uses toolchain/system include files like stdio.h. It should 3750*c4e8edabSChris Kay provide versions of these within the project to maintain compatibility between 3751*c4e8edabSChris Kay toolchains/systems. 3752*c4e8edabSChris Kay- The PSCI code takes some locks in an incorrect sequence. This may cause 3753*c4e8edabSChris Kay problems with suspend and hotplug in certain conditions. 3754*c4e8edabSChris Kay- The Linux kernel used in this release is based on version 3.12-rc4. Using this 3755*c4e8edabSChris Kay kernel with the TF-A fails to start the file-system as a RAM-disk. It fails to 3756*c4e8edabSChris Kay execute user-space `init` from the RAM-disk. As an alternative, the 3757*c4e8edabSChris Kay VirtioBlock mechanism can be used to provide a file-system to the kernel. 3758*c4e8edabSChris Kay 3759*c4e8edabSChris Kay______________________________________________________________________ 3760*c4e8edabSChris Kay 3761*c4e8edabSChris Kay*Copyright (c) 2013-2020, Arm Limited and Contributors. All rights reserved.* 3762*c4e8edabSChris Kay 3763*c4e8edabSChris Kay[mbed tls releases]: https://tls.mbed.org/tech-updates/releases 3764*c4e8edabSChris Kay[pr#1002]: https://github.com/ARM-software/arm-trusted-firmware/pull/1002#issuecomment-312650193 3765*c4e8edabSChris Kay[sdei specification]: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf 3766*c4e8edabSChris Kay[tf-issue#501]: https://github.com/ARM-software/tf-issues/issues/501 3767