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