blob: 7befba437a63d5179814a7c18f88d7e13e4bfa4b [file] [log] [blame]
Paul Beesleyfc9ee362019-03-07 15:47:15 +00001Change Log & Release Notes
2==========================
Douglas Raillard30d7b362017-06-28 16:14:55 +01003
Paul Beesley32379552019-02-11 17:58:21 +00004This document contains a summary of the new features, changes, fixes and known
5issues in each release of Trusted Firmware-A.
Douglas Raillard30d7b362017-06-28 16:14:55 +01006
laurenw-arm80319822020-04-14 16:44:52 -05007Version 2.3
8-----------
9
10New Features
11^^^^^^^^^^^^
12
13- Arm Architecture
14 - Add support for Armv8.4-SecEL2 extension through the SPCI defined SPMD/SPMC
15 components.
16
17 - Build option to support EL2 context save and restore in the secure world
18 (CTX_INCLUDE_EL2_REGS).
19
20 - Add support for SMCCC v1.2 (introducing the new SMCCC_ARCH_SOC_ID SMC).
21 Note that the support is compliant, but the SVE registers save/restore will
22 be done as part of future S-EL2/SPM development.
23
24- BL-specific
25 - Enhanced BL2 bootloader flow to load secure partitions based on firmware
26 configuration data (fconf).
27
28 - Changes necessary to support SEPARATE_NOBITS_REGION feature
29
30 - TSP and BL2_AT_EL3: Add Position Independent Execution ``PIE`` support
31
32- Build System
33 - Add support for documentation build as a target in Makefile
34
35 - Add ``COT`` build option to select the chain of trust to use when the
36 Trusted Boot feature is enabled (default: ``tbbr``).
37
38 - Added creation and injection of secure partition packages into the FIP.
39
40 - Build option to support SPMC component loading and run at S-EL1
41 or S-EL2 (SPMD_SPM_AT_SEL2).
42
43 - Enable MTE support
44
45 - Enable Link Time Optimization in GCC
46
47 - Enable -Wredundant-decls warning check
48
49 - Makefile: Add support to optionally encrypt BL31 and BL32
50
51 - Add support to pass the nt_fw_config DTB to OP-TEE.
52
53 - Introduce per-BL ``CPPFLAGS``, ``ASFLAGS``, and ``LDFLAGS``
54
55 - build_macros: Add CREATE_SEQ function to generate sequence of numbers
56
57- CPU Support
58 - cortex-a57: Enable higher performance non-cacheable load forwarding
59
60 - Hercules: Workaround for Errata 1688305
61
62 - Klein: Support added for Klein CPU
63
64 - Matterhorn: Support added for Matterhorn CPU
65
66- Drivers
67 - auth: Add ``calc_hash`` function for hash calculation. Used for
68 authentication of images when measured boot is enabled.
69
70 - cryptocell: Add authenticated decryption framework, and support
71 for CryptoCell-713 and CryptoCell-712 RSA 3K
72
73 - gic600: Add support for multichip configuration and Clayton
74 - gicv3: Introduce makefile, Add extended PPI and SPI range,
75 Add support for probing multiple GIC Redistributor frames
76 - gicv4: Add GICv4 extension for GIC driver
77
78 - io: Add an IO abstraction layer to load encrypted firmwares
79
80 - mhu: Derive doorbell base address
81
82 - mtd: Add SPI-NOR, SPI-NAND, SPI-MEM, and raw NAND framework
83
84 - scmi: Allow use of multiple SCMI channels
85
86 - scu: Add a driver for snoop control unit
87
88- Libraries
89 - coreboot: Add memory range parsing and use generic base address
90
91 - compiler_rt: Import popcountdi2.c and popcountsi2.c files,
92 aeabi_ldivmode.S file and dependencies
93
94 - debugFS: Add DebugFS functionality
95
96 - el3_runtime: Add support for enabling S-EL2
97
98 - fconf: Add Firmware Configuration Framework (fconf) (experimental).
99
100 - libc: Add memrchr function
101
102 - locks: bakery: Use is_dcache_enabled() helper and add a DMB to
103 the 'read_cache_op' macro
104
105 - psci: Add support to enable different personality of the same soc.
106
107 - xlat_tables_v2: Add support to pass shareability attribute for
108 normal memory region, use get_current_el_maybe_constant() in
109 is_dcache_enabled(), read-only xlat tables for BL31 memory, and
110 add enable_mmu()
111
112- New Platforms Support
113 - arm/arm_fpga: New platform support added for FPGA
114
115 - arm/rddaniel: New platform support added for rd-daniel platform
116
117 - brcm/stingray: New platform support added for Broadcom stingray platform
118
119 - nvidia/tegra194: New platform support for Nvidia Tegra194 platform
120
121- Platforms
122 - allwinner: Implement PSCI system suspend using SCPI, add a msgbox
123 driver for use with SCPI, and reserve and map space for the SCP firmware
124 - allwinner: axp: Add AXP805 support
125 - allwinner: power: Add DLDO4 power rail
126
127 - amlogic: axg: Add a build flag when using ATOS as BL32 and support for
128 the A113D (AXG) platform
129
130 - arm/a5ds: Add ethernet node and L2 cache node in devicetree
131
132 - arm/common: Add support for the new `dualroot` chain of trust
133 - arm/common: Add support for SEPARATE_NOBITS_REGION
134 - arm/common: Re-enable PIE when RESET_TO_BL31=1
135 - arm/common: Allow boards to specify second DRAM Base address
136 and to define PLAT_ARM_TZC_FILTERS
137
138 - arm/cornstone700: Add support for mhuv2 and stack protector
139
140 - arm/fvp: Add support for fconf in BL31 and SP_MIN. Populate power
141 domain desciptor dynamically by leveraging fconf APIs.
142 - arm/fvp: Add Cactus/Ivy Secure Partition information and use two
143 instances of Cactus at S-EL1
144 - arm/fvp: Add support to run BL32 in TDRAM and BL31 in secure DRAM
145 - arm/fvp: Add support for GICv4 extension and BL2 hash calculation in BL1
146
147 - arm/n1sdp: Setup multichip gic routing table, update platform macros
148 for dual-chip setup, introduce platform information SDS region, add
149 support to update presence of External LLC, and enable the
150 NEOVERSE_N1_EXTERNAL_LLC flag
151
152 - arm/rdn1edge: Add support for dual-chip configuration and use
153 CREATE_SEQ helper macro to compare chip count
154
155 - arm/sgm: Always use SCMI for SGM platforms
156 - arm/sgm775: Add support for dynamic config using fconf
157
158 - arm/sgi: Add multi-chip mode parameter in HW_CONFIG dts, macros for
159 remote chip device region, chip_id and multi_chip_mode to platform
160 variant info, and introduce number of chips macro
161
162 - brcm: Add BL2 and BL31 support common across Broadcom platforms
163 - brcm: Add iproc SPI Nor flash support, spi driver, emmc driver,
164 and support to retrieve plat_toc_flags
165
166 - hisilicon: hikey960: Enable system power off callback
167
168 - intel: Enable bridge access, SiP SMC secure register access, and uboot
169 entrypoint support
170 - intel: Implement platform specific system reset 2
171 - intel: Introduce mailbox response length handling
172
173 - imx: console: Use CONSOLE_T_BASE for UART base address and generic console_t
174 data structure
175 - imx8mm: Provide uart base as build option and add the support for opteed spd
176 on imx8mq/imx8mm
177 - imx8qx: Provide debug uart num as build
178 - imx8qm: Apply clk/pinmux configuration for DEBUG_CONSOLE and provide debug
179 uart num as build param
180
181 - marvell: a8k: Implement platform specific power off and add support
182 for loading MG CM3 images
183
184 - mediatek: mt8183: Add Vmodem/Vcore DVS init level
185
186 - qemu: Support optional encryption of BL31 and BL32 images
187 and ARM_LINUX_KERNEL_AS_BL33 to pass FDT address
188 - qemu: Define ARMV7_SUPPORTS_VFP
189 - qemu: Implement PSCI_CPU_OFF and qemu_system_off via semihosting
190
191 - renesas: rcar_gen3: Add new board revision for M3ULCB
192
193 - rockchip: Enable workaround for erratum 855873, claim a macro to enable
194 hdcp feature for DP, enable power domains of rk3399 before reset, add
195 support for UART3 as serial output, and initialize reset and poweroff
196 GPIOs with known invalid value
197
198 - rpi: Implement PSCI CPU_OFF, use MMIO accessor, autodetect Mini-UART
199 vs. PL011 configuration, and allow using PL011 UART for RPi3/RPi4
200 - rpi3: Include GPIO driver in all BL stages and use same "clock-less"
201 setup scheme as RPi4
202 - rpi3/4: Add support for offlining CPUs
203
204 - st: stm32mp1: platform.mk: Support generating multiple images in one build,
205 migrate to implicit rules, derive map file name from target name, generate
206 linker script with fixed name, and use PHONY for the appropriate targets
207 - st: stm32mp1: Add support for SPI-NOR, raw NAND, and SPI-NAND boot device,
208 QSPI, FMC2 driver
209 - st: stm32mp1: Use stm32mp_get_ddr_ns_size() function, set XN attribute for
210 some areas in BL2, dynamically map DDR later and non-cacheable during its
211 test, add a function to get non-secure DDR size, add DT helper for reg by
212 name, and add compilation flags for boot devices
213
214 - socionext: uniphier: Turn on ENABLE_PIE
215
216 - ti: k3: Add PIE support
217
218 - xilinx: versal: Add set wakeup source, client wakeup, query data, request
219 wakeup, PM_INIT_FINALIZE, PM_GET_TRUSTZONE_VERSION, PM IOCTL, support for
220 suspend related, and Get_ChipID APIs
221 - xilinx: versal: Implement power down/restart related EEMI, SMC handler for
222 EEMI, PLL related PM, clock related PM, pin control related PM, reset related
223 PM, device related PM , APIs
224 - xilinx: versal: Enable ipi mailbox service
225 - xilinx: versal: Add get_api_version support and support to send PM API to PMC
226 using IPI
227 - xilinx: zynqmp: Add checksum support for IPI data, GET_CALLBACK_DATA
228 function, support to query max divisor, CLK_SET_RATE_PARENT in gem clock
229 node, support for custom type flags, LPD WDT clock to the pm_clock structure,
230 idcodes for new RFSoC silicons ZU48DR and ZU49DR, and id for new RFSoC device
231 ZU39DR
232
233- Security
234 - Use Speculation Barrier instruction for v8.5+ cores
235
236 - Add support for optional firmware encryption feature (experimental).
237
238 - Introduce a new `dualroot` chain of trust.
239
240 - aarch64: Prevent speculative execution past ERET
241 - aarch32: Stop speculative execution past exception returns.
242
243- SPCI
244 - Introduced the Secure Partition Manager Dispatcher (SPMD) component as a
245 new standard service.
246
247- Tools
248 - cert_create: Introduce CoT build option and TBBR CoT makefile,
249 and define the dualroot CoT
250
251 - encrypt_fw: Add firmware authenticated encryption tool
252
253 - memory: Add show_memory script that prints a representation
254 of the memory layout for the latest build
255
256Changed
257^^^^^^^
258
259- Arm Architecture
260 - PIE: Make call to GDT relocation fixup generalized
261
262- BL-Specific
263 - Increase maximum size of BL2 image
264
265 - BL31: Discard .dynsym .dynstr .hash sections to make ENABLE_PIE work
266 - BL31: Split into two separate memory regions
267
268 - Unify BL linker scripts and reduce code duplication.
269
270- Build System
271 - Changes to drive cert_create for dualroot CoT
272
273 - Enable -Wlogical-op always
274
275 - Enable -Wshadow always
276
277 - Refactor the warning flags
278
279 - PIE: Pass PIE options only to BL31
280
281 - Reduce space lost to object alignment
282
283 - Set lld as the default linker for Clang builds
284
285 - Remove -Wunused-const-variable and -Wpadded warning
286
287 - Remove -Wmissing-declarations warning from WARNING1 level
288
289- Drivers
290 - authentication: Necessary fix in drivers to upgrade to mbedtls-2.18.0
291
292 - console: Integrate UART base address in generic console_t
293
294 - gicv3: Change API for GICR_IPRIORITYR accessors and separate
295 GICD and GICR accessor functions
296
297 - io: Change seek offset to signed long long and panic in case
298 of io setup failure
299
300 - smmu: SMMUv3: Changed retry loop to delay timer
301
302 - tbbr: Reduce size of hash and ECDSA key buffers when possible
303
304- Library Code
305 - libc: Consolidate the size_t, unified, and NULL definitions,
306 and unify intmax_t and uintmax_t on AArch32/64
307
308 - ROMLIB: Optimize memory layout when ROMLIB is used
309
310 - xlat_tables_v2: Use ARRAY_SIZE in REGISTER_XLAT_CONTEXT_FULL_SPEC,
311 merge REGISTER_XLAT_CONTEXT_{FULL_SPEC,RO_BASE_TABLE},
312 and simplify end address checks in mmap_add_region_check()
313
314- Platforms
315 - allwinner: Adjust SRAM A2 base to include the ARISC vectors, clean up MMU
316 setup, reenable USE_COHERENT_MEM, remove unused include path, move the
317 NOBITS region to SRAM A1, convert AXP803 regulator setup code into a driver,
318 enable clock before resetting I2C/RSB
319 - allwinner: h6: power: Switch to using the AXP driver
320 - allwinner: a64: power: Use fdt_for_each_subnode, remove obsolete register
321 check, remove duplicate DT check, and make sunxi_turn_off_soc static
322 - allwinner: Build PMIC bus drivers only in BL31, clean up PMIC-related error
323 handling, and synchronize PMIC enumerations
324
325 - arm/a5ds: Change boot address to point to DDR address
326
327 - arm/common: Check for out-of-bound accesses in the platform io policies
328
329 - arm/corstone700: Updating the kernel arguments to support initramfs,
330 use fdts DDR memory and XIP rootfs, and set UART clocks to 32MHz
331
332 - arm/fvp: Modify multithreaded dts file of DynamIQ FVPs, slightly bump
333 the stack size for bl1 and bl2, remove re-definition of topology related
334 build options, stop reclaiming init code with Clang builds, and map only
335 the needed DRAM region statically in BL31/SP_MIN
336
337 - arm/juno: Maximize space allocated to SCP_BL2
338
339 - arm/sgi: Bump bl1 RW limit, mark remote chip shared ram as non-cacheable,
340 move GIC related constants to board files, include AFF3 affinity in core
341 position calculation, move bl31_platform_setup to board file, and move
342 topology information to board folder
343
344 - common: Refactor load_auth_image_internal().
345
346 - hisilicon: Remove uefi-tools in hikey and hikey960 documentation
347
348 - intel: Modify non secure access function, BL31 address mapping, mailbox's
349 get_config_status, and stratix10 BL31 parameter handling
350 - intel: Remove un-needed checks for qspi driver r/w and s10 unused source code
351 - intel: Change all global sip function to static
352 - intel: Refactor common platform code
353 - intel: Create SiP service header file
354
355
356 - marvell: armada: scp_bl2: Allow loading up to 8 images
357 - marvell: comphy-a3700: Support SGMII COMPHY power off and fix USB3
358 powering on when on lane 2
359 - marvell: Consolidate console register calls
360
361 - mediatek: mt8183: Protect 4GB~8GB dram memory, refine GIC driver for
362 low power scenarios, and switch PLL/CLKSQ/ck_off/axi_26m control to SPM
363
364 - qemu: Update flash address map to keep FIP in secure FLASH0
365
366 - renesas: rcar_gen3: Update IPL and Secure Monitor Rev.2.0.6, update DDR
367 setting for H3, M3, M3N, change fixed destination address of BL31 and BL32,
368 add missing #{address,size}-cells into generated DT, pass DT to OpTee OS,
369 and move DDR drivers out of staging
370
371 - rockchip: Make miniloader ddr_parameter handling optional, cleanup securing
372 of ddr regions, move secure init to separate file, use base+size for secure
373 ddr regions, bring TZRAM_SIZE values in lined, and prevent macro expansion
374 in paths
375
376 - rpi: Move plat_helpers.S to common
377 - rpi3: gpio: Simplify GPIO setup
378 - rpi4: Skip UART initialisation
379
380 - st: stm32m1: Use generic console_t data structure, remove second
381 QSPI flash instance, update for FMC2 pin muxing, and reduce MAX_XLAT_TABLES
382 to 4
383
384 - socionext: uniphier: Make on-chip SRAM and I/O register regions configurable
385 - socionext: uniphier: Make PSCI related, counter control, UART, pinmon, NAND
386 controller, and eMMC controller base addresses configurable
387 - socionext: uniphier: Change block_addressing flag and the return value type
388 of .is_usb_boot() to bool
389 - socionext: uniphier: Run BL33 at EL2, call uniphier_scp_is_running() only
390 when on-chip STM is supported, define PLAT_XLAT_TABLES_DYNAMIC only for BL2,
391 support read-only xlat tables, use enable_mmu() in common function, shrink
392 UNIPHIER_ROM_REGION_SIZE, prepare uniphier_soc_info() for next SoC, extend
393 boot device detection for future SoCs, make all BL images completely
394 position-independent, make uniphier_mmap_setup() work with PIE, pass SCP
395 base address as a function parameter, set buffer offset and length for
396 io_block dynamically, and use more mmap_add_dynamic_region() for loading
397 images
398
399 - spd/trusty: Disable error messages seen during boot, allow gic base to be
400 specified with GICD_BASE, and allow getting trusty memsize from BL32_MEM_SIZE
401 instead of TSP_SEC_MEM_SIZE
402
403 - ti: k3: common: Enable ARM cluster power down and rename device IDs to
404 be more consistent
405 - ti: k3: drivers: ti_sci: Put sequence number in coherent memory and
406 remove indirect structure of const data
407
408 - xilinx: Move ipi mailbox svc to xilinx common
409 - xilinx: zynqmp: Use GIC framework for warm restart
410 - xilinx: zynqmp: pm: Move custom clock flags to typeflags, remove
411 CLK_TOPSW_LSBUS from invalid clock list and rename FPD WDT clock ID
412 - xilinx: versal: Increase OCM memory size for DEBUG builds and adjust
413 cpu clock, Move versal_def.h and versal_private to include directory
414
415- Tools
416 - sptool: Updated sptool to accomodate building secure partition packages.
417
418Resolved Issues
419^^^^^^^^^^^^^^^
420
421- Arm Architecture
422 - Fix crash dump for lower EL
423
424- BL-Specific
425 - Bug fix: Protect TSP prints with lock
426
427 - Fix boot failures on some builds linked with ld.lld.
428
429- Build System
430 - Fix clang build if CC is not in the path.
431
432 - Fix 'BL stage' comment for build macros
433
434- Code Quality
435 - coverity: Fix various MISRA violations including null pointer violations,
436 C issues in BL1/BL2/BL31 and FDT helper functions, using boolean essential,
437 type, and removing unnecessary header file and comparisons to LONG_MAX in
438 debugfs devfip
439
440 - Based on coding guidelines, replace all `unsigned long` depending on if
441 fixed based on AArch32 or AArch64.
442
443 - Unify type of "cpu_idx" and Platform specific defines across PSCI module.
444
445- Drivers
446 - auth: Necessary fix in drivers to upgrade to mbedtls-2.18.0
447
448 - delay_timer: Fix non-standard frequency issue in udelay
449
450 - gicv3: Fix compiler dependent behavior
451 - gic600: Fix include ordering according to the coding style and power up sequence
452
453- Library Code
454 - el3_runtime: Fix stack pointer maintenance on EA handling path,
455 fixup 'cm_setup_context' prototype, and adds TPIDR_EL2 register
456 to the context save restore routines
457
458 - libc: Fix SIZE_MAX on AArch32
459
460 - locks: T589: Fix insufficient ordering guarantees in bakery lock
461
462 - pmf: Fix 'tautological-constant-compare' error, Make the runtime
463 instrumentation work on AArch32, and Simplify PMF helper macro
464 definitions across header files
465
466 - xlat_tables_v2: Fix assembler warning of PLAT_RO_XLAT_TABLES
467
468- Platforms
469 - allwinner: Fix H6 GPIO and CCU memory map addresses and incorrect ARISC
470 code patch offset check
471
472 - arm/a5ds: Correct system freq and Cache Writeback Granule, and cleanup
473 enable-method in devicetree
474
475 - arm/fvp: Fix incorrect GIC mapping, BL31 load address and image size
476 for RESET_TO_BL31=1, topology description of cpus for DynamIQ based
477 FVP, and multithreaded FVP power domain tree
478 - arm/fvp: spm-mm: Correcting instructions to build SPM for FVP
479
480 - arm/common: Fix ROTPK hash generation for ECDSA encryption, BL2 bug in
481 dynamic configuration initialisation, and current RECLAIM_INIT_CODE behavior
482
483 - arm/rde1edge: Fix incorrect topology tree description
484
485 - arm/sgi: Fix the incorrect check for SCMI channel ID
486
487 - common: Flush dcache when storing timestamp
488
489 - intel: Fix UEFI decompression issue, memory calibration, SMC SIP service,
490 mailbox config return status, mailbox driver logic, FPGA manager on
491 reconfiguration, and mailbox send_cmd issue
492
493 - imx: Fix shift-overflow errors, the rdc memory region slot's offset,
494 multiple definition of ipc_handle, missing inclusion of cdefs.h, and
495 correct the SGIs that used for secure interrupt
496
497 - mediatek: mt8183: Fix AARCH64 init fail on CPU0
498
499 - rockchip: Fix definition of struct param_ddr_usage
500
501 - rpi4: Fix documentation of armstub config entry
502
503 - st: Correct io possible NULL pointer dereference and device_size type,
504 nand xor_ecc.val assigned value, static analysis tool issues, and fix
505 incorrect return value and correctly check pwr-regulators node
506
507 - xilinx: zynqmp: Correct syscnt freq for QEMU and fix clock models
508 and IDs of GEM-related clocks
509
510Known Issues
511^^^^^^^^^^^^
512
513- Build System
514 - dtb: DTB creation not supported when building on a Windows host.
515
516 This step in the build process is skipped when running on a Windows host. A
517 known issue from the 1.6 release.
518
519 - Intermittent assertion firing `ASSERT: services/spd/tspd/tspd_main.c:105`
520
521- Coverity
522 - Intermittent Race condition in Coverity Jenkins Build Job
523
524- Platforms
525 - arm/juno: System suspend from Linux does not function as documented in the
526 user guide
527
528 Following the instructions provided in the user guide document does not
529 result in the platform entering system suspend state as expected. A message
530 relating to the hdlcd driver failing to suspend will be emitted on the
531 Linux terminal.
532
533 - mediatek/mt6795: This platform does not build in this release
534
laurenw-arm9ef94462019-10-11 14:10:09 -0500535Version 2.2
536-----------
537
538New Features
539^^^^^^^^^^^^
540
541- Architecture
542 - Enable Pointer Authentication (PAuth) support for Secure World
543 - Adds support for ARMv8.3-PAuth in BL1 SMC calls and
544 BL2U image for firmware updates.
545
546 - Enable Memory Tagging Extension (MTE) support in both secure and non-secure
547 worlds
Louis Mayencourt950ef2f2020-03-27 11:49:20 +0000548
laurenw-arm9ef94462019-10-11 14:10:09 -0500549 - Adds support for the new Memory Tagging Extension arriving in
550 ARMv8.5. MTE support is now enabled by default on systems that
551 support it at EL0.
552 - To enable it at ELx for both the non-secure and the secure
553 world, the compiler flag ``CTX_INCLUDE_MTE_REGS`` includes register
554 saving and restoring when necessary in order to prevent information
555 leakage between the worlds.
556
557 - Add support for Branch Target Identification (BTI)
558
559- Build System
560 - Modify FVP makefile for CPUs that support both AArch64/32
561
562 - AArch32: Allow compiling with soft-float toolchain
563
564 - Makefile: Add default warning flags
565
566 - Add Makefile check for PAuth and AArch64
567
568 - Add compile-time errors for HW_ASSISTED_COHERENCY flag
569
570 - Apply compile-time check for AArch64-only CPUs
571
572 - build_macros: Add mechanism to prevent bin generation.
573
574 - Add support for default stack-protector flag
575
576 - spd: opteed: Enable NS_TIMER_SWITCH
577
578 - plat/arm: Skip BL2U if RESET_TO_SP_MIN flag is set
579
580 - Add new build option to let each platform select which implementation of spinlocks
581 it wants to use
582
583- CPU Support
584 - DSU: Workaround for erratum 798953 and 936184
585
586 - Neoverse N1: Force cacheable atomic to near atomic
587 - Neoverse N1: Workaround for erratum 1073348, 1130799, 1165347, 1207823,
588 1220197, 1257314, 1262606, 1262888, 1275112, 1315703, 1542419
589
590 - Neoverse Zeus: Apply the MSR SSBS instruction
591
laurenw-armc6977622019-10-23 15:39:31 -0500592 - cortex-Hercules/HerculesAE: Support added for Cortex-Hercules and
593 Cortex-HerculesAE CPUs
594 - cortex-Hercules/HerculesAE: Enable AMU for Cortex-Hercules and Cortex-HerculesAE
595
laurenw-arm9ef94462019-10-11 14:10:09 -0500596 - cortex-a76AE: Support added for Cortex-A76AE CPU
597 - cortex-a76: Workaround for erratum 1257314, 1262606, 1262888, 1275112,
598 1286807
599
600 - cortex-a65/a65AE: Support added for Cortex-A65 and Cortex-A65AE CPUs
601 - cortex-a65: Enable AMU for Cortex-A65
602
603 - cortex-a55: Workaround for erratum 1221012
604
605 - cortex-a35: Workaround for erratum 855472
606
607 - cortex-a9: Workaround for erratum 794073
608
609- Drivers
610 - console: Allow the console to register multiple times
611
612 - delay: Timeout detection support
613
614 - gicv3: Enabled multi-socket GIC redistributor frame discovery and migrated
615 ARM platforms to the new API
Louis Mayencourt950ef2f2020-03-27 11:49:20 +0000616
laurenw-arm9ef94462019-10-11 14:10:09 -0500617 - Adds ``gicv3_rdistif_probe`` function that delegates the responsibility
618 of discovering the corresponding redistributor base frame to each CPU
619 itself.
620
621 - sbsa: Add SBSA watchdog driver
622
623 - st/stm32_hash: Add HASH driver
624
625 - ti/uart: Add an AArch32 variant
626
627- Library at ROM (romlib)
628 - Introduce BTI support in Library at ROM (romlib)
629
630- New Platforms Support
631 - amlogic: g12a: New platform support added for the S905X2 (G12A) platform
632 - amlogic: meson/gxl: New platform support added for Amlogic Meson
633 S905x (GXL)
634
635 - arm/a5ds: New platform support added for A5 DesignStart
636
637 - arm/corstone: New platform support added for Corstone-700
638
639 - intel: New platform support added for Agilex
640
641 - mediatek: New platform support added for MediaTek mt8183
642
643 - qemu/qemu_sbsa: New platform support added for QEMU SBSA platform
644
645 - renesas/rcar_gen3: plat: New platform support added for D3
646
647 - rockchip: New platform support added for px30
648 - rockchip: New platform support added for rk3288
649
650 - rpi: New platform support added for Raspberry Pi 4
651
652- Platforms
653 - arm/common: Introduce wrapper functions to setup secure watchdog
654
655 - arm/fvp: Add Delay Timer driver to BL1 and BL31 and option for defining
656 platform DRAM2 base
657 - arm/fvp: Add Linux DTS files for 32 bit threaded FVPs
658
659 - arm/n1sdp: Add code for DDR ECC enablement and BL33 copy to DDR, Initialise CNTFRQ
660 in Non Secure CNTBaseN
661
662 - arm/juno: Use shared mbedtls heap between BL1 and BL2 and add basic support for
663 dynamic config
664
665 - imx: Basic support for PicoPi iMX7D, rdc module init, caam module init,
666 aipstz init, IMX_SIP_GET_SOC_INFO, IMX_SIP_BUILDINFO added
667
668 - intel: Add ncore ccu driver
669
670 - mediatek/mt81*: Use new bl31_params_parse() helper
671
672 - nvidia: tegra: Add support for multi console interface
673
674 - qemu/qemu_sbsa: Adding memory mapping for both FLASH0/FLASH1
675 - qemu: Added gicv3 support, new console interface in AArch32, and sub-platforms
676
677 - renesas/rcar_gen3: plat: Add R-Car V3M support, new board revision for H3ULCB, DBSC4
678 setting before self-refresh mode
679
680 - socionext/uniphier: Support console based on multi-console
681
682 - st: stm32mp1: Add OP-TEE, Avenger96, watchdog, LpDDR3, authentication support
683 and general SYSCFG management
684
685 - ti/k3: common: Add support for J721E, Use coherent memory for shared data, Trap all
686 asynchronous bus errors to EL3
687
688 - xilinx/zynqmp: Add support for multi console interface, Initialize IPI table from
689 zynqmp_config_setup()
690
691- PSCI
692 - Adding new optional PSCI hook ``pwr_domain_on_finish_late``
693 - This PSCI hook ``pwr_domain_on_finish_late`` is similar to
694 ``pwr_domain_on_finish`` but is guaranteed to be invoked when the
695 respective core and cluster are participating in coherency.
696
697- Security
698 - Speculative Store Bypass Safe (SSBS): Further enhance protection against Spectre
699 variant 4 by disabling speculative loads/stores (SPSR.SSBS bit) by default.
700
701 - UBSAN support and handlers
702 - Adds support for the Undefined Behaviour sanitizer. There are two types of
703 support offered - minimalistic trapping support which essentially immediately
704 crashes on undefined behaviour and full support with full debug messages.
705
706- Tools
707 - cert_create: Add support for bigger RSA key sizes (3KB and 4KB),
708 previously the maximum size was 2KB.
709
710 - fiptool: Add support to build fiptool on Windows.
711
712
713Changed
714^^^^^^^
715
716- Architecture
717 - Refactor ARMv8.3 Pointer Authentication support code
718
719 - backtrace: Strip PAC field when PAUTH is enabled
720
721 - Prettify crash reporting output on AArch64.
722
723 - Rework smc_unknown return code path in smc_handler
724 - Leverage the existing ``el3_exit()`` return routine for smc_unknown return
725 path rather than a custom set of instructions.
726
727- BL-Specific
728 - Invalidate dcache build option for BL2 entry at EL3
729
730 - Add missing support for BL2_AT_EL3 in XIP memory
731
732- Boot Flow
733 - Add helper to parse BL31 parameters (both versions)
734
735 - Factor out cross-BL API into export headers suitable for 3rd party code
736
737 - Introduce lightweight BL platform parameter library
738
739- Drivers
740 - auth: Memory optimization for Chain of Trust (CoT) description
741
742 - bsec: Move bsec_mode_is_closed_device() service to platform
743
744 - cryptocell: Move Cryptocell specific API into driver
745
746 - gicv3: Prevent pending G1S interrupt from becoming G0 interrupt
747
748 - mbedtls: Remove weak heap implementation
749
750 - mmc: Increase delay between ACMD41 retries
751 - mmc: stm32_sdmmc2: Correctly manage block size
752 - mmc: stm32_sdmmc2: Manage max-frequency property from DT
753
754 - synopsys/emmc: Do not change FIFO TH as this breaks some platforms
755 - synopsys: Update synopsys drivers to not rely on undefined overflow behaviour
756
757 - ufs: Extend the delay after reset to wait for some slower chips
758
759- Platforms
760 - amlogic/meson/gxl: Remove BL2 dependency from BL31
761
762 - arm/common: Shorten the Firmware Update (FWU) process
763
764 - arm/fvp: Remove GIC initialisation from secondary core cold boot
765
766 - arm/sgm: Temporarily disable shared Mbed TLS heap for SGM
767
768 - hisilicon: Update hisilicon drivers to not rely on undefined overflow behaviour
769
770 - imx: imx8: Replace PLAT_IMX8* with PLAT_imx8*, remove duplicated linker symbols and
771 deprecated code include, keep only IRQ 32 unmasked, enable all power domain by default
772
773 - marvell: Prevent SError accessing PCIe link, Switch to xlat_tables_v2, do not rely on
774 argument passed via smc, make sure that comphy init will use correct address
775
776 - mediatek: mt8173: Refactor RTC and PMIC drivers
777 - mediatek: mt8173: Apply MULTI_CONSOLE framework
778
779 - nvidia: Tegra: memctrl_v2: fix "overflow before widen" coverity issue
780
781 - qemu: Simplify the image size calculation, Move and generalise FDT PSCI fixup, move
782 gicv2 codes to separate file
783
784 - renesas/rcar_gen3: Convert to multi-console API, update QoS setting, Update IPL and
785 Secure Monitor Rev2.0.4, Change to restore timer counter value at resume, Update DDR
786 setting rev.0.35, qos: change subslot cycle, Change periodic write DQ training option.
787
788 - rockchip: Allow SOCs with undefined wfe check bits, Streamline and complete UARTn_BASE
789 macros, drop rockchip-specific imported linker symbols for bl31, Disable binary generation
790 for all SOCs, Allow console device to be set by DTB, Use new bl31_params_parse functions
791
792 - rpi/rpi3: Move shared rpi3 files into common directory
793
794 - socionext/uniphier: Set CONSOLE_FLAG_TRANSLATE_CRLF and clean up console driver
795 - socionext/uniphier: Replace DIV_ROUND_UP() with div_round_up() from utils_def.h
796
797 - st/stm32mp: Split stm32mp_io_setup function, move stm32_get_gpio_bank_clock() to private
798 file, correctly handle Clock Spreading Generator, move oscillator functions to generic file,
799 realign device tree files with internal devs, enable RTCAPB clock for dual-core chips, use a
800 common function to check spinlock is available, move check_header() to common code
801
802 - ti/k3: Enable SEPARATE_CODE_AND_RODATA by default, Remove shared RAM space,
803 Drop _ADDRESS from K3_USART_BASE to match other defines, Remove MSMC port
804 definitions, Allow USE_COHERENT_MEM for K3, Set L2 latency on A72 cores
805
806- PSCI
807 - PSCI: Lookup list of parent nodes to lock only once
808
809- Secure Partition Manager (SPM): SPCI Prototype
810 - Fix service UUID lookup
811
812 - Adjust size of virtual address space per partition
813
814 - Refactor xlat context creation
815
816 - Move shim layer to TTBR1_EL1
817
818 - Ignore empty regions in resource description
819
820- Security
821 - Refactor SPSR initialisation code
822
823 - SMMUv3: Abort DMA transactions
824 - For security DMA should be blocked at the SMMU by default unless explicitly
825 enabled for a device. SMMU is disabled after reset with all streams bypassing
826 the SMMU, and abortion of all incoming transactions implements a default deny
827 policy on reset.
828 - Moves ``bl1_platform_setup()`` function from arm_bl1_setup.c to FVP platforms'
829 fvp_bl1_setup.c and fvp_ve_bl1_setup.c files.
830
831- Tools
832 - cert_create: Remove RSA PKCS#1 v1.5 support
833
834
835Resolved Issues
836^^^^^^^^^^^^^^^
837
838- Architecture
839 - Fix the CAS spinlock implementation by adding a missing DSB in ``spin_unlock()``
840
841 - AArch64: Fix SCTLR bit definitions
842 - Removes incorrect ``SCTLR_V_BIT`` definition and adds definitions for
843 ARMv8.3-Pauth `EnIB`, `EnDA` and `EnDB` bits.
844
845 - Fix restoration of PAuth context
846 - Replace call to ``pauth_context_save()`` with ``pauth_context_restore()`` in
847 case of unknown SMC call.
848
849- BL-Specific Issues
850 - Fix BL31 crash reporting on AArch64 only platforms
851
852- Build System
853 - Remove several warnings reported with W=2 and W=1
854
855- Code Quality Issues
856 - SCTLR and ACTLR are 32-bit for AArch32 and 64-bit for AArch64
857 - Unify type of "cpu_idx" across PSCI module.
858 - Assert if power level value greater then PSCI_INVALID_PWR_LVL
859 - Unsigned long should not be used as per coding guidelines
860 - Reduce the number of memory leaks in cert_create
861 - Fix type of cot_desc_ptr
862 - Use explicit-width data types in AAPCS parameter structs
863 - Add python configuration for editorconfig
864 - BL1: Fix type consistency
865
866 - Enable -Wshift-overflow=2 to check for undefined shift behavior
867 - Updated upstream platforms to not rely on undefined overflow behaviour
868
869- Coverity Quality Issues
870 - Remove GGC ignore -Warray-bounds
871 - Fix Coverity #261967, Infinite loop
872 - Fix Coverity #343017, Missing unlock
873 - Fix Coverity #343008, Side affect in assertion
874 - Fix Coverity #342970, Uninitialized scalar variable
875
876- CPU Support
877 - cortex-a12: Fix MIDR mask
878
879- Drivers
880 - console: Remove Arm console unregister on suspend
881
882 - gicv3: Fix support for full SPI range
883
884 - scmi: Fix wrong payload length
885
886- Library Code
887 - libc: Fix sparse warning for __assert()
888
889 - libc: Fix memchr implementation
890
891- Platforms
892 - rpi: rpi3: Fix compilation error when stack protector is enabled
893
894 - socionext/uniphier: Fix compilation fail for SPM support build config
895
896 - st/stm32mp1: Fix TZC400 configuration against non-secure DDR
897
898 - ti/k3: common: Fix RO data area size calculation
899
900- Security
901 - AArch32: Disable Secure Cycle Counter
902 - Changes the implementation for disabling Secure Cycle Counter.
903 For ARMv8.5 the counter gets disabled by setting ``SDCR.SCCD`` bit on
904 CPU cold/warm boot. For the earlier architectures PMCR register is
905 saved/restored on secure world entry/exit from/to Non-secure state,
906 and cycle counting gets disabled by setting PMCR.DP bit.
907 - AArch64: Disable Secure Cycle Counter
908 - For ARMv8.5 the counter gets disabled by setting ``MDCR_El3.SCCD`` bit on
909 CPU cold/warm boot. For the earlier architectures PMCR_EL0 register is
910 saved/restored on secure world entry/exit from/to Non-secure state,
911 and cycle counting gets disabled by setting PMCR_EL0.DP bit.
912
913Deprecations
914^^^^^^^^^^^^
915
916- Common Code
917 - Remove MULTI_CONSOLE_API flag and references to it
918
919 - Remove deprecated `plat_crash_console_*`
920
921 - Remove deprecated interfaces `get_afflvl_shift`, `mpidr_mask_lower_afflvls`, `eret`
922
923 - AARCH32/AARCH64 macros are now deprecated in favor of ``__aarch64__``
924
925 - ``__ASSEMBLY__`` macro is now deprecated in favor of ``__ASSEMBLER__``
926
927- Drivers
928 - console: Removed legacy console API
929 - console: Remove deprecated finish_console_register
930
931 - tzc: Remove deprecated types `tzc_action_t` and `tzc_region_attributes_t`
932
933- Secure Partition Manager (SPM):
934 - Prototype SPCI-based SPM (services/std_svc/spm) will be replaced with alternative
935 methods of secure partitioning support.
936
937Known Issues
938^^^^^^^^^^^^
939
940- Build System Issues
941 - dtb: DTB creation not supported when building on a Windows host.
942
943 This step in the build process is skipped when running on a Windows host. A
944 known issue from the 1.6 release.
945
946- Platform Issues
947 - arm/juno: System suspend from Linux does not function as documented in the
948 user guide
949
950 Following the instructions provided in the user guide document does not
951 result in the platform entering system suspend state as expected. A message
952 relating to the hdlcd driver failing to suspend will be emitted on the
953 Linux terminal.
954
955 - mediatek/mt6795: This platform does not build in this release
956
Paul Beesley32379552019-02-11 17:58:21 +0000957Version 2.1
958-----------
Paul Beesleybbf48042019-03-25 12:21:57 +0000959
960New Features
Paul Beesley32379552019-02-11 17:58:21 +0000961^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000962
963- Architecture
964 - Support for ARMv8.3 pointer authentication in the normal and secure worlds
965
966 The use of pointer authentication in the normal world is enabled whenever
967 architectural support is available, without the need for additional build
968 flags.
969
970 Use of pointer authentication in the secure world remains an
971 experimental configuration at this time. Using both the ``ENABLE_PAUTH``
972 and ``CTX_INCLUDE_PAUTH_REGS`` build flags, pointer authentication can be
973 enabled in EL3 and S-EL1/0.
974
Paul Beesleyf8640672019-04-12 14:19:42 +0100975 See the :ref:`Firmware Design` document for additional details on the use
976 of pointer authentication.
Paul Beesleybbf48042019-03-25 12:21:57 +0000977
978 - Enable Data Independent Timing (DIT) in EL3, where supported
979
980- Build System
981 - Support for BL-specific build flags
982
983 - Support setting compiler target architecture based on ``ARM_ARCH_MINOR``
984 build option.
985
986 - New ``RECLAIM_INIT_CODE`` build flag:
987
988 A significant amount of the code used for the initialization of BL31 is
989 not needed again after boot time. In order to reduce the runtime memory
990 footprint, the memory used for this code can be reclaimed after
991 initialization.
992
993 Certain boot-time functions were marked with the ``__init`` attribute to
994 enable this reclamation.
995
996- CPU Support
997 - cortex-a76: Workaround for erratum 1073348
998 - cortex-a76: Workaround for erratum 1220197
999 - cortex-a76: Workaround for erratum 1130799
1000
1001 - cortex-a75: Workaround for erratum 790748
1002 - cortex-a75: Workaround for erratum 764081
1003
1004 - cortex-a73: Workaround for erratum 852427
1005 - cortex-a73: Workaround for erratum 855423
1006
1007 - cortex-a57: Workaround for erratum 817169
1008 - cortex-a57: Workaround for erratum 814670
1009
1010 - cortex-a55: Workaround for erratum 903758
1011 - cortex-a55: Workaround for erratum 846532
1012 - cortex-a55: Workaround for erratum 798797
1013 - cortex-a55: Workaround for erratum 778703
1014 - cortex-a55: Workaround for erratum 768277
1015
1016 - cortex-a53: Workaround for erratum 819472
1017 - cortex-a53: Workaround for erratum 824069
1018 - cortex-a53: Workaround for erratum 827319
1019
1020 - cortex-a17: Workaround for erratum 852423
1021 - cortex-a17: Workaround for erratum 852421
1022
1023 - cortex-a15: Workaround for erratum 816470
1024 - cortex-a15: Workaround for erratum 827671
1025
1026- Documentation
1027 - Exception Handling Framework documentation
1028
1029 - Library at ROM (romlib) documentation
1030
1031 - RAS framework documentation
1032
1033 - Coding Guidelines document
1034
1035- Drivers
1036 - ccn: Add API for setting and reading node registers
1037 - Adds ``ccn_read_node_reg`` function
1038 - Adds ``ccn_write_node_reg`` function
1039
1040 - partition: Support MBR partition entries
1041
1042 - scmi: Add ``plat_css_get_scmi_info`` function
1043
1044 Adds a new API ``plat_css_get_scmi_info`` which lets the platform
1045 register a platform-specific instance of ``scmi_channel_plat_info_t`` and
1046 remove the default values
1047
Paul Beesleybd1c4162019-03-29 10:14:56 +00001048 - tzc380: Add TZC-380 TrustZone Controller driver
Paul Beesleybbf48042019-03-25 12:21:57 +00001049
1050 - tzc-dmc620: Add driver to manage the TrustZone Controller within the
1051 DMC-620 Dynamic Memory Controller
1052
1053- Library at ROM (romlib)
1054 - Add platform-specific jump table list
1055
1056 - Allow patching of romlib functions
1057
1058 This change allows patching of functions in the romlib. This can be done by
1059 adding "patch" at the end of the jump table entry for the function that
1060 needs to be patched in the file jmptbl.i.
1061
1062- Library Code
1063 - Support non-LPAE-enabled MMU tables in AArch32
1064
1065 - mmio: Add ``mmio_clrsetbits_16`` function
1066 - 16-bit variant of ``mmio_clrsetbits``
1067
1068 - object_pool: Add Object Pool Allocator
1069 - Manages object allocation using a fixed-size static array
1070 - Adds ``pool_alloc`` and ``pool_alloc_n`` functions
1071 - Does not provide any functions to free allocated objects (by design)
1072
1073 - libc: Added ``strlcpy`` function
1074
1075 - libc: Import ``strrchr`` function from FreeBSD
1076
1077 - xlat_tables: Add support for ARMv8.4-TTST
1078
1079 - xlat_tables: Support mapping regions without an explicitly specified VA
1080
1081- Math
1082 - Added softudiv macro to support software division
1083
1084- Memory Partitioning And Monitoring (MPAM)
1085 - Enabled MPAM EL2 traps (``MPAMHCR_EL2`` and ``MPAM_EL2``)
1086
1087- Platforms
1088 - amlogic: Add support for Meson S905 (GXBB)
1089
1090 - arm/fvp_ve: Add support for FVP Versatile Express platform
1091
1092 - arm/n1sdp: Add support for Neoverse N1 System Development platform
1093
1094 - arm/rde1edge: Add support for Neoverse E1 platform
1095
1096 - arm/rdn1edge: Add support for Neoverse N1 platform
1097
1098 - arm: Add support for booting directly to Linux without an intermediate
1099 loader (AArch32)
1100
1101 - arm/juno: Enable new CPU errata workarounds for A53 and A57
1102
1103 - arm/juno: Add romlib support
1104
1105 Building a combined BL1 and ROMLIB binary file with the correct page
1106 alignment is now supported on the Juno platform. When ``USE_ROMLIB`` is set
1107 for Juno, it generates the combined file ``bl1_romlib.bin`` which needs to
1108 be used instead of bl1.bin.
1109
1110 - intel/stratix: Add support for Intel Stratix 10 SoC FPGA platform
1111
1112 - marvell: Add support for Armada-37xx SoC platform
1113
1114 - nxp: Add support for i.MX8M and i.MX7 Warp7 platforms
1115
1116 - renesas: Add support for R-Car Gen3 platform
1117
1118 - xilinx: Add support for Versal ACAP platforms
1119
1120- Position-Independent Executable (PIE)
1121
1122 PIE support has initially been added to BL31. The ``ENABLE_PIE`` build flag is
1123 used to enable or disable this functionality as required.
1124
1125- Secure Partition Manager
Paul Beesleybd1c4162019-03-29 10:14:56 +00001126 - New SPM implementation based on SPCI Alpha 1 draft specification
Paul Beesleybbf48042019-03-25 12:21:57 +00001127
Paul Beesleybd1c4162019-03-29 10:14:56 +00001128 A new version of SPM has been implemented, based on the SPCI (Secure
1129 Partition Client Interface) and SPRT (Secure Partition Runtime) draft
1130 specifications.
Paul Beesleybbf48042019-03-25 12:21:57 +00001131
1132 The new implementation is a prototype that is expected to undergo intensive
1133 rework as the specifications change. It has basic support for multiple
1134 Secure Partitions and Resource Descriptions.
1135
Paul Beesleybd1c4162019-03-29 10:14:56 +00001136 The older version of SPM, based on MM (ARM Management Mode Interface
Paul Beesleybbf48042019-03-25 12:21:57 +00001137 Specification), is still present in the codebase. A new build flag,
1138 ``SPM_MM`` has been added to allow selection of the desired implementation.
1139 This flag defaults to 1, selecting the MM-based implementation.
1140
1141- Security
1142 - Spectre Variant-1 mitigations (``CVE-2017-5753``)
1143
1144 - Use Speculation Store Bypass Safe (SSBS) functionality where available
1145
1146 Provides mitigation against ``CVE-2018-19440`` (Not saving x0 to x3
1147 registers can leak information from one Normal World SMC client to another)
1148
1149
1150Changed
Paul Beesley32379552019-02-11 17:58:21 +00001151^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +00001152
1153- Build System
1154 - Warning levels are now selectable with ``W=<1,2,3>``
1155
1156 - Removed unneeded include paths in PLAT_INCLUDES
1157
1158 - "Warnings as errors" (Werror) can be disabled using ``E=0``
1159
1160 - Support totally quiet output with ``-s`` flag
1161
1162 - Support passing options to checkpatch using ``CHECKPATCH_OPTS=<opts>``
1163
1164 - Invoke host compiler with ``HOSTCC / HOSTCCFLAGS`` instead of ``CC / CFLAGS``
1165
1166 - Make device tree pre-processing similar to U-boot/Linux by:
1167 - Creating separate ``CPPFLAGS`` for DT preprocessing so that compiler
1168 options specific to it can be accommodated.
1169 - Replacing ``CPP`` with ``PP`` for DT pre-processing
1170
1171- CPU Support
1172 - Errata report function definition is now mandatory for CPU support files
1173
1174 CPU operation files must now define a ``<name>_errata_report`` function to
1175 print errata status. This is no longer a weak reference.
1176
1177- Documentation
1178 - Migrated some content from GitHub wiki to ``docs/`` directory
1179
1180 - Security advisories now have CVE links
1181
1182 - Updated copyright guidelines
1183
Paul Beesleybbf48042019-03-25 12:21:57 +00001184- Drivers
1185 - console: The ``MULTI_CONSOLE_API`` framework has been rewritten in C
Paul Beesleybd1c4162019-03-29 10:14:56 +00001186
Paul Beesleybbf48042019-03-25 12:21:57 +00001187 - console: Ported multi-console driver to AArch32
1188
1189 - gic: Remove 'lowest priority' constants
1190
1191 Removed ``GIC_LOWEST_SEC_PRIORITY`` and ``GIC_LOWEST_NS_PRIORITY``.
1192 Platforms should define these if required, or instead determine the correct
1193 priority values at runtime.
1194
1195 - delay_timer: Check that the Generic Timer extension is present
1196
1197 - mmc: Increase command reply timeout to 10 milliseconds
1198
1199 - mmc: Poll eMMC device status to ensure ``EXT_CSD`` command completion
1200
1201 - mmc: Correctly check return code from ``mmc_fill_device_info``
1202
1203- External Libraries
1204
1205 - libfdt: Upgraded from 1.4.2 to 1.4.6-9
1206
1207 - mbed TLS: Upgraded from 2.12 to 2.16
1208
1209 This change incorporates fixes for security issues that should be reviewed
1210 to determine if they are relevant for software implementations using
1211 Trusted Firmware-A. See the `mbed TLS releases`_ page for details on
1212 changes from the 2.12 to the 2.16 release.
1213
1214- Library Code
1215 - compiler-rt: Updated ``lshrdi3.c`` and ``int_lib.h`` with changes from
1216 LLVM master branch (r345645)
1217
1218 - cpu: Updated macro that checks need for ``CVE-2017-5715`` mitigation
1219
1220 - libc: Made setjmp and longjmp C standard compliant
1221
1222 - libc: Allowed overriding the default libc (use ``OVERRIDE_LIBC``)
1223
1224 - libc: Moved setjmp and longjmp to the ``libc/`` directory
1225
1226- Platforms
1227 - Removed Mbed TLS dependency from plat_bl_common.c
1228
1229 - arm: Removed unused ``ARM_MAP_BL_ROMLIB`` macro
1230
1231 - arm: Removed ``ARM_BOARD_OPTIMISE_MEM`` feature and build flag
1232
1233 - arm: Moved several components into ``drivers/`` directory
1234
1235 This affects the SDS, SCP, SCPI, MHU and SCMI components
1236
1237 - arm/juno: Increased maximum BL2 image size to ``0xF000``
1238
1239 This change was required to accommodate a larger ``libfdt`` library
1240
1241- SCMI
1242 - Optimized bakery locks when hardware-assisted coherency is enabled using the
1243 ``HW_ASSISTED_COHERENCY`` build flag
1244
1245- SDEI
1246 - Added support for unconditionally resuming secure world execution after
Paul Beesley606d8072019-03-13 13:58:02 +00001247 |SDEI| event processing completes
Paul Beesleybbf48042019-03-25 12:21:57 +00001248
Paul Beesley606d8072019-03-13 13:58:02 +00001249 |SDEI| interrupts, although targeting EL3, occur on behalf of the non-secure
Paul Beesleybbf48042019-03-25 12:21:57 +00001250 world, and may have higher priority than secure world
1251 interrupts. Therefore they might preempt secure execution and yield
Paul Beesley606d8072019-03-13 13:58:02 +00001252 execution to the non-secure |SDEI| handler. Upon completion of |SDEI| event
Paul Beesleybbf48042019-03-25 12:21:57 +00001253 handling, resume secure execution if it was preempted.
1254
1255- Translation Tables (XLAT)
1256 - Dynamically detect need for ``Common not Private (TTBRn_ELx.CnP)`` bit
1257
1258 Properly handle the case where ``ARMv8.2-TTCNP`` is implemented in a CPU
1259 that does not implement all mandatory v8.2 features (and so must claim to
1260 implement a lower architecture version).
1261
1262
1263Resolved Issues
Paul Beesley32379552019-02-11 17:58:21 +00001264^^^^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +00001265
1266- Architecture
1267 - Incorrect check for SSBS feature detection
1268
1269 - Unintentional register clobber in AArch32 reset_handler function
1270
1271- Build System
1272 - Dependency issue during DTB image build
1273
1274 - Incorrect variable expansion in Arm platform makefiles
1275
1276 - Building on Windows with verbose mode (``V=1``) enabled is broken
1277
1278 - AArch32 compilation flags is missing ``$(march32-directive)``
1279
1280- BL-Specific Issues
1281 - bl2: ``uintptr_t is not defined`` error when ``BL2_IN_XIP_MEM`` is defined
1282
1283 - bl2: Missing prototype warning in ``bl2_arch_setup``
1284
1285 - bl31: Omission of Global Offset Table (GOT) section
1286
1287- Code Quality Issues
1288 - Multiple MISRA compliance issues
1289
1290 - Potential NULL pointer dereference (Coverity-detected)
1291
1292- Drivers
1293 - mmc: Local declaration of ``scr`` variable causes a cache issue when
1294 invalidating after the read DMA transfer completes
1295
1296 - mmc: ``ACMD41`` does not send voltage information during initialization,
1297 resulting in the command being treated as a query. This prevents the
1298 command from initializing the controller.
1299
1300 - mmc: When checking device state using ``mmc_device_state()`` there are no
1301 retries attempted in the event of an error
1302
1303 - ccn: Incorrect Region ID calculation for RN-I nodes
1304
1305 - console: ``Fix MULTI_CONSOLE_API`` when used as a crash console
1306
1307 - partition: Improper NULL checking in gpt.c
1308
1309 - partition: Compilation failure in ``VERBOSE`` mode (``V=1``)
1310
1311- Library Code
1312 - common: Incorrect check for Address Authentication support
1313
1314 - xlat: Fix XLAT_V1 / XLAT_V2 incompatibility
1315
1316 The file ``arm_xlat_tables.h`` has been renamed to ``xlat_tables_compat.h``
1317 and has been moved to a common folder. This header can be used to guarantee
1318 compatibility, as it includes the correct header based on
1319 ``XLAT_TABLES_LIB_V2``.
1320
1321 - xlat: armclang unused-function warning on ``xlat_clean_dcache_range``
1322
1323 - xlat: Invalid ``mm_cursor`` checks in ``mmap_add`` and ``mmap_add_ctx``
1324
1325 - sdei: Missing ``context.h`` header
1326
1327- Platforms
1328 - common: Missing prototype warning for ``plat_log_get_prefix``
1329
1330 - arm: Insufficient maximum BL33 image size
1331
1332 - arm: Potential memory corruption during BL2-BL31 transition
1333
1334 On Arm platforms, the BL2 memory can be overlaid by BL31/BL32. The memory
1335 descriptors describing the list of executable images are created in BL2
1336 R/W memory, which could be possibly corrupted later on by BL31/BL32 due
1337 to overlay. This patch creates a reserved location in SRAM for these
1338 descriptors and are copied over by BL2 before handing over to next BL
1339 image.
1340
1341 - juno: Invalid behaviour when ``CSS_USE_SCMI_SDS_DRIVER`` is not set
1342
1343 In ``juno_pm.c`` the ``css_scmi_override_pm_ops`` function was used
1344 regardless of whether the build flag was set. The original behaviour has
1345 been restored in the case where the build flag is not set.
1346
1347- Tools
1348 - fiptool: Incorrect UUID parsing of blob parameters
1349
1350 - doimage: Incorrect object rules in Makefile
1351
1352
1353Deprecations
Paul Beesley32379552019-02-11 17:58:21 +00001354^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +00001355
1356- Common Code
1357 - ``plat_crash_console_init`` function
1358
1359 - ``plat_crash_console_putc`` function
1360
1361 - ``plat_crash_console_flush`` function
1362
1363 - ``finish_console_register`` macro
1364
1365- AArch64-specific Code
1366 - helpers: ``get_afflvl_shift``
1367
1368 - helpers: ``mpidr_mask_lower_afflvls``
1369
1370 - helpers: ``eret``
1371
1372- Secure Partition Manager (SPM)
1373 - Boot-info structure
1374
1375
1376Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001377^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +00001378
1379- Build System Issues
1380 - dtb: DTB creation not supported when building on a Windows host.
1381
1382 This step in the build process is skipped when running on a Windows host. A
1383 known issue from the 1.6 release.
1384
1385- Platform Issues
1386 - arm/juno: System suspend from Linux does not function as documented in the
1387 user guide
1388
1389 Following the instructions provided in the user guide document does not
1390 result in the platform entering system suspend state as expected. A message
1391 relating to the hdlcd driver failing to suspend will be emitted on the
1392 Linux terminal.
1393
Soby Mathewb58f97a2019-03-28 13:46:40 +00001394 - arm/juno: The firmware update use-cases do not work with motherboard
1395 firmware version < v1.5.0 (the reset reason is not preserved). The Linaro
1396 18.04 release has MB v1.4.9. The MB v1.5.0 is available in Linaro 18.10
1397 release.
1398
Paul Beesleybbf48042019-03-25 12:21:57 +00001399 - mediatek/mt6795: This platform does not build in this release
1400
Paul Beesley32379552019-02-11 17:58:21 +00001401Version 2.0
1402-----------
Joanna Farleyadd34512018-09-28 08:38:17 +01001403
1404New Features
Paul Beesley32379552019-02-11 17:58:21 +00001405^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +01001406
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001407- Removal of a number of deprecated APIs
Joanna Farleyadd34512018-09-28 08:38:17 +01001408
1409 - A new Platform Compatibility Policy document has been created which
1410 references a wiki page that maintains a listing of deprecated
1411 interfaces and the release after which they will be removed.
1412
1413 - All deprecated interfaces except the MULTI_CONSOLE_API have been removed
1414 from the code base.
1415
1416 - Various Arm and partner platforms have been updated to remove the use of
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001417 removed APIs in this release.
Joanna Farleyadd34512018-09-28 08:38:17 +01001418
1419 - This release is otherwise unchanged from 1.6 release
1420
1421Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001422^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +01001423
1424- No issues known at 1.6 release resolved in 2.0 release
1425
1426Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001427^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +01001428
1429- DTB creation not supported when building on a Windows host. This step in the
1430 build process is skipped when running on a Windows host. Known issue from
1431 1.6 version.
1432
1433- As a result of removal of deprecated interfaces the Nvidia Tegra, Marvell
1434 Armada 8K and MediaTek MT6795 platforms do not build in this release.
1435 Also MediaTek MT8173, NXP QorIQ LS1043A, NXP i.MX8QX, NXP i.MX8QMa,
1436 Rockchip RK3328, Rockchip RK3368 and Rockchip RK3399 platforms have not been
1437 confirmed to be working after the removal of the deprecated interfaces
1438 although they do build.
1439
Paul Beesley32379552019-02-11 17:58:21 +00001440Version 1.6
1441-----------
Joanna Farley325ef902018-09-11 15:51:31 +01001442
1443New Features
Paul Beesley32379552019-02-11 17:58:21 +00001444^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +01001445
Joanna Farleyadd34512018-09-28 08:38:17 +01001446- Addressing Speculation Security Vulnerabilities
Joanna Farley325ef902018-09-11 15:51:31 +01001447
1448 - Implement static workaround for CVE-2018-3639 for AArch32 and AArch64
1449
1450 - Add support for dynamic mitigation for CVE-2018-3639
1451
1452 - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76
1453
Paul Beesley606d8072019-03-13 13:58:02 +00001454 - Ensure |SDEI| handler executes with CVE-2018-3639 mitigation enabled
Joanna Farley325ef902018-09-11 15:51:31 +01001455
1456- Introduce RAS handling on AArch64
1457
John Tsichritzisf93256f2018-10-05 14:16:26 +01001458 - Some RAS extensions are mandatory for Armv8.2 CPUs, with others
1459 mandatory for Armv8.4 CPUs however, all extensions are also optional
1460 extensions to the base Armv8.0 architecture.
Joanna Farley325ef902018-09-11 15:51:31 +01001461
John Tsichritzisf93256f2018-10-05 14:16:26 +01001462 - The Armv8 RAS Extensions introduced Standard Error Records which are a
Joanna Farley325ef902018-09-11 15:51:31 +01001463 set of standard registers to configure RAS node policy and allow RAS
1464 Nodes to record and expose error information for error handling agents.
1465
1466 - Capabilities are provided to support RAS Node enumeration and iteration
1467 along with individual interrupt registrations and fault injections
1468 support.
1469
1470 - Introduce handlers for Uncontainable errors, Double Faults and EL3
1471 External Aborts
1472
1473- Enable Memory Partitioning And Monitoring (MPAM) for lower EL's
1474
1475 - Memory Partitioning And Monitoring is an Armv8.4 feature that enables
1476 various memory system components and resources to define partitions.
1477 Software running at various ELs can then assign themselves to the
1478 desired partition to control their performance aspects.
1479
1480 - When ENABLE_MPAM_FOR_LOWER_ELS is set to 1, EL3 allows
1481 lower ELs to access their own MPAM registers without trapping to EL3.
1482 This patch however, doesn't make use of partitioning in EL3; platform
1483 initialisation code should configure and use partitions in EL3 if
1484 required.
1485
1486- Introduce ROM Lib Feature
1487
1488 - Support combining several libraries into a self-called "romlib" image,
1489 that may be shared across images to reduce memory footprint. The romlib
1490 image is stored in ROM but is accessed through a jump-table that may be
1491 stored in read-write memory, allowing for the library code to be patched.
1492
1493- Introduce Backtrace Feature
1494
1495 - This function displays the backtrace, the current EL and security state
1496 to allow a post-processing tool to choose the right binary to interpret
1497 the dump.
1498
1499 - Print backtrace in assert() and panic() to the console.
1500
1501- Code hygiene changes and alignment with MISRA C-2012 guideline with fixes
1502 addressing issues complying to the following rules:
1503
1504 - MISRA rules 4.9, 5.1, 5.3, 5.7, 8.2-8.5, 8.8, 8.13, 9.3, 10.1,
1505 10.3-10.4, 10.8, 11.3, 11.6, 12.1, 14.4, 15.7, 16.1-16.7, 17.7-17.8,
1506 20.7, 20.10, 20.12, 21.1, 21.15, 22.7
1507
1508 - Clean up the usage of void pointers to access symbols
1509
1510 - Increase usage of static qualifier to locally used functions and data
1511
1512 - Migrated to use of u_register_t for register read/write to better
1513 match AArch32 and AArch64 type sizes
1514
1515 - Use int-ll64 for both AArch32 and AArch64 to assist in consistent
1516 format strings between architectures
1517
1518 - Clean up TF-A libc by removing non arm copyrighted implementations
1519 and replacing them with modified FreeBSD and SCC implementations
1520
1521- Various changes to support Clang linker and assembler
1522
John Tsichritzisf93256f2018-10-05 14:16:26 +01001523 - The clang assembler/preprocessor is used when Clang is selected. However,
Joanna Farley325ef902018-09-11 15:51:31 +01001524 the clang linker is not used because it is unable to link TF-A objects
1525 due to immaturity of clang linker functionality at this time.
1526
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001527- Refactor support APIs into Libraries
Joanna Farley325ef902018-09-11 15:51:31 +01001528
1529 - Evolve libfdt, mbed TLS library and standard C library sources as
1530 proper libraries that TF-A may be linked against.
1531
1532- CPU Enhancements
1533
1534 - Add CPU support for Cortex-Ares and Cortex-A76
1535
1536 - Add AMU support for Cortex-Ares
1537
1538 - Add initial CPU support for Cortex-Deimos
1539
1540 - Add initial CPU support for Cortex-Helios
1541
1542 - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76
1543
1544 - Implement Cortex-Ares erratum 1043202 workaround
1545
1546 - Implement DSU erratum 936184 workaround
1547
1548 - Check presence of fix for errata 843419 in Cortex-A53
1549
1550 - Check presence of fix for errata 835769 in Cortex-A53
1551
1552- Translation Tables Enhancements
1553
1554 - The xlat v2 library has been refactored in order to be reused by
1555 different TF components at different EL's including the addition of EL2.
1556 Some refactoring to make the code more generic and less specific to TF,
1557 in order to reuse the library outside of this project.
1558
1559- SPM Enhancements
1560
1561 - General cleanups and refactoring to pave the way to multiple partitions
1562 support
1563
1564- SDEI Enhancements
1565
1566 - Allow platforms to define explicit events
1567
1568 - Determine client EL from NS context's SCR_EL3
1569
1570 - Make dispatches synchronous
1571
1572 - Introduce jump primitives for BL31
1573
Paul Beesley606d8072019-03-13 13:58:02 +00001574 - Mask events after CPU wakeup in |SDEI| dispatcher to conform to the
Joanna Farley325ef902018-09-11 15:51:31 +01001575 specification
1576
1577- Misc TF-A Core Common Code Enhancements
1578
1579 - Add support for eXecute In Place (XIP) memory in BL2
1580
1581 - Add support for the SMC Calling Convention 2.0
1582
1583 - Introduce External Abort handling on AArch64
1584 External Abort routed to EL3 was reported as an unhandled exception
John Tsichritzis63801cd2019-07-05 14:22:12 +01001585 and caused a panic. This change enables Trusted Firmware-A to handle
1586 External Aborts routed to EL3.
Joanna Farley325ef902018-09-11 15:51:31 +01001587
1588 - Save value of ACTLR_EL1 implementation-defined register in the CPU
1589 context structure rather than forcing it to 0.
1590
1591 - Introduce ARM_LINUX_KERNEL_AS_BL33 build option, which allows BL31 to
1592 directly jump to a Linux kernel. This makes for a quicker and simpler
1593 boot flow, which might be useful in some test environments.
1594
1595 - Add dynamic configurations for BL31, BL32 and BL33 enabling support for
1596 Chain of Trust (COT).
1597
1598 - Make TF UUID RFC 4122 compliant
1599
1600- New Platform Support
1601
1602 - Arm SGI-575
1603
1604 - Arm SGM-775
1605
1606 - Allwinner sun50i_64
1607
1608 - Allwinner sun50i_h6
1609
John Tsichritzisf93256f2018-10-05 14:16:26 +01001610 - NXP QorIQ LS1043A
Joanna Farley325ef902018-09-11 15:51:31 +01001611
1612 - NXP i.MX8QX
1613
1614 - NXP i.MX8QM
1615
John Tsichritzisf93256f2018-10-05 14:16:26 +01001616 - NXP i.MX7Solo WaRP7
1617
Joanna Farley325ef902018-09-11 15:51:31 +01001618 - TI K3
1619
1620 - Socionext Synquacer SC2A11
1621
1622 - Marvell Armada 8K
1623
1624 - STMicroelectronics STM32MP1
1625
1626- Misc Generic Platform Common Code Enhancements
1627
1628 - Add MMC framework that supports both eMMC and SD card devices
1629
1630- Misc Arm Platform Common Code Enhancements
1631
1632 - Demonstrate PSCI MEM_PROTECT from el3_runtime
1633
1634 - Provide RAS support
1635
1636 - Migrate AArch64 port to the multi console driver. The old API is
1637 deprecated and will eventually be removed.
1638
1639 - Move BL31 below BL2 to enable BL2 overlay resulting in changes in the
1640 layout of BL images in memory to enable more efficient use of available
1641 space.
1642
1643 - Add cpp build processing for dtb that allows processing device tree
1644 with external includes.
1645
1646 - Extend FIP io driver to support multiple FIP devices
1647
1648 - Add support for SCMI AP core configuration protocol v1.0
1649
1650 - Use SCMI AP core protocol to set the warm boot entrypoint
1651
1652 - Add support to Mbed TLS drivers for shared heap among different
1653 BL images to help optimise memory usage
1654
1655 - Enable non-secure access to UART1 through a build option to support
1656 a serial debug port for debugger connection
1657
1658- Enhancements for Arm Juno Platform
1659
1660 - Add support for TrustZone Media Protection 1 (TZMP1)
1661
1662- Enhancements for Arm FVP Platform
1663
1664 - Dynamic_config: remove the FVP dtb files
1665
1666 - Set DYNAMIC_WORKAROUND_CVE_2018_3639=1 on FVP by default
1667
1668 - Set the ability to dynamically disable Trusted Boot Board
1669 authentication to be off by default with DYN_DISABLE_AUTH
1670
1671 - Add librom enhancement support in FVP
1672
1673 - Support shared Mbed TLS heap between BL1 and BL2 that allow a
1674 reduction in BL2 size for FVP
1675
1676- Enhancements for Arm SGI/SGM Platform
1677
1678 - Enable ARM_PLAT_MT flag for SGI-575
1679
1680 - Add dts files to enable support for dynamic config
1681
1682 - Add RAS support
1683
1684 - Support shared Mbed TLS heap for SGI and SGM between BL1 and BL2
1685
1686- Enhancements for Non Arm Platforms
1687
1688 - Raspberry Pi Platform
1689
1690 - Hikey Platforms
1691
1692 - Xilinx Platforms
1693
1694 - QEMU Platform
1695
1696 - Rockchip rk3399 Platform
1697
1698 - TI Platforms
1699
1700 - Socionext Platforms
1701
1702 - Allwinner Platforms
1703
1704 - NXP Platforms
1705
1706 - NVIDIA Tegra Platform
1707
1708 - Marvell Platforms
1709
1710 - STMicroelectronics STM32MP1 Platform
1711
1712Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001713^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +01001714
1715- No issues known at 1.5 release resolved in 1.6 release
1716
1717Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001718^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +01001719
1720- DTB creation not supported when building on a Windows host. This step in the
1721 build process is skipped when running on a Windows host. Known issue from
1722 1.5 version.
1723
Paul Beesley32379552019-02-11 17:58:21 +00001724Version 1.5
1725-----------
David Cunadob1580432018-03-14 17:57:31 +00001726
1727New features
Paul Beesley32379552019-02-11 17:58:21 +00001728^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00001729
1730- Added new firmware support to enable RAS (Reliability, Availability, and
1731 Serviceability) functionality.
1732
1733 - Secure Partition Manager (SPM): A Secure Partition is a software execution
1734 environment instantiated in S-EL0 that can be used to implement simple
1735 management and security services. The SPM is the firmware component that
1736 is responsible for managing a Secure Partition.
1737
Paul Beesley606d8072019-03-13 13:58:02 +00001738 - SDEI dispatcher: Support for interrupt-based |SDEI| events and all
1739 interfaces as defined by the |SDEI| specification v1.0, see
David Cunadob1580432018-03-14 17:57:31 +00001740 `SDEI Specification`_
1741
1742 - Exception Handling Framework (EHF): Framework that allows dispatching of
1743 EL3 interrupts to their registered handlers which are registered based on
1744 their priorities. Facilitates firmware-first error handling policy where
1745 asynchronous exceptions may be routed to EL3.
1746
1747 Integrated the TSPD with EHF.
1748
1749- Updated PSCI support:
1750
1751 - Implemented PSCI v1.1 optional features `MEM_PROTECT` and `SYSTEM_RESET2`.
1752 The supported PSCI version was updated to v1.1.
1753
1754 - Improved PSCI STAT timestamp collection, including moving accounting for
1755 retention states to be inside the locks and fixing handling of wrap-around
1756 when calculating residency in AArch32 execution state.
1757
1758 - Added optional handler for early suspend that executes when suspending to
1759 a power-down state and with data caches enabled.
1760
1761 This may provide a performance improvement on platforms where it is safe
1762 to perform some or all of the platform actions from `pwr_domain_suspend`
1763 with the data caches enabled.
1764
1765- Enabled build option, BL2_AT_EL3, for BL2 to allow execution at EL3 without
1766 any dependency on TF BL1.
1767
1768 This allows platforms which already have a non-TF Boot ROM to directly load
1769 and execute BL2 and subsequent BL stages without need for BL1. This was not
1770 previously possible because BL2 executes at S-EL1 and cannot jump straight to
1771 EL3.
1772
1773- Implemented support for SMCCC v1.1, including `SMCCC_VERSION` and
1774 `SMCCC_ARCH_FEATURES`.
1775
1776 Additionally, added support for `SMCCC_VERSION` in PSCI features to enable
1777 discovery of the SMCCC version via PSCI feature call.
1778
1779- Added Dynamic Configuration framework which enables each of the boot loader
1780 stages to be dynamically configured at runtime if required by the platform.
1781 The boot loader stage may optionally specify a firmware configuration file
1782 and/or hardware configuration file that can then be shared with the next boot
1783 loader stage.
1784
1785 Introduced a new BL handover interface that essentially allows passing of 4
1786 arguments between the different BL stages.
1787
1788 Updated cert_create and fip_tool to support the dynamic configuration files.
1789 The COT also updated to support these new files.
1790
1791- Code hygiene changes and alignment with MISRA guideline:
1792
1793 - Fix use of undefined macros.
1794
1795 - Achieved compliance with Mandatory MISRA coding rules.
1796
1797 - Achieved compliance for following Required MISRA rules for the default
1798 build configurations on FVP and Juno platforms : 7.3, 8.3, 8.4, 8.5 and
1799 8.8.
1800
1801- Added support for Armv8.2-A architectural features:
1802
1803 - Updated translation table set-up to set the CnP (Common not Private) bit
1804 for secure page tables so that multiple PEs in the same Inner Shareable
1805 domain can use the same translation table entries for a given stage of
1806 translation in a particular translation regime.
1807
1808 - Extended the supported values of ID_AA64MMFR0_EL1.PARange to include the
1809 52-bit Physical Address range.
1810
1811 - Added support for the Scalable Vector Extension to allow Normal world
1812 software to access SVE functionality but disable access to SVE, SIMD and
1813 floating point functionality from the Secure world in order to prevent
1814 corruption of the Z-registers.
1815
1816- Added support for Armv8.4-A architectural feature Activity Monitor Unit (AMU)
1817 extensions.
1818
1819 In addition to the v8.4 architectural extension, AMU support on Cortex-A75
1820 was implemented.
1821
1822- Enhanced OP-TEE support to enable use of pageable OP-TEE image. The Arm
1823 standard platforms are updated to load up to 3 images for OP-TEE; header,
1824 pager image and paged image.
1825
1826 The chain of trust is extended to support the additional images.
1827
1828- Enhancements to the translation table library:
1829
1830 - Introduced APIs to get and set the memory attributes of a region.
1831
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001832 - Added support to manage both privilege levels in translation regimes that
David Cunadob1580432018-03-14 17:57:31 +00001833 describe translations for 2 Exception levels, specifically the EL1&0
1834 translation regime, and extended the memory map region attributes to
1835 include specifying Non-privileged access.
1836
1837 - Added support to specify the granularity of the mappings of each region,
1838 for instance a 2MB region can be specified to be mapped with 4KB page
1839 tables instead of a 2MB block.
1840
1841 - Disabled the higher VA range to avoid unpredictable behaviour if there is
1842 an attempt to access addresses in the higher VA range.
1843
1844 - Added helpers for Device and Normal memory MAIR encodings that align with
1845 the Arm Architecture Reference Manual for Armv8-A (Arm DDI0487B.b).
1846
1847 - Code hygiene including fixing type length and signedness of constants,
1848 refactoring of function to enable the MMU, removing all instances where
1849 the virtual address space is hardcoded and added comments that document
1850 alignment needed between memory attributes and attributes specified in
1851 TCR_ELx.
1852
1853- Updated GIC support:
1854
1855 - Introduce new APIs for GICv2 and GICv3 that provide the capability to
1856 specify interrupt properties rather than list of interrupt numbers alone.
1857 The Arm platforms and other upstream platforms are migrated to use
1858 interrupt properties.
1859
1860 - Added helpers to save / restore the GICv3 context, specifically the
1861 Distributor and Redistributor contexts and architectural parts of the ITS
1862 power management. The Distributor and Redistributor helpers also support
1863 the implementation-defined part of GIC-500 and GIC-600.
1864
1865 Updated the Arm FVP platform to save / restore the GICv3 context on system
1866 suspend / resume as an example of how to use the helpers.
1867
1868 Introduced a new TZC secured DDR carve-out for use by Arm platforms for
1869 storing EL3 runtime data such as the GICv3 register context.
1870
1871- Added support for Armv7-A architecture via build option ARM_ARCH_MAJOR=7.
1872 This includes following features:
1873
1874 - Updates GICv2 driver to manage GICv1 with security extensions.
1875
1876 - Software implementation for 32bit division.
1877
1878 - Enabled use of generic timer for platforms that do not set
1879 ARM_CORTEX_Ax=yes.
1880
1881 - Support for Armv7-A Virtualization extensions [DDI0406C_C].
1882
1883 - Support for both Armv7-A platforms that only have 32-bit addressing and
1884 Armv7-A platforms that support large page addressing.
1885
1886 - Included support for following Armv7 CPUs: Cortex-A12, Cortex-A17,
1887 Cortex-A7, Cortex-A5, Cortex-A9, Cortex-A15.
1888
1889 - Added support in QEMU for Armv7-A/Cortex-A15.
1890
1891- Enhancements to Firmware Update feature:
1892
1893 - Updated the FWU documentation to describe the additional images needed for
1894 Firmware update, and how they are used for both the Juno platform and the
1895 Arm FVP platforms.
1896
1897- Enhancements to Trusted Board Boot feature:
1898
1899 - Added support to cert_create tool for RSA PKCS1# v1.5 and SHA384, SHA512
1900 and SHA256.
1901
1902 - For Arm platforms added support to use ECDSA keys.
1903
1904 - Enhanced the mbed TLS wrapper layer to include support for both RSA and
1905 ECDSA to enable runtime selection between RSA and ECDSA keys.
1906
1907- Added support for secure interrupt handling in AArch32 sp_min, hardcoded to
1908 only handle FIQs.
1909
1910- Added support to allow a platform to load images from multiple boot sources,
1911 for example from a second flash drive.
1912
1913- Added a logging framework that allows platforms to reduce the logging level
1914 at runtime and additionally the prefix string can be defined by the platform.
1915
1916- Further improvements to register initialisation:
1917
1918 - Control register PMCR_EL0 / PMCR is set to prohibit cycle counting in the
1919 secure world. This register is added to the list of registers that are
1920 saved and restored during world switch.
1921
1922 - When EL3 is running in AArch32 execution state, the Non-secure version of
1923 SCTLR is explicitly initialised during the warmboot flow rather than
1924 relying on the hardware to set the correct reset values.
1925
1926- Enhanced support for Arm platforms:
1927
1928 - Introduced driver for Shared-Data-Structure (SDS) framework which is used
1929 for communication between SCP and the AP CPU, replacing Boot-Over_MHU
1930 (BOM) protocol.
1931
1932 The Juno platform is migrated to use SDS with the SCMI support added in
1933 v1.3 and is set as default.
1934
1935 The driver can be found in the plat/arm/css/drivers folder.
1936
1937 - Improved memory usage by only mapping TSP memory region when the TSPD has
1938 been included in the build. This reduces the memory footprint and avoids
1939 unnecessary memory being mapped.
1940
1941 - Updated support for multi-threading CPUs for FVP platforms - always check
1942 the MT field in MPDIR and access the bit fields accordingly.
1943
1944 - Support building for platforms that model DynamIQ configuration by
1945 implementing all CPUs in a single cluster.
1946
1947 - Improved nor flash driver, for instance clearing status registers before
1948 sending commands. Driver can be found plat/arm/board/common folder.
1949
1950- Enhancements to QEMU platform:
1951
1952 - Added support for TBB.
1953
1954 - Added support for using OP-TEE pageable image.
1955
1956 - Added support for LOAD_IMAGE_V2.
1957
1958 - Migrated to use translation table library v2 by default.
1959
1960 - Added support for SEPARATE_CODE_AND_RODATA.
1961
1962- Applied workarounds CVE-2017-5715 on Arm Cortex-A57, -A72, -A73 and -A75, and
1963 for Armv7-A CPUs Cortex-A9, -A15 and -A17.
1964
1965- Applied errata workaround for Arm Cortex-A57: 859972.
1966
1967- Applied errata workaround for Arm Cortex-A72: 859971.
1968
1969- Added support for Poplar 96Board platform.
1970
1971- Added support for Raspberry Pi 3 platform.
1972
1973- Added Call Frame Information (CFI) assembler directives to the vector entries
1974 which enables debuggers to display the backtrace of functions that triggered
1975 a synchronous abort.
1976
1977- Added ability to build dtb.
1978
1979- Added support for pre-tool (cert_create and fiptool) image processing
1980 enabling compression of the image files before processing by cert_create and
1981 fiptool.
1982
1983 This can reduce fip size and may also speed up loading of images. The image
1984 verification will also get faster because certificates are generated based on
1985 compressed images.
1986
1987 Imported zlib 1.2.11 to implement gunzip() for data compression.
1988
1989- Enhancements to fiptool:
1990
1991 - Enabled the fiptool to be built using Visual Studio.
1992
1993 - Added padding bytes at the end of the last image in the fip to be
1994 facilitate transfer by DMA.
1995
1996Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001997^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00001998
1999- TF-A can be built with optimisations disabled (-O0).
2000
2001- Memory layout updated to enable Trusted Board Boot on Juno platform when
2002 running TF-A in AArch32 execution mode (resolving `tf-issue#501`_).
2003
2004Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00002005^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00002006
Joanna Farley325ef902018-09-11 15:51:31 +01002007- DTB creation not supported when building on a Windows host. This step in the
2008 build process is skipped when running on a Windows host.
David Cunadob1580432018-03-14 17:57:31 +00002009
Paul Beesley32379552019-02-11 17:58:21 +00002010Version 1.4
2011-----------
David Cunado1b796fa2017-07-03 18:59:07 +01002012
2013New features
Paul Beesley32379552019-02-11 17:58:21 +00002014^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01002015
2016- Enabled support for platforms with hardware assisted coherency.
2017
2018 A new build option HW_ASSISTED_COHERENCY allows platforms to take advantage
2019 of the following optimisations:
2020
2021 - Skip performing cache maintenance during power-up and power-down.
2022
2023 - Use spin-locks instead of bakery locks.
2024
2025 - Enable data caches early on warm-booted CPUs.
2026
2027- Added support for Cortex-A75 and Cortex-A55 processors.
2028
Dan Handley610e7e12018-03-01 18:44:00 +00002029 Both Cortex-A75 and Cortex-A55 processors use the Arm DynamIQ Shared Unit
David Cunado1b796fa2017-07-03 18:59:07 +01002030 (DSU). The power-down and power-up sequences are therefore mostly managed in
2031 hardware, reducing complexity of the software operations.
2032
Dan Handley610e7e12018-03-01 18:44:00 +00002033- Introduced Arm GIC-600 driver.
David Cunado1b796fa2017-07-03 18:59:07 +01002034
Dan Handley610e7e12018-03-01 18:44:00 +00002035 Arm GIC-600 IP complies with Arm GICv3 architecture. For FVP platforms, the
David Cunado1b796fa2017-07-03 18:59:07 +01002036 GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600.
2037
2038- Updated GICv3 support:
2039
2040 - Introduced power management APIs for GICv3 Redistributor. These APIs
2041 allow platforms to power down the Redistributor during CPU power on/off.
2042 Requires the GICv3 implementations to have power management operations.
2043
2044 Implemented the power management APIs for FVP.
2045
2046 - GIC driver data is flushed by the primary CPU so that secondary CPU do
2047 not read stale GIC data.
2048
Dan Handley610e7e12018-03-01 18:44:00 +00002049- Added support for Arm System Control and Management Interface v1.0 (SCMI).
David Cunado1b796fa2017-07-03 18:59:07 +01002050
2051 The SCMI driver implements the power domain management and system power
Dan Handley610e7e12018-03-01 18:44:00 +00002052 management protocol of the SCMI specification (Arm DEN 0056ASCMI) for
David Cunado1b796fa2017-07-03 18:59:07 +01002053 communicating with any compliant power controller.
2054
2055 Support is added for the Juno platform. The driver can be found in the
2056 plat/arm/css/drivers folder.
2057
Dan Handley610e7e12018-03-01 18:44:00 +00002058- Added support to enable pre-integration of TBB with the Arm TrustZone
David Cunado1b796fa2017-07-03 18:59:07 +01002059 CryptoCell product, to take advantage of its hardware Root of Trust and
2060 crypto acceleration services.
2061
2062- Enabled Statistical Profiling Extensions for lower ELs.
2063
2064 The firmware support is limited to the use of SPE in the Non-secure state
2065 and accesses to the SPE specific registers from S-EL1 will trap to EL3.
2066
2067 The SPE are architecturally specified for AArch64 only.
2068
2069- Code hygiene changes aligned with MISRA guidelines:
2070
2071 - Fixed signed / unsigned comparison warnings in the translation table
2072 library.
2073
2074 - Added U(_x) macro and together with the existing ULL(_x) macro fixed
2075 some of the signed-ness defects flagged by the MISRA scanner.
2076
2077- Enhancements to Firmware Update feature:
2078
2079 - The FWU logic now checks for overlapping images to prevent execution of
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002080 unauthenticated arbitrary code.
David Cunado1b796fa2017-07-03 18:59:07 +01002081
2082 - Introduced new FWU_SMC_IMAGE_RESET SMC that changes the image loading
2083 state machine to go from COPYING, COPIED or AUTHENTICATED states to
2084 RESET state. Previously, this was only possible when the authentication
2085 of an image failed or when the execution of the image finished.
2086
2087 - Fixed integer overflow which addressed TFV-1: Malformed Firmware Update
2088 SMC can result in copy of unexpectedly large data into secure memory.
2089
Dan Handley610e7e12018-03-01 18:44:00 +00002090- Introduced support for Arm Compiler 6 and LLVM (clang).
David Cunado1b796fa2017-07-03 18:59:07 +01002091
Dan Handley610e7e12018-03-01 18:44:00 +00002092 TF-A can now also be built with the Arm Compiler 6 or the clang compilers.
David Cunado1b796fa2017-07-03 18:59:07 +01002093 The assembler and linker must be provided by the GNU toolchain.
2094
Dan Handley610e7e12018-03-01 18:44:00 +00002095 Tested with Arm CC 6.7 and clang 3.9.x and 4.0.x.
David Cunado1b796fa2017-07-03 18:59:07 +01002096
2097- Memory footprint improvements:
2098
2099 - Introduced `tf_snprintf`, a reduced version of `snprintf` which has
2100 support for a limited set of formats.
2101
2102 The mbedtls driver is updated to optionally use `tf_snprintf` instead of
2103 `snprintf`.
2104
2105 - The `assert()` is updated to no longer print the function name, and
2106 additional logging options are supported via an optional platform define
2107 `PLAT_LOG_LEVEL_ASSERT`, which controls how verbose the assert output is.
2108
Dan Handley610e7e12018-03-01 18:44:00 +00002109- Enhancements to TF-A support when running in AArch32 execution state:
David Cunado1b796fa2017-07-03 18:59:07 +01002110
2111 - Support booting SP_MIN and BL33 in AArch32 execution mode on Juno. Due to
2112 hardware limitations, BL1 and BL2 boot in AArch64 state and there is
2113 additional trampoline code to warm reset into SP_MIN in AArch32 execution
2114 state.
2115
Dan Handley610e7e12018-03-01 18:44:00 +00002116 - Added support for Arm Cortex-A53/57/72 MPCore processors including the
David Cunado1b796fa2017-07-03 18:59:07 +01002117 errata workarounds that are already implemented for AArch64 execution
2118 state.
2119
2120 - For FVP platforms, added AArch32 Trusted Board Boot support, including the
2121 Firmware Update feature.
2122
Dan Handley610e7e12018-03-01 18:44:00 +00002123- Introduced Arm SiP service for use by Arm standard platforms.
David Cunado1b796fa2017-07-03 18:59:07 +01002124
Dan Handley610e7e12018-03-01 18:44:00 +00002125 - Added new Arm SiP Service SMCs to enable the Non-secure world to read PMF
David Cunado1b796fa2017-07-03 18:59:07 +01002126 timestamps.
2127
Dan Handley610e7e12018-03-01 18:44:00 +00002128 Added PMF instrumentation points in TF-A in order to quantify the
David Cunado1b796fa2017-07-03 18:59:07 +01002129 overall time spent in the PSCI software implementation.
2130
Dan Handley610e7e12018-03-01 18:44:00 +00002131 - Added new Arm SiP service SMC to switch execution state.
David Cunado1b796fa2017-07-03 18:59:07 +01002132
2133 This allows the lower exception level to change its execution state from
2134 AArch64 to AArch32, or vice verse, via a request to EL3.
2135
2136- Migrated to use SPDX[0] license identifiers to make software license
2137 auditing simpler.
2138
Paul Beesleyba3ed402019-03-13 16:20:44 +00002139 .. note::
2140 Files that have been imported by FreeBSD have not been modified.
David Cunado1b796fa2017-07-03 18:59:07 +01002141
2142 [0]: https://spdx.org/
2143
2144- Enhancements to the translation table library:
2145
2146 - Added version 2 of translation table library that allows different
2147 translation tables to be modified by using different 'contexts'. Version 1
David Cunadob1580432018-03-14 17:57:31 +00002148 of the translation table library only allows the current EL's translation
David Cunado1b796fa2017-07-03 18:59:07 +01002149 tables to be modified.
2150
2151 Version 2 of the translation table also added support for dynamic
2152 regions; regions that can be added and removed dynamically whilst the
2153 MMU is enabled. Static regions can only be added or removed before the
2154 MMU is enabled.
2155
2156 The dynamic mapping functionality is enabled or disabled when compiling
2157 by setting the build option PLAT_XLAT_TABLES_DYNAMIC to 1 or 0. This can
2158 be done per-image.
2159
2160 - Added support for translation regimes with two virtual address spaces
2161 such as the one shared by EL1 and EL0.
2162
2163 The library does not support initializing translation tables for EL0
2164 software.
2165
2166 - Added support to mark the translation tables as non-cacheable using an
2167 additional build option `XLAT_TABLE_NC`.
2168
2169- Added support for GCC stack protection. A new build option
2170 ENABLE_STACK_PROTECTOR was introduced that enables compilation of all BL
2171 images with one of the GCC -fstack-protector-* options.
2172
2173 A new platform function plat_get_stack_protector_canary() was introduced
2174 that returns a value used to initialize the canary for stack corruption
2175 detection. For increased effectiveness of protection platforms must provide
2176 an implementation that returns a random value.
2177
Dan Handley610e7e12018-03-01 18:44:00 +00002178- Enhanced support for Arm platforms:
David Cunado1b796fa2017-07-03 18:59:07 +01002179
2180 - Added support for multi-threading CPUs, indicated by `MT` field in MPDIR.
2181 A new build flag `ARM_PLAT_MT` is added, and when enabled, the functions
2182 accessing MPIDR assume that the `MT` bit is set for the platform and
2183 access the bit fields accordingly.
2184
2185 Also, a new API `plat_arm_get_cpu_pe_count` is added when `ARM_PLAT_MT` is
2186 enabled, returning the Processing Element count within the physical CPU
2187 corresponding to `mpidr`.
2188
Dan Handley610e7e12018-03-01 18:44:00 +00002189 - The Arm platforms migrated to use version 2 of the translation tables.
David Cunado1b796fa2017-07-03 18:59:07 +01002190
Dan Handley610e7e12018-03-01 18:44:00 +00002191 - Introduced a new Arm platform layer API `plat_arm_psci_override_pm_ops`
2192 which allows Arm platforms to modify `plat_arm_psci_pm_ops` and therefore
David Cunado1b796fa2017-07-03 18:59:07 +01002193 dynamically define PSCI capability.
2194
Dan Handley610e7e12018-03-01 18:44:00 +00002195 - The Arm platforms migrated to use IMAGE_LOAD_V2 by default.
David Cunado1b796fa2017-07-03 18:59:07 +01002196
2197- Enhanced reporting of errata workaround status with the following policy:
2198
2199 - If an errata workaround is enabled:
2200
2201 - If it applies (i.e. the CPU is affected by the errata), an INFO message
2202 is printed, confirming that the errata workaround has been applied.
2203
2204 - If it does not apply, a VERBOSE message is printed, confirming that the
2205 errata workaround has been skipped.
2206
2207 - If an errata workaround is not enabled, but would have applied had it
2208 been, a WARN message is printed, alerting that errata workaround is
2209 missing.
2210
2211- Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the
Dan Handley610e7e12018-03-01 18:44:00 +00002212 architecture version to target TF-A.
David Cunado1b796fa2017-07-03 18:59:07 +01002213
2214- Updated the spin lock implementation to use the more efficient CAS (Compare
2215 And Swap) instruction when available. This instruction was introduced in
Dan Handley610e7e12018-03-01 18:44:00 +00002216 Armv8.1-A.
David Cunado1b796fa2017-07-03 18:59:07 +01002217
Dan Handley610e7e12018-03-01 18:44:00 +00002218- Applied errata workaround for Arm Cortex-A53: 855873.
David Cunado1b796fa2017-07-03 18:59:07 +01002219
Dan Handley610e7e12018-03-01 18:44:00 +00002220- Applied errata workaround for Arm-Cortex-A57: 813419.
David Cunado1b796fa2017-07-03 18:59:07 +01002221
2222- Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and
2223 AArch32 execution states.
2224
2225- Added support for Socionext UniPhier SoC platform.
2226
2227- Added support for Hikey960 and Hikey platforms.
2228
2229- Added support for Rockchip RK3328 platform.
2230
2231- Added support for NVidia Tegra T186 platform.
2232
2233- Added support for Designware emmc driver.
2234
2235- Imported libfdt v1.4.2 that addresses buffer overflow in fdt_offset_ptr().
2236
2237- Enhanced the CPU operations framework to allow power handlers to be
2238 registered on per-level basis. This enables support for future CPUs that
2239 have multiple threads which might need powering down individually.
2240
2241- Updated register initialisation to prevent unexpected behaviour:
2242
2243 - Debug registers MDCR-EL3/SDCR and MDCR_EL2/HDCR are initialised to avoid
2244 unexpected traps into the higher exception levels and disable secure
2245 self-hosted debug. Additionally, secure privileged external debug on
2246 Juno is disabled by programming the appropriate Juno SoC registers.
2247
2248 - EL2 and EL3 configurable controls are initialised to avoid unexpected
2249 traps in the higher exception levels.
2250
2251 - Essential control registers are fully initialised on EL3 start-up, when
2252 initialising the non-secure and secure context structures and when
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002253 preparing to leave EL3 for a lower EL. This gives better alignment with
Dan Handley610e7e12018-03-01 18:44:00 +00002254 the Arm ARM which states that software must initialise RES0 and RES1
David Cunado1b796fa2017-07-03 18:59:07 +01002255 fields with 0 / 1.
2256
2257- Enhanced PSCI support:
2258
2259 - Introduced new platform interfaces that decouple PSCI stat residency
2260 calculation from PMF, enabling platforms to use alternative methods of
2261 capturing timestamps.
2262
2263 - PSCI stat accounting performed for retention/standby states when
2264 requested at multiple power levels.
2265
2266- Simplified fiptool to have a single linked list of image descriptors.
2267
2268- For the TSP, resolved corruption of pre-empted secure context by aborting any
2269 pre-empted SMC during PSCI power management requests.
2270
2271Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002272^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01002273
Dan Handley610e7e12018-03-01 18:44:00 +00002274- TF-A can be built with the latest mbed TLS version (v2.4.2). The earlier
2275 version 2.3.0 cannot be used due to build warnings that the TF-A build
David Cunado1b796fa2017-07-03 18:59:07 +01002276 system interprets as errors.
2277
2278- TBBR, including the Firmware Update feature is now supported on FVP
Dan Handley610e7e12018-03-01 18:44:00 +00002279 platforms when running TF-A in AArch32 state.
David Cunado1b796fa2017-07-03 18:59:07 +01002280
2281- The version of the AEMv8 Base FVP used in this release has resolved the issue
2282 of the model executing a reset instead of terminating in response to a
2283 shutdown request using the PSCI SYSTEM_OFF API.
2284
2285Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00002286^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01002287
Dan Handley610e7e12018-03-01 18:44:00 +00002288- Building TF-A with compiler optimisations disabled (-O0) fails.
David Cunado1b796fa2017-07-03 18:59:07 +01002289
2290- Trusted Board Boot currently does not work on Juno when running Trusted
2291 Firmware in AArch32 execution state due to error when loading the sp_min to
David Cunadob1580432018-03-14 17:57:31 +00002292 memory because of lack of free space available. See `tf-issue#501`_ for more
David Cunado1b796fa2017-07-03 18:59:07 +01002293 details.
2294
2295- The errata workaround for A53 errata 843419 is only available from binutils
2296 2.26 and is not present in GCC4.9. If this errata is applicable to the
2297 platform, please use GCC compiler version of at least 5.0. See `PR#1002`_ for
2298 more details.
2299
Paul Beesley32379552019-02-11 17:58:21 +00002300Version 1.3
2301-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002302
Douglas Raillard30d7b362017-06-28 16:14:55 +01002303
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002304New features
Paul Beesley32379552019-02-11 17:58:21 +00002305^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002306
Dan Handley610e7e12018-03-01 18:44:00 +00002307- Added support for running TF-A in AArch32 execution state.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002308
2309 The PSCI library has been refactored to allow integration with **EL3 Runtime
2310 Software**. This is software that is executing at the highest secure
2311 privilege which is EL3 in AArch64 or Secure SVC/Monitor mode in AArch32. See
Paul Beesleyf8640672019-04-12 14:19:42 +01002312 :ref:`PSCI Library Integration guide for Armv8-A AArch32 systems`.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002313
2314 Included is a minimal AArch32 Secure Payload, **SP-MIN**, that illustrates
2315 the usage and integration of the PSCI library with EL3 Runtime Software
2316 running in AArch32 state.
2317
2318 Booting to the BL1/BL2 images as well as booting straight to the Secure
2319 Payload is supported.
2320
Dan Handley610e7e12018-03-01 18:44:00 +00002321- Improvements to the initialization framework for the PSCI service and Arm
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002322 Standard Services in general.
2323
Dan Handley610e7e12018-03-01 18:44:00 +00002324 The PSCI service is now initialized as part of Arm Standard Service
2325 initialization. This consolidates the initializations of any Arm Standard
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002326 Service that may be added in the future.
2327
2328 A new function ``get_arm_std_svc_args()`` is introduced to get arguments
2329 corresponding to each standard service and must be implemented by the EL3
2330 Runtime Software.
2331
2332 For PSCI, a new versioned structure ``psci_lib_args_t`` is introduced to
2333 initialize the PSCI Library. **Note** this is a compatibility break due to
2334 the change in the prototype of ``psci_setup()``.
2335
2336- To support AArch32 builds of BL1 and BL2, implemented a new, alternative
2337 firmware image loading mechanism that adds flexibility.
2338
2339 The current mechanism has a hard-coded set of images and execution order
2340 (BL31, BL32, etc). The new mechanism is data-driven by a list of image
2341 descriptors provided by the platform code.
2342
Dan Handley610e7e12018-03-01 18:44:00 +00002343 Arm platforms have been updated to support the new loading mechanism.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002344
2345 The new mechanism is enabled by a build flag (``LOAD_IMAGE_V2``) which is
2346 currently off by default for the AArch64 build.
2347
2348 **Note** ``TRUSTED_BOARD_BOOT`` is currently not supported when
2349 ``LOAD_IMAGE_V2`` is enabled.
2350
Dan Handley610e7e12018-03-01 18:44:00 +00002351- Updated requirements for making contributions to TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002352
2353 Commits now must have a 'Signed-off-by:' field to certify that the
2354 contribution has been made under the terms of the
Paul Beesleyf8640672019-04-12 14:19:42 +01002355 :download:`Developer Certificate of Origin <../dco.txt>`.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002356
2357 A signed CLA is no longer required.
2358
Paul Beesleyf8640672019-04-12 14:19:42 +01002359 The :ref:`Contributor's Guide` has been updated to reflect this change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002360
2361- Introduced Performance Measurement Framework (PMF) which provides support
2362 for capturing, storing, dumping and retrieving time-stamps to measure the
2363 execution time of critical paths in the firmware. This relies on defining
2364 fixed sample points at key places in the code.
2365
2366- To support the QEMU platform port, imported libfdt v1.4.1 from
Paul Beesley2437ddc2019-02-08 16:43:05 +00002367 https://git.kernel.org/pub/scm/utils/dtc/dtc.git
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002368
2369- Updated PSCI support:
2370
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002371 - Added support for PSCI NODE_HW_STATE API for Arm platforms.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002372
2373 - New optional platform hook, ``pwr_domain_pwr_down_wfi()``, in
2374 ``plat_psci_ops`` to enable platforms to perform platform-specific actions
2375 needed to enter powerdown, including the 'wfi' invocation.
2376
Dan Handley610e7e12018-03-01 18:44:00 +00002377 - PSCI STAT residency and count functions have been added on Arm platforms
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002378 by using PMF.
2379
2380- Enhancements to the translation table library:
2381
2382 - Limited memory mapping support for region overlaps to only allow regions
2383 to overlap that are identity mapped or have the same virtual to physical
2384 address offset, and overlap completely but must not cover the same area.
2385
2386 This limitation will enable future enhancements without having to
2387 support complex edge cases that may not be necessary.
2388
2389 - The initial translation lookup level is now inferred from the virtual
2390 address space size. Previously, it was hard-coded.
2391
2392 - Added support for mapping Normal, Inner Non-cacheable, Outer
2393 Non-cacheable memory in the translation table library.
2394
2395 This can be useful to map a non-cacheable memory region, such as a DMA
2396 buffer.
2397
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002398 - Introduced the MT_EXECUTE/MT_EXECUTE_NEVER memory mapping attributes to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002399 specify the access permissions for instruction execution of a memory
2400 region.
2401
2402- Enabled support to isolate code and read-only data on separate memory pages,
2403 allowing independent access control to be applied to each.
2404
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002405- Enabled SCR_EL3.SIF (Secure Instruction Fetch) bit in BL1 and BL31 common
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002406 architectural setup code, preventing fetching instructions from non-secure
2407 memory when in secure state.
2408
2409- Enhancements to FIP support:
2410
2411 - Replaced ``fip_create`` with ``fiptool`` which provides a more consistent
2412 and intuitive interface as well as additional support to remove an image
2413 from a FIP file.
2414
2415 - Enabled printing the SHA256 digest with info command, allowing quick
2416 verification of an image within a FIP without having to extract the
2417 image and running sha256sum on it.
2418
2419 - Added support for unpacking the contents of an existing FIP file into
2420 the working directory.
2421
2422 - Aligned command line options for specifying images to use same naming
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002423 convention as specified by TBBR and already used in cert_create tool.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002424
2425- Refactored the TZC-400 driver to also support memory controllers that
Dan Handley610e7e12018-03-01 18:44:00 +00002426 integrate TZC functionality, for example Arm CoreLink DMC-500. Also added
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002427 DMC-500 specific support.
2428
2429- Implemented generic delay timer based on the system generic counter and
2430 migrated all platforms to use it.
2431
Dan Handley610e7e12018-03-01 18:44:00 +00002432- Enhanced support for Arm platforms:
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002433
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002434 - Updated image loading support to make SCP images (SCP_BL2 and SCP_BL2U)
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002435 optional.
2436
2437 - Enhanced topology description support to allow multi-cluster topology
2438 definitions.
2439
2440 - Added interconnect abstraction layer to help platform ports select the
2441 right interconnect driver, CCI or CCN, for the platform.
2442
2443 - Added support to allow loading BL31 in the TZC-secured DRAM instead of
2444 the default secure SRAM.
2445
2446 - Added support to use a System Security Control (SSC) Registers Unit
Dan Handley610e7e12018-03-01 18:44:00 +00002447 enabling TF-A to be compiled to support multiple Arm platforms and
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002448 then select one at runtime.
2449
2450 - Restricted mapping of Trusted ROM in BL1 to what is actually needed by
2451 BL1 rather than entire Trusted ROM region.
2452
2453 - Flash is now mapped as execute-never by default. This increases security
2454 by restricting the executable region to what is strictly needed.
2455
2456- Applied following erratum workarounds for Cortex-A57: 833471, 826977,
2457 829520, 828024 and 826974.
2458
2459- Added support for Mediatek MT6795 platform.
2460
Dan Handley610e7e12018-03-01 18:44:00 +00002461- Added support for QEMU virtualization Armv8-A target.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002462
2463- Added support for Rockchip RK3368 and RK3399 platforms.
2464
2465- Added support for Xilinx Zynq UltraScale+ MPSoC platform.
2466
Dan Handley610e7e12018-03-01 18:44:00 +00002467- Added support for Arm Cortex-A73 MPCore Processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002468
Dan Handley610e7e12018-03-01 18:44:00 +00002469- Added support for Arm Cortex-A72 processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002470
Dan Handley610e7e12018-03-01 18:44:00 +00002471- Added support for Arm Cortex-A35 processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002472
Dan Handley610e7e12018-03-01 18:44:00 +00002473- Added support for Arm Cortex-A32 MPCore Processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002474
2475- Enabled preloaded BL33 alternative boot flow, in which BL2 does not load
2476 BL33 from non-volatile storage and BL31 hands execution over to a preloaded
2477 BL33. The User Guide has been updated with an example of how to use this
2478 option with a bootwrapped kernel.
2479
Dan Handley610e7e12018-03-01 18:44:00 +00002480- Added support to build TF-A on a Windows-based host machine.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002481
2482- Updated Trusted Board Boot prototype implementation:
2483
2484 - Enabled the ability for a production ROM with TBBR enabled to boot test
2485 software before a real ROTPK is deployed (e.g. manufacturing mode).
2486 Added support to use ROTPK in certificate without verifying against the
2487 platform value when ``ROTPK_NOT_DEPLOYED`` bit is set.
2488
2489 - Added support for non-volatile counter authentication to the
2490 Authentication Module to protect against roll-back.
2491
2492- Updated GICv3 support:
2493
2494 - Enabled processor power-down and automatic power-on using GICv3.
2495
2496 - Enabled G1S or G0 interrupts to be configured independently.
2497
2498 - Changed FVP default interrupt driver to be the GICv3-only driver.
Dan Handley610e7e12018-03-01 18:44:00 +00002499 **Note** the default build of TF-A will not be able to boot
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002500 Linux kernel with GICv2 FDT blob.
2501
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002502 - Enabled wake-up from CPU_SUSPEND to stand-by by temporarily re-routing
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002503 interrupts and then restoring after resume.
2504
2505Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002506^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002507
2508Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002509^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002510
2511- The version of the AEMv8 Base FVP used in this release resets the model
2512 instead of terminating its execution in response to a shutdown request using
2513 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
2514 the model.
2515
Dan Handley610e7e12018-03-01 18:44:00 +00002516- Building TF-A with compiler optimisations disabled (``-O0``) fails.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002517
Dan Handley610e7e12018-03-01 18:44:00 +00002518- TF-A cannot be built with mbed TLS version v2.3.0 due to build warnings
2519 that the TF-A build system interprets as errors.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002520
Dan Handley610e7e12018-03-01 18:44:00 +00002521- TBBR is not currently supported when running TF-A in AArch32 state.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002522
Paul Beesley32379552019-02-11 17:58:21 +00002523Version 1.2
2524-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002525
2526New features
Paul Beesley32379552019-02-11 17:58:21 +00002527^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002528
Dan Handley610e7e12018-03-01 18:44:00 +00002529- The Trusted Board Boot implementation on Arm platforms now conforms to the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002530 mandatory requirements of the TBBR specification.
2531
2532 In particular, the boot process is now guarded by a Trusted Watchdog, which
Dan Handley610e7e12018-03-01 18:44:00 +00002533 will reset the system in case of an authentication or loading error. On Arm
2534 platforms, a secure instance of Arm SP805 is used as the Trusted Watchdog.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002535
2536 Also, a firmware update process has been implemented. It enables
2537 authenticated firmware to update firmware images from external interfaces to
2538 SoC Non-Volatile memories. This feature functions even when the current
2539 firmware in the system is corrupt or missing; it therefore may be used as
2540 a recovery mode.
2541
2542- Improvements have been made to the Certificate Generation Tool
2543 (``cert_create``) as follows.
2544
2545 - Added support for the Firmware Update process by extending the Chain
2546 of Trust definition in the tool to include the Firmware Update
2547 certificate and the required extensions.
2548
2549 - Introduced a new API that allows one to specify command line options in
2550 the Chain of Trust description. This makes the declaration of the tool's
2551 arguments more flexible and easier to extend.
2552
2553 - The tool has been reworked to follow a data driven approach, which
2554 makes it easier to maintain and extend.
2555
2556- Extended the FIP tool (``fip_create``) to support the new set of images
2557 involved in the Firmware Update process.
2558
2559- Various memory footprint improvements. In particular:
2560
2561 - The bakery lock structure for coherent memory has been optimised.
2562
2563 - The mbed TLS SHA1 functions are not needed, as SHA256 is used to
2564 generate the certificate signature. Therefore, they have been compiled
2565 out, reducing the memory footprint of BL1 and BL2 by approximately
2566 6 KB.
2567
Dan Handley610e7e12018-03-01 18:44:00 +00002568 - On Arm development platforms, each BL stage now individually defines
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002569 the number of regions that it needs to map in the MMU.
2570
2571- Added the following new design documents:
2572
Paul Beesleyf8640672019-04-12 14:19:42 +01002573 - :ref:`Authentication Framework & Chain of Trust`
2574 - :ref:`Firmware Update (FWU)`
2575 - :ref:`CPU Reset`
2576 - :ref:`PSCI Power Domain Tree Structure`
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002577
2578- Applied the new image terminology to the code base and documentation, as
Paul Beesleyf8640672019-04-12 14:19:42 +01002579 described in the :ref:`Image Terminology` document.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002580
2581- The build system has been reworked to improve readability and facilitate
2582 adding future extensions.
2583
Dan Handley610e7e12018-03-01 18:44:00 +00002584- On Arm standard platforms, BL31 uses the boot console during cold boot
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002585 but switches to the runtime console for any later logs at runtime. The TSP
2586 uses the runtime console for all output.
2587
Dan Handley610e7e12018-03-01 18:44:00 +00002588- Implemented a basic NOR flash driver for Arm platforms. It programs the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002589 device using CFI (Common Flash Interface) standard commands.
2590
Dan Handley610e7e12018-03-01 18:44:00 +00002591- Implemented support for booting EL3 payloads on Arm platforms, which
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002592 reduces the complexity of developing EL3 baremetal code by doing essential
2593 baremetal initialization.
2594
2595- Provided separate drivers for GICv3 and GICv2. These expect the entire
2596 software stack to use either GICv2 or GICv3; hybrid GIC software systems
Dan Handley610e7e12018-03-01 18:44:00 +00002597 are no longer supported and the legacy Arm GIC driver has been deprecated.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002598
Dan Handley610e7e12018-03-01 18:44:00 +00002599- Added support for Juno r1 and r2. A single set of Juno TF-A binaries can run
2600 on Juno r0, r1 and r2 boards. Note that this TF-A version depends on a Linaro
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002601 release that does *not* contain Juno r2 support.
2602
2603- Added support for MediaTek mt8173 platform.
2604
Dan Handley610e7e12018-03-01 18:44:00 +00002605- Implemented a generic driver for Arm CCN IP.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002606
2607- Major rework of the PSCI implementation.
2608
2609 - Added framework to handle composite power states.
2610
2611 - Decoupled the notions of affinity instances (which describes the
2612 hierarchical arrangement of cores) and of power domain topology, instead
2613 of assuming a one-to-one mapping.
2614
2615 - Better alignment with version 1.0 of the PSCI specification.
2616
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002617- Added support for the SYSTEM_SUSPEND PSCI API on Arm platforms. When invoked
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002618 on the last running core on a supported platform, this puts the system
2619 into a low power mode with memory retention.
2620
2621- Unified the reset handling code as much as possible across BL stages.
2622 Also introduced some build options to enable optimization of the reset path
2623 on platforms that support it.
2624
2625- Added a simple delay timer API, as well as an SP804 timer driver, which is
2626 enabled on FVP.
2627
2628- Added support for NVidia Tegra T210 and T132 SoCs.
2629
Dan Handley610e7e12018-03-01 18:44:00 +00002630- Reorganised Arm platforms ports to greatly improve code shareability and
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002631 facilitate the reuse of some of this code by other platforms.
2632
Dan Handley610e7e12018-03-01 18:44:00 +00002633- Added support for Arm Cortex-A72 processor in the CPU specific framework.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002634
2635- Provided better error handling. Platform ports can now define their own
2636 error handling, for example to perform platform specific bookkeeping or
2637 post-error actions.
2638
Dan Handley610e7e12018-03-01 18:44:00 +00002639- Implemented a unified driver for Arm Cache Coherent Interconnects used for
2640 both CCI-400 & CCI-500 IPs. Arm platforms ports have been migrated to this
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002641 common driver. The standalone CCI-400 driver has been deprecated.
2642
2643Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002644^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002645
2646- The Trusted Board Boot implementation has been redesigned to provide greater
Paul Beesleyf8640672019-04-12 14:19:42 +01002647 modularity and scalability. See the
2648 :ref:`Authentication Framework & Chain of Trust` document.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002649 All missing mandatory features are now implemented.
2650
2651- The FVP and Juno ports may now use the hash of the ROTPK stored in the
2652 Trusted Key Storage registers to verify the ROTPK. Alternatively, a
2653 development public key hash embedded in the BL1 and BL2 binaries might be
2654 used instead. The location of the ROTPK is chosen at build-time using the
2655 ``ARM_ROTPK_LOCATION`` build option.
2656
2657- GICv3 is now fully supported and stable.
2658
2659Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002660^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002661
2662- The version of the AEMv8 Base FVP used in this release resets the model
2663 instead of terminating its execution in response to a shutdown request using
2664 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
2665 the model.
2666
2667- While this version has low on-chip RAM requirements, there are further
2668 RAM usage enhancements that could be made.
2669
2670- The upstream documentation could be improved for structural consistency,
2671 clarity and completeness. In particular, the design documentation is
2672 incomplete for PSCI, the TSP(D) and the Juno platform.
2673
Dan Handley610e7e12018-03-01 18:44:00 +00002674- Building TF-A with compiler optimisations disabled (``-O0``) fails.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002675
Paul Beesley32379552019-02-11 17:58:21 +00002676Version 1.1
2677-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002678
2679New features
Paul Beesley32379552019-02-11 17:58:21 +00002680^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002681
2682- A prototype implementation of Trusted Board Boot has been added. Boot
2683 loader images are verified by BL1 and BL2 during the cold boot path. BL1 and
2684 BL2 use the PolarSSL SSL library to verify certificates and images. The
2685 OpenSSL library is used to create the X.509 certificates. Support has been
2686 added to ``fip_create`` tool to package the certificates in a FIP.
2687
2688- Support for calling CPU and platform specific reset handlers upon entry into
2689 BL3-1 during the cold and warm boot paths has been added. This happens after
2690 another Boot ROM ``reset_handler()`` has already run. This enables a developer
2691 to perform additional actions or undo actions already performed during the
2692 first call of the reset handlers e.g. apply additional errata workarounds.
2693
2694- Support has been added to demonstrate routing of IRQs to EL3 instead of
2695 S-EL1 when execution is in secure world.
2696
2697- The PSCI implementation now conforms to version 1.0 of the PSCI
2698 specification. All the mandatory APIs and selected optional APIs are
2699 supported. In particular, support for the ``PSCI_FEATURES`` API has been
2700 added. A capability variable is constructed during initialization by
2701 examining the ``plat_pm_ops`` and ``spd_pm_ops`` exported by the platform and
2702 the Secure Payload Dispatcher. This is used by the PSCI FEATURES function
2703 to determine which PSCI APIs are supported by the platform.
2704
2705- Improvements have been made to the PSCI code as follows.
2706
2707 - The code has been refactored to remove redundant parameters from
2708 internal functions.
2709
2710 - Changes have been made to the code for PSCI ``CPU_SUSPEND``, ``CPU_ON`` and
2711 ``CPU_OFF`` calls to facilitate an early return to the caller in case a
2712 failure condition is detected. For example, a PSCI ``CPU_SUSPEND`` call
2713 returns ``SUCCESS`` to the caller if a pending interrupt is detected early
2714 in the code path.
2715
2716 - Optional platform APIs have been added to validate the ``power_state`` and
2717 ``entrypoint`` parameters early in PSCI ``CPU_ON`` and ``CPU_SUSPEND`` code
2718 paths.
2719
2720 - PSCI migrate APIs have been reworked to invoke the SPD hook to determine
2721 the type of Trusted OS and the CPU it is resident on (if
2722 applicable). Also, during a PSCI ``MIGRATE`` call, the SPD hook to migrate
2723 the Trusted OS is invoked.
2724
Dan Handley610e7e12018-03-01 18:44:00 +00002725- It is now possible to build TF-A without marking at least an extra page of
2726 memory as coherent. The build flag ``USE_COHERENT_MEM`` can be used to
2727 choose between the two implementations. This has been made possible through
2728 these changes.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002729
2730 - An implementation of Bakery locks, where the locks are not allocated in
2731 coherent memory has been added.
2732
2733 - Memory which was previously marked as coherent is now kept coherent
2734 through the use of software cache maintenance operations.
2735
2736 Approximately, 4K worth of memory is saved for each boot loader stage when
2737 ``USE_COHERENT_MEM=0``. Enabling this option increases the latencies
2738 associated with acquire and release of locks. It also requires changes to
2739 the platform ports.
2740
2741- It is now possible to specify the name of the FIP at build time by defining
2742 the ``FIP_NAME`` variable.
2743
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002744- Issues with dependencies on the 'fiptool' makefile target have been
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002745 rectified. The ``fip_create`` tool is now rebuilt whenever its source files
2746 change.
2747
2748- The BL3-1 runtime console is now also used as the crash console. The crash
2749 console is changed to SoC UART0 (UART2) from the previous FPGA UART0 (UART0)
2750 on Juno. In FVP, it is changed from UART0 to UART1.
2751
2752- CPU errata workarounds are applied only when the revision and part number
2753 match. This behaviour has been made consistent across the debug and release
2754 builds. The debug build additionally prints a warning if a mismatch is
2755 detected.
2756
2757- It is now possible to issue cache maintenance operations by set/way for a
2758 particular level of data cache. Levels 1-3 are currently supported.
2759
2760- The following improvements have been made to the FVP port.
2761
2762 - The build option ``FVP_SHARED_DATA_LOCATION`` which allowed relocation of
2763 shared data into the Trusted DRAM has been deprecated. Shared data is
2764 now always located at the base of Trusted SRAM.
2765
2766 - BL2 Translation tables have been updated to map only the region of
2767 DRAM which is accessible to normal world. This is the region of the 2GB
2768 DDR-DRAM memory at 0x80000000 excluding the top 16MB. The top 16MB is
2769 accessible to only the secure world.
2770
2771 - BL3-2 can now reside in the top 16MB of DRAM which is accessible only to
2772 the secure world. This can be done by setting the build flag
2773 ``FVP_TSP_RAM_LOCATION`` to the value ``dram``.
2774
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002775- Separate translation tables are created for each boot loader image. The
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002776 ``IMAGE_BLx`` build options are used to do this. This allows each stage to
2777 create mappings only for areas in the memory map that it needs.
2778
2779- A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been
Paul Beesleyf8640672019-04-12 14:19:42 +01002780 added. Details of using it with TF-A can be found in :ref:`OP-TEE Dispatcher`
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002781
2782Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002783^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002784
2785- The Juno port has been aligned with the FVP port as follows.
2786
2787 - Support for reclaiming all BL1 RW memory and BL2 memory by overlaying
2788 the BL3-1/BL3-2 NOBITS sections on top of them has been added to the
2789 Juno port.
2790
2791 - The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured
2792 using the TZC-400 controller to be accessible only to the secure world.
2793
Dan Handley610e7e12018-03-01 18:44:00 +00002794 - The Arm GIC driver is used to configure the GIC-400 instead of using a
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002795 GIC driver private to the Juno port.
2796
2797 - PSCI ``CPU_SUSPEND`` calls that target a standby state are now supported.
2798
2799 - The TZC-400 driver is used to configure the controller instead of direct
2800 accesses to the registers.
2801
2802- The Linux kernel version referred to in the user guide has DVFS and HMP
2803 support enabled.
2804
2805- DS-5 v5.19 did not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
2806 CADI server mode. This issue is not seen with DS-5 v5.20 and Version 6.2 of
2807 the Cortex-A57-A53 Base FVPs.
2808
2809Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002810^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002811
2812- The Trusted Board Boot implementation is a prototype. There are issues with
2813 the modularity and scalability of the design. Support for a Trusted
2814 Watchdog, firmware update mechanism, recovery images and Trusted debug is
2815 absent. These issues will be addressed in future releases.
2816
2817- The FVP and Juno ports do not use the hash of the ROTPK stored in the
2818 Trusted Key Storage registers to verify the ROTPK in the
2819 ``plat_match_rotpk()`` function. This prevents the correct establishment of
2820 the Chain of Trust at the first step in the Trusted Board Boot process.
2821
2822- The version of the AEMv8 Base FVP used in this release resets the model
2823 instead of terminating its execution in response to a shutdown request using
2824 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
2825 the model.
2826
2827- GICv3 support is experimental. There are known issues with GICv3
Dan Handley610e7e12018-03-01 18:44:00 +00002828 initialization in the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002829
2830- While this version greatly reduces the on-chip RAM requirements, there are
2831 further RAM usage enhancements that could be made.
2832
2833- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2834 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2835
2836- The Juno-specific firmware design documentation is incomplete.
2837
Paul Beesley32379552019-02-11 17:58:21 +00002838Version 1.0
2839-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002840
2841New features
Paul Beesley32379552019-02-11 17:58:21 +00002842^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002843
2844- It is now possible to map higher physical addresses using non-flat virtual
2845 to physical address mappings in the MMU setup.
2846
2847- Wider use is now made of the per-CPU data cache in BL3-1 to store:
2848
2849 - Pointers to the non-secure and secure security state contexts.
2850
2851 - A pointer to the CPU-specific operations.
2852
2853 - A pointer to PSCI specific information (for example the current power
2854 state).
2855
2856 - A crash reporting buffer.
2857
2858- The following RAM usage improvements result in a BL3-1 RAM usage reduction
2859 from 96KB to 56KB (for FVP with TSPD), and a total RAM usage reduction
2860 across all images from 208KB to 88KB, compared to the previous release.
2861
2862 - Removed the separate ``early_exception`` vectors from BL3-1 (2KB code size
2863 saving).
2864
2865 - Removed NSRAM from the FVP memory map, allowing the removal of one
2866 (4KB) translation table.
2867
2868 - Eliminated the internal ``psci_suspend_context`` array, saving 2KB.
2869
2870 - Correctly dimensioned the PSCI ``aff_map_node`` array, saving 1.5KB in the
2871 FVP port.
2872
2873 - Removed calling CPU mpidr from the bakery lock API, saving 160 bytes.
2874
2875 - Removed current CPU mpidr from PSCI common code, saving 160 bytes.
2876
2877 - Inlined the mmio accessor functions, saving 360 bytes.
2878
2879 - Fully reclaimed all BL1 RW memory and BL2 memory on the FVP port by
2880 overlaying the BL3-1/BL3-2 NOBITS sections on top of these at runtime.
2881
2882 - Made storing the FP register context optional, saving 0.5KB per context
2883 (8KB on the FVP port, with TSPD enabled and running on 8 CPUs).
2884
2885 - Implemented a leaner ``tf_printf()`` function, allowing the stack to be
2886 greatly reduced.
2887
2888 - Removed coherent stacks from the codebase. Stacks allocated in normal
2889 memory are now used before and after the MMU is enabled. This saves 768
2890 bytes per CPU in BL3-1.
2891
2892 - Reworked the crash reporting in BL3-1 to use less stack.
2893
2894 - Optimized the EL3 register state stored in the ``cpu_context`` structure
2895 so that registers that do not change during normal execution are
2896 re-initialized each time during cold/warm boot, rather than restored
2897 from memory. This saves about 1.2KB.
2898
2899 - As a result of some of the above, reduced the runtime stack size in all
2900 BL images. For BL3-1, this saves 1KB per CPU.
2901
2902- PSCI SMC handler improvements to correctly handle calls from secure states
2903 and from AArch32.
2904
2905- CPU contexts are now initialized from the ``entry_point_info``. BL3-1 fully
2906 determines the exception level to use for the non-trusted firmware (BL3-3)
2907 based on the SPSR value provided by the BL2 platform code (or otherwise
2908 provided to BL3-1). This allows platform code to directly run non-trusted
2909 firmware payloads at either EL2 or EL1 without requiring an EL2 stub or OS
2910 loader.
2911
2912- Code refactoring improvements:
2913
2914 - Refactored ``fvp_config`` into a common platform header.
2915
2916 - Refactored the fvp gic code to be a generic driver that no longer has an
2917 explicit dependency on platform code.
2918
2919 - Refactored the CCI-400 driver to not have dependency on platform code.
2920
2921 - Simplified the IO driver so it's no longer necessary to call ``io_init()``
2922 and moved all the IO storage framework code to one place.
2923
2924 - Simplified the interface the the TZC-400 driver.
2925
2926 - Clarified the platform porting interface to the TSP.
2927
2928 - Reworked the TSPD setup code to support the alternate BL3-2
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002929 initialization flow where BL3-1 generic code hands control to BL3-2,
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002930 rather than expecting the TSPD to hand control directly to BL3-2.
2931
2932 - Considerable rework to PSCI generic code to support CPU specific
2933 operations.
2934
2935- Improved console log output, by:
2936
2937 - Adding the concept of debug log levels.
2938
2939 - Rationalizing the existing debug messages and adding new ones.
2940
2941 - Printing out the version of each BL stage at runtime.
2942
2943 - Adding support for printing console output from assembler code,
2944 including when a crash occurs before the C runtime is initialized.
2945
2946- Moved up to the latest versions of the FVPs, toolchain, EDK2, kernel, Linaro
2947 file system and DS-5.
2948
2949- On the FVP port, made the use of the Trusted DRAM region optional at build
2950 time (off by default). Normal platforms will not have such a "ready-to-use"
2951 DRAM area so it is not a good example to use it.
2952
2953- Added support for PSCI ``SYSTEM_OFF`` and ``SYSTEM_RESET`` APIs.
2954
2955- Added support for CPU specific reset sequences, power down sequences and
2956 register dumping during crash reporting. The CPU specific reset sequences
2957 include support for errata workarounds.
2958
2959- Merged the Juno port into the master branch. Added support for CPU hotplug
2960 and CPU idle. Updated the user guide to describe how to build and run on the
2961 Juno platform.
2962
2963Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002964^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002965
2966- Removed the concept of top/bottom image loading. The image loader now
2967 automatically detects the position of the image inside the current memory
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002968 layout and updates the layout to minimize fragmentation. This resolves the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002969 image loader limitations of previously releases. There are currently no
2970 plans to support dynamic image loading.
2971
2972- CPU idle now works on the publicized version of the Foundation FVP.
2973
2974- All known issues relating to the compiler version used have now been
Dan Handley610e7e12018-03-01 18:44:00 +00002975 resolved. This TF-A version uses Linaro toolchain 14.07 (based on GCC 4.9).
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002976
2977Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002978^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002979
2980- GICv3 support is experimental. The Linux kernel patches to support this are
2981 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00002982 the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002983
2984- While this version greatly reduces the on-chip RAM requirements, there are
2985 further RAM usage enhancements that could be made.
2986
2987- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2988 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2989
2990- The Juno-specific firmware design documentation is incomplete.
2991
2992- Some recent enhancements to the FVP port have not yet been translated into
2993 the Juno port. These will be tracked via the tf-issues project.
2994
2995- The Linux kernel version referred to in the user guide has DVFS and HMP
2996 support disabled due to some known instabilities at the time of this
2997 release. A future kernel version will re-enable these features.
2998
2999- DS-5 v5.19 does not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
3000 CADI server mode. This is because the ``<SimName>`` reported by the FVP in
3001 this version has changed. For example, for the Cortex-A57x4-A53x4 Base FVP,
3002 the ``<SimName>`` reported by the FVP is ``FVP_Base_Cortex_A57x4_A53x4``, while
3003 DS-5 expects it to be ``FVP_Base_A57x4_A53x4``.
3004
3005 The temporary fix to this problem is to change the name of the FVP in
3006 ``sw/debugger/configdb/Boards/ARM FVP/Base_A57x4_A53x4/cadi_config.xml``.
3007 Change the following line:
3008
3009 ::
3010
3011 <SimName>System Generator:FVP_Base_A57x4_A53x4</SimName>
3012
3013 to
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003014 System Generator:FVP_Base_Cortex-A57x4_A53x4
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003015
3016 A similar change can be made to the other Cortex-A57-A53 Base FVP variants.
3017
Paul Beesley32379552019-02-11 17:58:21 +00003018Version 0.4
3019-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003020
3021New features
Paul Beesley32379552019-02-11 17:58:21 +00003022^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003023
3024- Makefile improvements:
3025
3026 - Improved dependency checking when building.
3027
3028 - Removed ``dump`` target (build now always produces dump files).
3029
3030 - Enabled platform ports to optionally make use of parts of the Trusted
3031 Firmware (e.g. BL3-1 only), rather than being forced to use all parts.
3032 Also made the ``fip`` target optional.
3033
3034 - Specified the full path to source files and removed use of the ``vpath``
3035 keyword.
3036
3037- Provided translation table library code for potential re-use by platforms
3038 other than the FVPs.
3039
3040- Moved architectural timer setup to platform-specific code.
3041
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003042- Added standby state support to PSCI cpu_suspend implementation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003043
3044- SRAM usage improvements:
3045
3046 - Started using the ``-ffunction-sections``, ``-fdata-sections`` and
3047 ``--gc-sections`` compiler/linker options to remove unused code and data
3048 from the images. Previously, all common functions were being built into
3049 all binary images, whether or not they were actually used.
3050
3051 - Placed all assembler functions in their own section to allow more unused
3052 functions to be removed from images.
3053
3054 - Updated BL1 and BL2 to use a single coherent stack each, rather than one
3055 per CPU.
3056
3057 - Changed variables that were unnecessarily declared and initialized as
3058 non-const (i.e. in the .data section) so they are either uninitialized
3059 (zero init) or const.
3060
3061- Moved the Test Secure-EL1 Payload (BL3-2) to execute in Trusted SRAM by
3062 default. The option for it to run in Trusted DRAM remains.
3063
3064- Implemented a TrustZone Address Space Controller (TZC-400) driver. A
3065 default configuration is provided for the Base FVPs. This means the model
3066 parameter ``-C bp.secure_memory=1`` is now supported.
3067
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003068- Started saving the PSCI cpu_suspend 'power_state' parameter prior to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003069 suspending a CPU. This allows platforms that implement multiple power-down
3070 states at the same affinity level to identify a specific state.
3071
3072- Refactored the entire codebase to reduce the amount of nesting in header
3073 files and to make the use of system/user includes more consistent. Also
3074 split platform.h to separate out the platform porting declarations from the
3075 required platform porting definitions and the definitions/declarations
3076 specific to the platform port.
3077
3078- Optimized the data cache clean/invalidate operations.
3079
3080- Improved the BL3-1 unhandled exception handling and reporting. Unhandled
3081 exceptions now result in a dump of registers to the console.
3082
3083- Major rework to the handover interface between BL stages, in particular the
3084 interface to BL3-1. The interface now conforms to a specification and is
3085 more future proof.
3086
3087- Added support for optionally making the BL3-1 entrypoint a reset handler
3088 (instead of BL1). This allows platforms with an alternative image loading
3089 architecture to re-use BL3-1 with fewer modifications to generic code.
3090
3091- Reserved some DDR DRAM for secure use on FVP platforms to avoid future
3092 compatibility problems with non-secure software.
3093
3094- Added support for secure interrupts targeting the Secure-EL1 Payload (SP)
3095 (using GICv2 routing only). Demonstrated this working by adding an interrupt
3096 target and supporting test code to the TSP. Also demonstrated non-secure
3097 interrupt handling during TSP processing.
3098
3099Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00003100^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003101
3102- Now support use of the model parameter ``-C bp.secure_memory=1`` in the Base
3103 FVPs (see **New features**).
3104
3105- Support for secure world interrupt handling now available (see **New
3106 features**).
3107
3108- Made enough SRAM savings (see **New features**) to enable the Test Secure-EL1
3109 Payload (BL3-2) to execute in Trusted SRAM by default.
3110
3111- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
3112 14.04) now correctly reports progress in the console.
3113
3114- Improved the Makefile structure to make it easier to separate out parts of
Dan Handley610e7e12018-03-01 18:44:00 +00003115 the TF-A for re-use in platform ports. Also, improved target dependency
3116 checking.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003117
3118Known issues
Paul Beesley32379552019-02-11 17:58:21 +00003119^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003120
3121- GICv3 support is experimental. The Linux kernel patches to support this are
3122 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00003123 the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003124
3125- Dynamic image loading is not available yet. The current image loader
3126 implementation (used to load BL2 and all subsequent images) has some
3127 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
3128 to loading errors, even if the images should theoretically fit in memory.
3129
Dan Handley610e7e12018-03-01 18:44:00 +00003130- TF-A still uses too much on-chip Trusted SRAM. A number of RAM usage
3131 enhancements have been identified to rectify this situation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003132
3133- CPU idle does not work on the advertised version of the Foundation FVP.
3134 Some FVP fixes are required that are not available externally at the time
3135 of writing. This can be worked around by disabling CPU idle in the Linux
3136 kernel.
3137
Dan Handley610e7e12018-03-01 18:44:00 +00003138- Various bugs in TF-A, UEFI and the Linux kernel have been observed when
3139 using Linaro toolchain versions later than 13.11. Although most of these
3140 have been fixed, some remain at the time of writing. These mainly seem to
3141 relate to a subtle change in the way the compiler converts between 64-bit
3142 and 32-bit values (e.g. during casting operations), which reveals
3143 previously hidden bugs in client code.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003144
3145- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
3146 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
3147
Paul Beesley32379552019-02-11 17:58:21 +00003148Version 0.3
3149-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003150
3151New features
Paul Beesley32379552019-02-11 17:58:21 +00003152^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003153
3154- Support for Foundation FVP Version 2.0 added.
3155 The documented UEFI configuration disables some devices that are unavailable
3156 in the Foundation FVP, including MMC and CLCD. The resultant UEFI binary can
3157 be used on the AEMv8 and Cortex-A57-A53 Base FVPs, as well as the Foundation
3158 FVP.
3159
Paul Beesleyba3ed402019-03-13 16:20:44 +00003160 .. note::
3161 The software will not work on Version 1.0 of the Foundation FVP.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003162
3163- Enabled third party contributions. Added a new contributing.md containing
3164 instructions for how to contribute and updated copyright text in all files
3165 to acknowledge contributors.
3166
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003167- The PSCI CPU_SUSPEND API has been stabilised to the extent where it can be
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003168 used for entry into power down states with the following restrictions:
3169
3170 - Entry into standby states is not supported.
3171 - The API is only supported on the AEMv8 and Cortex-A57-A53 Base FVPs.
3172
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003173- The PSCI AFFINITY_INFO api has undergone limited testing on the Base FVPs to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003174 allow experimental use.
3175
Dan Handley610e7e12018-03-01 18:44:00 +00003176- Required C library and runtime header files are now included locally in
3177 TF-A instead of depending on the toolchain standard include paths. The
3178 local implementation has been cleaned up and reduced in scope.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003179
3180- Added I/O abstraction framework, primarily to allow generic code to load
3181 images in a platform-independent way. The existing image loading code has
3182 been reworked to use the new framework. Semi-hosting and NOR flash I/O
3183 drivers are provided.
3184
3185- Introduced Firmware Image Package (FIP) handling code and tools. A FIP
3186 combines multiple firmware images with a Table of Contents (ToC) into a
3187 single binary image. The new FIP driver is another type of I/O driver. The
3188 Makefile builds a FIP by default and the FVP platform code expect to load a
3189 FIP from NOR flash, although some support for image loading using semi-
3190 hosting is retained.
3191
Paul Beesleyba3ed402019-03-13 16:20:44 +00003192 .. note::
3193 Building a FIP by default is a non-backwards-compatible change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003194
Paul Beesleyba3ed402019-03-13 16:20:44 +00003195 .. note::
3196 Generic BL2 code now loads a BL3-3 (non-trusted firmware) image into
3197 DRAM instead of expecting this to be pre-loaded at known location. This is
3198 also a non-backwards-compatible change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003199
Paul Beesleyba3ed402019-03-13 16:20:44 +00003200 .. note::
3201 Some non-trusted firmware (e.g. UEFI) will need to be rebuilt so that
3202 it knows the new location to execute from and no longer needs to copy
3203 particular code modules to DRAM itself.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003204
3205- Reworked BL2 to BL3-1 handover interface. A new composite structure
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003206 (bl31_args) holds the superset of information that needs to be passed from
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003207 BL2 to BL3-1, including information on how handover execution control to
3208 BL3-2 (if present) and BL3-3 (non-trusted firmware).
3209
3210- Added library support for CPU context management, allowing the saving and
3211 restoring of
3212
3213 - Shared system registers between Secure-EL1 and EL1.
3214 - VFP registers.
3215 - Essential EL3 system registers.
3216
3217- Added a framework for implementing EL3 runtime services. Reworked the PSCI
3218 implementation to be one such runtime service.
3219
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01003220- Reworked the exception handling logic, making use of both SP_EL0 and SP_EL3
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003221 stack pointers for determining the type of exception, managing general
3222 purpose and system register context on exception entry/exit, and handling
3223 SMCs. SMCs are directed to the correct EL3 runtime service.
3224
3225- Added support for a Test Secure-EL1 Payload (TSP) and a corresponding
3226 Dispatcher (TSPD), which is loaded as an EL3 runtime service. The TSPD
3227 implements Secure Monitor functionality such as world switching and
3228 EL1 context management, and is responsible for communication with the TSP.
Paul Beesleyba3ed402019-03-13 16:20:44 +00003229
3230 .. note::
3231 The TSPD does not yet contain support for secure world interrupts.
3232 .. note::
3233 The TSP/TSPD is not built by default.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003234
3235Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00003236^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003237
3238- Support has been added for switching context between secure and normal
3239 worlds in EL3.
3240
3241- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` have now been tested (to
3242 a limited extent).
3243
Dan Handley610e7e12018-03-01 18:44:00 +00003244- The TF-A build artifacts are now placed in the ``./build`` directory and
3245 sub-directories instead of being placed in the root of the project.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003246
Dan Handley610e7e12018-03-01 18:44:00 +00003247- TF-A is now free from build warnings. Build warnings are now treated as
3248 errors.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003249
Dan Handley610e7e12018-03-01 18:44:00 +00003250- TF-A now provides C library support locally within the project to maintain
3251 compatibility between toolchains/systems.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003252
3253- The PSCI locking code has been reworked so it no longer takes locks in an
3254 incorrect sequence.
3255
3256- The RAM-disk method of loading a Linux file-system has been confirmed to
Dan Handley610e7e12018-03-01 18:44:00 +00003257 work with the TF-A and Linux kernel version (based on version 3.13) used
3258 in this release, for both Foundation and Base FVPs.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003259
3260Known issues
Paul Beesley32379552019-02-11 17:58:21 +00003261^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003262
3263The following is a list of issues which are expected to be fixed in the future
Dan Handley610e7e12018-03-01 18:44:00 +00003264releases of TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003265
3266- The TrustZone Address Space Controller (TZC-400) is not being programmed
3267 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
3268
3269- No support yet for secure world interrupt handling.
3270
3271- GICv3 support is experimental. The Linux kernel patches to support this are
3272 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00003273 TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003274
3275- Dynamic image loading is not available yet. The current image loader
3276 implementation (used to load BL2 and all subsequent images) has some
3277 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
3278 to loading errors, even if the images should theoretically fit in memory.
3279
Dan Handley610e7e12018-03-01 18:44:00 +00003280- TF-A uses too much on-chip Trusted SRAM. Currently the Test Secure-EL1
3281 Payload (BL3-2) executes in Trusted DRAM since there is not enough SRAM.
3282 A number of RAM usage enhancements have been identified to rectify this
3283 situation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003284
3285- CPU idle does not work on the advertised version of the Foundation FVP.
3286 Some FVP fixes are required that are not available externally at the time
3287 of writing.
3288
Dan Handley610e7e12018-03-01 18:44:00 +00003289- Various bugs in TF-A, UEFI and the Linux kernel have been observed when
3290 using Linaro toolchain versions later than 13.11. Although most of these
3291 have been fixed, some remain at the time of writing. These mainly seem to
3292 relate to a subtle change in the way the compiler converts between 64-bit
3293 and 32-bit values (e.g. during casting operations), which reveals
3294 previously hidden bugs in client code.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003295
3296- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
3297 14.01) does not report progress correctly in the console. It only seems to
3298 produce error output, not standard output. It otherwise appears to function
3299 correctly. Other filesystem versions on the same software stack do not
3300 exhibit the problem.
3301
3302- The Makefile structure doesn't make it easy to separate out parts of the
Dan Handley610e7e12018-03-01 18:44:00 +00003303 TF-A for re-use in platform ports, for example if only BL3-1 is required in
3304 a platform port. Also, dependency checking in the Makefile is flawed.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003305
3306- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
3307 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
3308
Paul Beesley32379552019-02-11 17:58:21 +00003309Version 0.2
3310-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003311
3312New features
Paul Beesley32379552019-02-11 17:58:21 +00003313^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003314
3315- First source release.
3316
3317- Code for the PSCI suspend feature is supplied, although this is not enabled
3318 by default since there are known issues (see below).
3319
3320Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00003321^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003322
3323- The "psci" nodes in the FDTs provided in this release now fully comply
3324 with the recommendations made in the PSCI specification.
3325
3326Known issues
Paul Beesley32379552019-02-11 17:58:21 +00003327^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003328
3329The following is a list of issues which are expected to be fixed in the future
Dan Handley610e7e12018-03-01 18:44:00 +00003330releases of TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003331
3332- The TrustZone Address Space Controller (TZC-400) is not being programmed
3333 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
3334
3335- No support yet for secure world interrupt handling or for switching context
3336 between secure and normal worlds in EL3.
3337
3338- GICv3 support is experimental. The Linux kernel patches to support this are
3339 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00003340 TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003341
3342- Dynamic image loading is not available yet. The current image loader
3343 implementation (used to load BL2 and all subsequent images) has some
3344 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
3345 to loading errors, even if the images should theoretically fit in memory.
3346
3347- Although support for PSCI ``CPU_SUSPEND`` is present, it is not yet stable
3348 and ready for use.
3349
Dan Handley610e7e12018-03-01 18:44:00 +00003350- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` are implemented but have
3351 not been tested.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003352
Dan Handley610e7e12018-03-01 18:44:00 +00003353- The TF-A make files result in all build artifacts being placed in the root
3354 of the project. These should be placed in appropriate sub-directories.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003355
Dan Handley610e7e12018-03-01 18:44:00 +00003356- The compilation of TF-A is not free from compilation warnings. Some of these
3357 warnings have not been investigated yet so they could mask real bugs.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003358
Dan Handley610e7e12018-03-01 18:44:00 +00003359- TF-A currently uses toolchain/system include files like stdio.h. It should
3360 provide versions of these within the project to maintain compatibility
3361 between toolchains/systems.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003362
3363- The PSCI code takes some locks in an incorrect sequence. This may cause
3364 problems with suspend and hotplug in certain conditions.
3365
3366- The Linux kernel used in this release is based on version 3.12-rc4. Using
Dan Handley610e7e12018-03-01 18:44:00 +00003367 this kernel with the TF-A fails to start the file-system as a RAM-disk. It
3368 fails to execute user-space ``init`` from the RAM-disk. As an alternative,
3369 the VirtioBlock mechanism can be used to provide a file-system to the
3370 kernel.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003371
3372--------------
3373
Louis Mayencourt950ef2f2020-03-27 11:49:20 +00003374*Copyright (c) 2013-2020, Arm Limited and Contributors. All rights reserved.*
Douglas Raillardd7c21b72017-06-28 15:23:03 +01003375
David Cunadob1580432018-03-14 17:57:31 +00003376.. _SDEI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf
David Cunado1b796fa2017-07-03 18:59:07 +01003377.. _tf-issue#501: https://github.com/ARM-software/tf-issues/issues/501
3378.. _PR#1002: https://github.com/ARM-software/arm-trusted-firmware/pull/1002#issuecomment-312650193
Paul Beesleyf8640672019-04-12 14:19:42 +01003379.. _mbed TLS releases: https://tls.mbed.org/tech-updates/releases