xref: /rk3399_ARM-atf/docs/change-log.md (revision c4e8edab2174fa9be35f6c9b0cee52ec6397ecc7)
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