blob: 7e072a930faf5b9696440338400966cf283dd05e [file] [log] [blame]
Paul Beesleyfc9ee362019-03-07 15:47:15 +00001Change Log & Release Notes
2==========================
Douglas Raillard30d7b362017-06-28 16:14:55 +01003
Paul Beesley32379552019-02-11 17:58:21 +00004This document contains a summary of the new features, changes, fixes and known
5issues in each release of Trusted Firmware-A.
Douglas Raillard30d7b362017-06-28 16:14:55 +01006
laurenw-arm9ef94462019-10-11 14:10:09 -05007Version 2.2
8-----------
9
10New Features
11^^^^^^^^^^^^
12
13- Architecture
14 - Enable Pointer Authentication (PAuth) support for Secure World
15 - Adds support for ARMv8.3-PAuth in BL1 SMC calls and
16 BL2U image for firmware updates.
17
18 - Enable Memory Tagging Extension (MTE) support in both secure and non-secure
19 worlds
Louis Mayencourt950ef2f2020-03-27 11:49:20 +000020
laurenw-arm9ef94462019-10-11 14:10:09 -050021 - Adds support for the new Memory Tagging Extension arriving in
22 ARMv8.5. MTE support is now enabled by default on systems that
23 support it at EL0.
24 - To enable it at ELx for both the non-secure and the secure
25 world, the compiler flag ``CTX_INCLUDE_MTE_REGS`` includes register
26 saving and restoring when necessary in order to prevent information
27 leakage between the worlds.
28
29 - Add support for Branch Target Identification (BTI)
30
31- Build System
32 - Modify FVP makefile for CPUs that support both AArch64/32
33
34 - AArch32: Allow compiling with soft-float toolchain
35
36 - Makefile: Add default warning flags
37
38 - Add Makefile check for PAuth and AArch64
39
40 - Add compile-time errors for HW_ASSISTED_COHERENCY flag
41
42 - Apply compile-time check for AArch64-only CPUs
43
44 - build_macros: Add mechanism to prevent bin generation.
45
46 - Add support for default stack-protector flag
47
48 - spd: opteed: Enable NS_TIMER_SWITCH
49
50 - plat/arm: Skip BL2U if RESET_TO_SP_MIN flag is set
51
52 - Add new build option to let each platform select which implementation of spinlocks
53 it wants to use
54
55- CPU Support
56 - DSU: Workaround for erratum 798953 and 936184
57
58 - Neoverse N1: Force cacheable atomic to near atomic
59 - Neoverse N1: Workaround for erratum 1073348, 1130799, 1165347, 1207823,
60 1220197, 1257314, 1262606, 1262888, 1275112, 1315703, 1542419
61
62 - Neoverse Zeus: Apply the MSR SSBS instruction
63
laurenw-armc6977622019-10-23 15:39:31 -050064 - cortex-Hercules/HerculesAE: Support added for Cortex-Hercules and
65 Cortex-HerculesAE CPUs
66 - cortex-Hercules/HerculesAE: Enable AMU for Cortex-Hercules and Cortex-HerculesAE
67
laurenw-arm9ef94462019-10-11 14:10:09 -050068 - cortex-a76AE: Support added for Cortex-A76AE CPU
69 - cortex-a76: Workaround for erratum 1257314, 1262606, 1262888, 1275112,
70 1286807
71
72 - cortex-a65/a65AE: Support added for Cortex-A65 and Cortex-A65AE CPUs
73 - cortex-a65: Enable AMU for Cortex-A65
74
75 - cortex-a55: Workaround for erratum 1221012
76
77 - cortex-a35: Workaround for erratum 855472
78
79 - cortex-a9: Workaround for erratum 794073
80
81- Drivers
82 - console: Allow the console to register multiple times
83
84 - delay: Timeout detection support
85
86 - gicv3: Enabled multi-socket GIC redistributor frame discovery and migrated
87 ARM platforms to the new API
Louis Mayencourt950ef2f2020-03-27 11:49:20 +000088
laurenw-arm9ef94462019-10-11 14:10:09 -050089 - Adds ``gicv3_rdistif_probe`` function that delegates the responsibility
90 of discovering the corresponding redistributor base frame to each CPU
91 itself.
92
93 - sbsa: Add SBSA watchdog driver
94
95 - st/stm32_hash: Add HASH driver
96
97 - ti/uart: Add an AArch32 variant
98
99- Library at ROM (romlib)
100 - Introduce BTI support in Library at ROM (romlib)
101
102- New Platforms Support
103 - amlogic: g12a: New platform support added for the S905X2 (G12A) platform
104 - amlogic: meson/gxl: New platform support added for Amlogic Meson
105 S905x (GXL)
106
107 - arm/a5ds: New platform support added for A5 DesignStart
108
109 - arm/corstone: New platform support added for Corstone-700
110
111 - intel: New platform support added for Agilex
112
113 - mediatek: New platform support added for MediaTek mt8183
114
115 - qemu/qemu_sbsa: New platform support added for QEMU SBSA platform
116
117 - renesas/rcar_gen3: plat: New platform support added for D3
118
119 - rockchip: New platform support added for px30
120 - rockchip: New platform support added for rk3288
121
122 - rpi: New platform support added for Raspberry Pi 4
123
124- Platforms
125 - arm/common: Introduce wrapper functions to setup secure watchdog
126
127 - arm/fvp: Add Delay Timer driver to BL1 and BL31 and option for defining
128 platform DRAM2 base
129 - arm/fvp: Add Linux DTS files for 32 bit threaded FVPs
130
131 - arm/n1sdp: Add code for DDR ECC enablement and BL33 copy to DDR, Initialise CNTFRQ
132 in Non Secure CNTBaseN
133
134 - arm/juno: Use shared mbedtls heap between BL1 and BL2 and add basic support for
135 dynamic config
136
137 - imx: Basic support for PicoPi iMX7D, rdc module init, caam module init,
138 aipstz init, IMX_SIP_GET_SOC_INFO, IMX_SIP_BUILDINFO added
139
140 - intel: Add ncore ccu driver
141
142 - mediatek/mt81*: Use new bl31_params_parse() helper
143
144 - nvidia: tegra: Add support for multi console interface
145
146 - qemu/qemu_sbsa: Adding memory mapping for both FLASH0/FLASH1
147 - qemu: Added gicv3 support, new console interface in AArch32, and sub-platforms
148
149 - renesas/rcar_gen3: plat: Add R-Car V3M support, new board revision for H3ULCB, DBSC4
150 setting before self-refresh mode
151
152 - socionext/uniphier: Support console based on multi-console
153
154 - st: stm32mp1: Add OP-TEE, Avenger96, watchdog, LpDDR3, authentication support
155 and general SYSCFG management
156
157 - ti/k3: common: Add support for J721E, Use coherent memory for shared data, Trap all
158 asynchronous bus errors to EL3
159
160 - xilinx/zynqmp: Add support for multi console interface, Initialize IPI table from
161 zynqmp_config_setup()
162
163- PSCI
164 - Adding new optional PSCI hook ``pwr_domain_on_finish_late``
165 - This PSCI hook ``pwr_domain_on_finish_late`` is similar to
166 ``pwr_domain_on_finish`` but is guaranteed to be invoked when the
167 respective core and cluster are participating in coherency.
168
169- Security
170 - Speculative Store Bypass Safe (SSBS): Further enhance protection against Spectre
171 variant 4 by disabling speculative loads/stores (SPSR.SSBS bit) by default.
172
173 - UBSAN support and handlers
174 - Adds support for the Undefined Behaviour sanitizer. There are two types of
175 support offered - minimalistic trapping support which essentially immediately
176 crashes on undefined behaviour and full support with full debug messages.
177
178- Tools
179 - cert_create: Add support for bigger RSA key sizes (3KB and 4KB),
180 previously the maximum size was 2KB.
181
182 - fiptool: Add support to build fiptool on Windows.
183
184
185Changed
186^^^^^^^
187
188- Architecture
189 - Refactor ARMv8.3 Pointer Authentication support code
190
191 - backtrace: Strip PAC field when PAUTH is enabled
192
193 - Prettify crash reporting output on AArch64.
194
195 - Rework smc_unknown return code path in smc_handler
196 - Leverage the existing ``el3_exit()`` return routine for smc_unknown return
197 path rather than a custom set of instructions.
198
199- BL-Specific
200 - Invalidate dcache build option for BL2 entry at EL3
201
202 - Add missing support for BL2_AT_EL3 in XIP memory
203
204- Boot Flow
205 - Add helper to parse BL31 parameters (both versions)
206
207 - Factor out cross-BL API into export headers suitable for 3rd party code
208
209 - Introduce lightweight BL platform parameter library
210
211- Drivers
212 - auth: Memory optimization for Chain of Trust (CoT) description
213
214 - bsec: Move bsec_mode_is_closed_device() service to platform
215
216 - cryptocell: Move Cryptocell specific API into driver
217
218 - gicv3: Prevent pending G1S interrupt from becoming G0 interrupt
219
220 - mbedtls: Remove weak heap implementation
221
222 - mmc: Increase delay between ACMD41 retries
223 - mmc: stm32_sdmmc2: Correctly manage block size
224 - mmc: stm32_sdmmc2: Manage max-frequency property from DT
225
226 - synopsys/emmc: Do not change FIFO TH as this breaks some platforms
227 - synopsys: Update synopsys drivers to not rely on undefined overflow behaviour
228
229 - ufs: Extend the delay after reset to wait for some slower chips
230
231- Platforms
232 - amlogic/meson/gxl: Remove BL2 dependency from BL31
233
234 - arm/common: Shorten the Firmware Update (FWU) process
235
236 - arm/fvp: Remove GIC initialisation from secondary core cold boot
237
238 - arm/sgm: Temporarily disable shared Mbed TLS heap for SGM
239
240 - hisilicon: Update hisilicon drivers to not rely on undefined overflow behaviour
241
242 - imx: imx8: Replace PLAT_IMX8* with PLAT_imx8*, remove duplicated linker symbols and
243 deprecated code include, keep only IRQ 32 unmasked, enable all power domain by default
244
245 - marvell: Prevent SError accessing PCIe link, Switch to xlat_tables_v2, do not rely on
246 argument passed via smc, make sure that comphy init will use correct address
247
248 - mediatek: mt8173: Refactor RTC and PMIC drivers
249 - mediatek: mt8173: Apply MULTI_CONSOLE framework
250
251 - nvidia: Tegra: memctrl_v2: fix "overflow before widen" coverity issue
252
253 - qemu: Simplify the image size calculation, Move and generalise FDT PSCI fixup, move
254 gicv2 codes to separate file
255
256 - renesas/rcar_gen3: Convert to multi-console API, update QoS setting, Update IPL and
257 Secure Monitor Rev2.0.4, Change to restore timer counter value at resume, Update DDR
258 setting rev.0.35, qos: change subslot cycle, Change periodic write DQ training option.
259
260 - rockchip: Allow SOCs with undefined wfe check bits, Streamline and complete UARTn_BASE
261 macros, drop rockchip-specific imported linker symbols for bl31, Disable binary generation
262 for all SOCs, Allow console device to be set by DTB, Use new bl31_params_parse functions
263
264 - rpi/rpi3: Move shared rpi3 files into common directory
265
266 - socionext/uniphier: Set CONSOLE_FLAG_TRANSLATE_CRLF and clean up console driver
267 - socionext/uniphier: Replace DIV_ROUND_UP() with div_round_up() from utils_def.h
268
269 - st/stm32mp: Split stm32mp_io_setup function, move stm32_get_gpio_bank_clock() to private
270 file, correctly handle Clock Spreading Generator, move oscillator functions to generic file,
271 realign device tree files with internal devs, enable RTCAPB clock for dual-core chips, use a
272 common function to check spinlock is available, move check_header() to common code
273
274 - ti/k3: Enable SEPARATE_CODE_AND_RODATA by default, Remove shared RAM space,
275 Drop _ADDRESS from K3_USART_BASE to match other defines, Remove MSMC port
276 definitions, Allow USE_COHERENT_MEM for K3, Set L2 latency on A72 cores
277
278- PSCI
279 - PSCI: Lookup list of parent nodes to lock only once
280
281- Secure Partition Manager (SPM): SPCI Prototype
282 - Fix service UUID lookup
283
284 - Adjust size of virtual address space per partition
285
286 - Refactor xlat context creation
287
288 - Move shim layer to TTBR1_EL1
289
290 - Ignore empty regions in resource description
291
292- Security
293 - Refactor SPSR initialisation code
294
295 - SMMUv3: Abort DMA transactions
296 - For security DMA should be blocked at the SMMU by default unless explicitly
297 enabled for a device. SMMU is disabled after reset with all streams bypassing
298 the SMMU, and abortion of all incoming transactions implements a default deny
299 policy on reset.
300 - Moves ``bl1_platform_setup()`` function from arm_bl1_setup.c to FVP platforms'
301 fvp_bl1_setup.c and fvp_ve_bl1_setup.c files.
302
303- Tools
304 - cert_create: Remove RSA PKCS#1 v1.5 support
305
306
307Resolved Issues
308^^^^^^^^^^^^^^^
309
310- Architecture
311 - Fix the CAS spinlock implementation by adding a missing DSB in ``spin_unlock()``
312
313 - AArch64: Fix SCTLR bit definitions
314 - Removes incorrect ``SCTLR_V_BIT`` definition and adds definitions for
315 ARMv8.3-Pauth `EnIB`, `EnDA` and `EnDB` bits.
316
317 - Fix restoration of PAuth context
318 - Replace call to ``pauth_context_save()`` with ``pauth_context_restore()`` in
319 case of unknown SMC call.
320
321- BL-Specific Issues
322 - Fix BL31 crash reporting on AArch64 only platforms
323
324- Build System
325 - Remove several warnings reported with W=2 and W=1
326
327- Code Quality Issues
328 - SCTLR and ACTLR are 32-bit for AArch32 and 64-bit for AArch64
329 - Unify type of "cpu_idx" across PSCI module.
330 - Assert if power level value greater then PSCI_INVALID_PWR_LVL
331 - Unsigned long should not be used as per coding guidelines
332 - Reduce the number of memory leaks in cert_create
333 - Fix type of cot_desc_ptr
334 - Use explicit-width data types in AAPCS parameter structs
335 - Add python configuration for editorconfig
336 - BL1: Fix type consistency
337
338 - Enable -Wshift-overflow=2 to check for undefined shift behavior
339 - Updated upstream platforms to not rely on undefined overflow behaviour
340
341- Coverity Quality Issues
342 - Remove GGC ignore -Warray-bounds
343 - Fix Coverity #261967, Infinite loop
344 - Fix Coverity #343017, Missing unlock
345 - Fix Coverity #343008, Side affect in assertion
346 - Fix Coverity #342970, Uninitialized scalar variable
347
348- CPU Support
349 - cortex-a12: Fix MIDR mask
350
351- Drivers
352 - console: Remove Arm console unregister on suspend
353
354 - gicv3: Fix support for full SPI range
355
356 - scmi: Fix wrong payload length
357
358- Library Code
359 - libc: Fix sparse warning for __assert()
360
361 - libc: Fix memchr implementation
362
363- Platforms
364 - rpi: rpi3: Fix compilation error when stack protector is enabled
365
366 - socionext/uniphier: Fix compilation fail for SPM support build config
367
368 - st/stm32mp1: Fix TZC400 configuration against non-secure DDR
369
370 - ti/k3: common: Fix RO data area size calculation
371
372- Security
373 - AArch32: Disable Secure Cycle Counter
374 - Changes the implementation for disabling Secure Cycle Counter.
375 For ARMv8.5 the counter gets disabled by setting ``SDCR.SCCD`` bit on
376 CPU cold/warm boot. For the earlier architectures PMCR register is
377 saved/restored on secure world entry/exit from/to Non-secure state,
378 and cycle counting gets disabled by setting PMCR.DP bit.
379 - AArch64: Disable Secure Cycle Counter
380 - For ARMv8.5 the counter gets disabled by setting ``MDCR_El3.SCCD`` bit on
381 CPU cold/warm boot. For the earlier architectures PMCR_EL0 register is
382 saved/restored on secure world entry/exit from/to Non-secure state,
383 and cycle counting gets disabled by setting PMCR_EL0.DP bit.
384
385Deprecations
386^^^^^^^^^^^^
387
388- Common Code
389 - Remove MULTI_CONSOLE_API flag and references to it
390
391 - Remove deprecated `plat_crash_console_*`
392
393 - Remove deprecated interfaces `get_afflvl_shift`, `mpidr_mask_lower_afflvls`, `eret`
394
395 - AARCH32/AARCH64 macros are now deprecated in favor of ``__aarch64__``
396
397 - ``__ASSEMBLY__`` macro is now deprecated in favor of ``__ASSEMBLER__``
398
399- Drivers
400 - console: Removed legacy console API
401 - console: Remove deprecated finish_console_register
402
403 - tzc: Remove deprecated types `tzc_action_t` and `tzc_region_attributes_t`
404
405- Secure Partition Manager (SPM):
406 - Prototype SPCI-based SPM (services/std_svc/spm) will be replaced with alternative
407 methods of secure partitioning support.
408
409Known Issues
410^^^^^^^^^^^^
411
412- Build System Issues
413 - dtb: DTB creation not supported when building on a Windows host.
414
415 This step in the build process is skipped when running on a Windows host. A
416 known issue from the 1.6 release.
417
418- Platform Issues
419 - arm/juno: System suspend from Linux does not function as documented in the
420 user guide
421
422 Following the instructions provided in the user guide document does not
423 result in the platform entering system suspend state as expected. A message
424 relating to the hdlcd driver failing to suspend will be emitted on the
425 Linux terminal.
426
427 - mediatek/mt6795: This platform does not build in this release
428
Paul Beesley32379552019-02-11 17:58:21 +0000429Version 2.1
430-----------
Paul Beesleybbf48042019-03-25 12:21:57 +0000431
432New Features
Paul Beesley32379552019-02-11 17:58:21 +0000433^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000434
435- Architecture
436 - Support for ARMv8.3 pointer authentication in the normal and secure worlds
437
438 The use of pointer authentication in the normal world is enabled whenever
439 architectural support is available, without the need for additional build
440 flags.
441
442 Use of pointer authentication in the secure world remains an
443 experimental configuration at this time. Using both the ``ENABLE_PAUTH``
444 and ``CTX_INCLUDE_PAUTH_REGS`` build flags, pointer authentication can be
445 enabled in EL3 and S-EL1/0.
446
Paul Beesleyf8640672019-04-12 14:19:42 +0100447 See the :ref:`Firmware Design` document for additional details on the use
448 of pointer authentication.
Paul Beesleybbf48042019-03-25 12:21:57 +0000449
450 - Enable Data Independent Timing (DIT) in EL3, where supported
451
452- Build System
453 - Support for BL-specific build flags
454
455 - Support setting compiler target architecture based on ``ARM_ARCH_MINOR``
456 build option.
457
458 - New ``RECLAIM_INIT_CODE`` build flag:
459
460 A significant amount of the code used for the initialization of BL31 is
461 not needed again after boot time. In order to reduce the runtime memory
462 footprint, the memory used for this code can be reclaimed after
463 initialization.
464
465 Certain boot-time functions were marked with the ``__init`` attribute to
466 enable this reclamation.
467
468- CPU Support
469 - cortex-a76: Workaround for erratum 1073348
470 - cortex-a76: Workaround for erratum 1220197
471 - cortex-a76: Workaround for erratum 1130799
472
473 - cortex-a75: Workaround for erratum 790748
474 - cortex-a75: Workaround for erratum 764081
475
476 - cortex-a73: Workaround for erratum 852427
477 - cortex-a73: Workaround for erratum 855423
478
479 - cortex-a57: Workaround for erratum 817169
480 - cortex-a57: Workaround for erratum 814670
481
482 - cortex-a55: Workaround for erratum 903758
483 - cortex-a55: Workaround for erratum 846532
484 - cortex-a55: Workaround for erratum 798797
485 - cortex-a55: Workaround for erratum 778703
486 - cortex-a55: Workaround for erratum 768277
487
488 - cortex-a53: Workaround for erratum 819472
489 - cortex-a53: Workaround for erratum 824069
490 - cortex-a53: Workaround for erratum 827319
491
492 - cortex-a17: Workaround for erratum 852423
493 - cortex-a17: Workaround for erratum 852421
494
495 - cortex-a15: Workaround for erratum 816470
496 - cortex-a15: Workaround for erratum 827671
497
498- Documentation
499 - Exception Handling Framework documentation
500
501 - Library at ROM (romlib) documentation
502
503 - RAS framework documentation
504
505 - Coding Guidelines document
506
507- Drivers
508 - ccn: Add API for setting and reading node registers
509 - Adds ``ccn_read_node_reg`` function
510 - Adds ``ccn_write_node_reg`` function
511
512 - partition: Support MBR partition entries
513
514 - scmi: Add ``plat_css_get_scmi_info`` function
515
516 Adds a new API ``plat_css_get_scmi_info`` which lets the platform
517 register a platform-specific instance of ``scmi_channel_plat_info_t`` and
518 remove the default values
519
Paul Beesleybd1c4162019-03-29 10:14:56 +0000520 - tzc380: Add TZC-380 TrustZone Controller driver
Paul Beesleybbf48042019-03-25 12:21:57 +0000521
522 - tzc-dmc620: Add driver to manage the TrustZone Controller within the
523 DMC-620 Dynamic Memory Controller
524
525- Library at ROM (romlib)
526 - Add platform-specific jump table list
527
528 - Allow patching of romlib functions
529
530 This change allows patching of functions in the romlib. This can be done by
531 adding "patch" at the end of the jump table entry for the function that
532 needs to be patched in the file jmptbl.i.
533
534- Library Code
535 - Support non-LPAE-enabled MMU tables in AArch32
536
537 - mmio: Add ``mmio_clrsetbits_16`` function
538 - 16-bit variant of ``mmio_clrsetbits``
539
540 - object_pool: Add Object Pool Allocator
541 - Manages object allocation using a fixed-size static array
542 - Adds ``pool_alloc`` and ``pool_alloc_n`` functions
543 - Does not provide any functions to free allocated objects (by design)
544
545 - libc: Added ``strlcpy`` function
546
547 - libc: Import ``strrchr`` function from FreeBSD
548
549 - xlat_tables: Add support for ARMv8.4-TTST
550
551 - xlat_tables: Support mapping regions without an explicitly specified VA
552
553- Math
554 - Added softudiv macro to support software division
555
556- Memory Partitioning And Monitoring (MPAM)
557 - Enabled MPAM EL2 traps (``MPAMHCR_EL2`` and ``MPAM_EL2``)
558
559- Platforms
560 - amlogic: Add support for Meson S905 (GXBB)
561
562 - arm/fvp_ve: Add support for FVP Versatile Express platform
563
564 - arm/n1sdp: Add support for Neoverse N1 System Development platform
565
566 - arm/rde1edge: Add support for Neoverse E1 platform
567
568 - arm/rdn1edge: Add support for Neoverse N1 platform
569
570 - arm: Add support for booting directly to Linux without an intermediate
571 loader (AArch32)
572
573 - arm/juno: Enable new CPU errata workarounds for A53 and A57
574
575 - arm/juno: Add romlib support
576
577 Building a combined BL1 and ROMLIB binary file with the correct page
578 alignment is now supported on the Juno platform. When ``USE_ROMLIB`` is set
579 for Juno, it generates the combined file ``bl1_romlib.bin`` which needs to
580 be used instead of bl1.bin.
581
582 - intel/stratix: Add support for Intel Stratix 10 SoC FPGA platform
583
584 - marvell: Add support for Armada-37xx SoC platform
585
586 - nxp: Add support for i.MX8M and i.MX7 Warp7 platforms
587
588 - renesas: Add support for R-Car Gen3 platform
589
590 - xilinx: Add support for Versal ACAP platforms
591
592- Position-Independent Executable (PIE)
593
594 PIE support has initially been added to BL31. The ``ENABLE_PIE`` build flag is
595 used to enable or disable this functionality as required.
596
597- Secure Partition Manager
Paul Beesleybd1c4162019-03-29 10:14:56 +0000598 - New SPM implementation based on SPCI Alpha 1 draft specification
Paul Beesleybbf48042019-03-25 12:21:57 +0000599
Paul Beesleybd1c4162019-03-29 10:14:56 +0000600 A new version of SPM has been implemented, based on the SPCI (Secure
601 Partition Client Interface) and SPRT (Secure Partition Runtime) draft
602 specifications.
Paul Beesleybbf48042019-03-25 12:21:57 +0000603
604 The new implementation is a prototype that is expected to undergo intensive
605 rework as the specifications change. It has basic support for multiple
606 Secure Partitions and Resource Descriptions.
607
Paul Beesleybd1c4162019-03-29 10:14:56 +0000608 The older version of SPM, based on MM (ARM Management Mode Interface
Paul Beesleybbf48042019-03-25 12:21:57 +0000609 Specification), is still present in the codebase. A new build flag,
610 ``SPM_MM`` has been added to allow selection of the desired implementation.
611 This flag defaults to 1, selecting the MM-based implementation.
612
613- Security
614 - Spectre Variant-1 mitigations (``CVE-2017-5753``)
615
616 - Use Speculation Store Bypass Safe (SSBS) functionality where available
617
618 Provides mitigation against ``CVE-2018-19440`` (Not saving x0 to x3
619 registers can leak information from one Normal World SMC client to another)
620
621
622Changed
Paul Beesley32379552019-02-11 17:58:21 +0000623^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000624
625- Build System
626 - Warning levels are now selectable with ``W=<1,2,3>``
627
628 - Removed unneeded include paths in PLAT_INCLUDES
629
630 - "Warnings as errors" (Werror) can be disabled using ``E=0``
631
632 - Support totally quiet output with ``-s`` flag
633
634 - Support passing options to checkpatch using ``CHECKPATCH_OPTS=<opts>``
635
636 - Invoke host compiler with ``HOSTCC / HOSTCCFLAGS`` instead of ``CC / CFLAGS``
637
638 - Make device tree pre-processing similar to U-boot/Linux by:
639 - Creating separate ``CPPFLAGS`` for DT preprocessing so that compiler
640 options specific to it can be accommodated.
641 - Replacing ``CPP`` with ``PP`` for DT pre-processing
642
643- CPU Support
644 - Errata report function definition is now mandatory for CPU support files
645
646 CPU operation files must now define a ``<name>_errata_report`` function to
647 print errata status. This is no longer a weak reference.
648
649- Documentation
650 - Migrated some content from GitHub wiki to ``docs/`` directory
651
652 - Security advisories now have CVE links
653
654 - Updated copyright guidelines
655
Paul Beesleybbf48042019-03-25 12:21:57 +0000656- Drivers
657 - console: The ``MULTI_CONSOLE_API`` framework has been rewritten in C
Paul Beesleybd1c4162019-03-29 10:14:56 +0000658
Paul Beesleybbf48042019-03-25 12:21:57 +0000659 - console: Ported multi-console driver to AArch32
660
661 - gic: Remove 'lowest priority' constants
662
663 Removed ``GIC_LOWEST_SEC_PRIORITY`` and ``GIC_LOWEST_NS_PRIORITY``.
664 Platforms should define these if required, or instead determine the correct
665 priority values at runtime.
666
667 - delay_timer: Check that the Generic Timer extension is present
668
669 - mmc: Increase command reply timeout to 10 milliseconds
670
671 - mmc: Poll eMMC device status to ensure ``EXT_CSD`` command completion
672
673 - mmc: Correctly check return code from ``mmc_fill_device_info``
674
675- External Libraries
676
677 - libfdt: Upgraded from 1.4.2 to 1.4.6-9
678
679 - mbed TLS: Upgraded from 2.12 to 2.16
680
681 This change incorporates fixes for security issues that should be reviewed
682 to determine if they are relevant for software implementations using
683 Trusted Firmware-A. See the `mbed TLS releases`_ page for details on
684 changes from the 2.12 to the 2.16 release.
685
686- Library Code
687 - compiler-rt: Updated ``lshrdi3.c`` and ``int_lib.h`` with changes from
688 LLVM master branch (r345645)
689
690 - cpu: Updated macro that checks need for ``CVE-2017-5715`` mitigation
691
692 - libc: Made setjmp and longjmp C standard compliant
693
694 - libc: Allowed overriding the default libc (use ``OVERRIDE_LIBC``)
695
696 - libc: Moved setjmp and longjmp to the ``libc/`` directory
697
698- Platforms
699 - Removed Mbed TLS dependency from plat_bl_common.c
700
701 - arm: Removed unused ``ARM_MAP_BL_ROMLIB`` macro
702
703 - arm: Removed ``ARM_BOARD_OPTIMISE_MEM`` feature and build flag
704
705 - arm: Moved several components into ``drivers/`` directory
706
707 This affects the SDS, SCP, SCPI, MHU and SCMI components
708
709 - arm/juno: Increased maximum BL2 image size to ``0xF000``
710
711 This change was required to accommodate a larger ``libfdt`` library
712
713- SCMI
714 - Optimized bakery locks when hardware-assisted coherency is enabled using the
715 ``HW_ASSISTED_COHERENCY`` build flag
716
717- SDEI
718 - Added support for unconditionally resuming secure world execution after
Paul Beesley606d8072019-03-13 13:58:02 +0000719 |SDEI| event processing completes
Paul Beesleybbf48042019-03-25 12:21:57 +0000720
Paul Beesley606d8072019-03-13 13:58:02 +0000721 |SDEI| interrupts, although targeting EL3, occur on behalf of the non-secure
Paul Beesleybbf48042019-03-25 12:21:57 +0000722 world, and may have higher priority than secure world
723 interrupts. Therefore they might preempt secure execution and yield
Paul Beesley606d8072019-03-13 13:58:02 +0000724 execution to the non-secure |SDEI| handler. Upon completion of |SDEI| event
Paul Beesleybbf48042019-03-25 12:21:57 +0000725 handling, resume secure execution if it was preempted.
726
727- Translation Tables (XLAT)
728 - Dynamically detect need for ``Common not Private (TTBRn_ELx.CnP)`` bit
729
730 Properly handle the case where ``ARMv8.2-TTCNP`` is implemented in a CPU
731 that does not implement all mandatory v8.2 features (and so must claim to
732 implement a lower architecture version).
733
734
735Resolved Issues
Paul Beesley32379552019-02-11 17:58:21 +0000736^^^^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000737
738- Architecture
739 - Incorrect check for SSBS feature detection
740
741 - Unintentional register clobber in AArch32 reset_handler function
742
743- Build System
744 - Dependency issue during DTB image build
745
746 - Incorrect variable expansion in Arm platform makefiles
747
748 - Building on Windows with verbose mode (``V=1``) enabled is broken
749
750 - AArch32 compilation flags is missing ``$(march32-directive)``
751
752- BL-Specific Issues
753 - bl2: ``uintptr_t is not defined`` error when ``BL2_IN_XIP_MEM`` is defined
754
755 - bl2: Missing prototype warning in ``bl2_arch_setup``
756
757 - bl31: Omission of Global Offset Table (GOT) section
758
759- Code Quality Issues
760 - Multiple MISRA compliance issues
761
762 - Potential NULL pointer dereference (Coverity-detected)
763
764- Drivers
765 - mmc: Local declaration of ``scr`` variable causes a cache issue when
766 invalidating after the read DMA transfer completes
767
768 - mmc: ``ACMD41`` does not send voltage information during initialization,
769 resulting in the command being treated as a query. This prevents the
770 command from initializing the controller.
771
772 - mmc: When checking device state using ``mmc_device_state()`` there are no
773 retries attempted in the event of an error
774
775 - ccn: Incorrect Region ID calculation for RN-I nodes
776
777 - console: ``Fix MULTI_CONSOLE_API`` when used as a crash console
778
779 - partition: Improper NULL checking in gpt.c
780
781 - partition: Compilation failure in ``VERBOSE`` mode (``V=1``)
782
783- Library Code
784 - common: Incorrect check for Address Authentication support
785
786 - xlat: Fix XLAT_V1 / XLAT_V2 incompatibility
787
788 The file ``arm_xlat_tables.h`` has been renamed to ``xlat_tables_compat.h``
789 and has been moved to a common folder. This header can be used to guarantee
790 compatibility, as it includes the correct header based on
791 ``XLAT_TABLES_LIB_V2``.
792
793 - xlat: armclang unused-function warning on ``xlat_clean_dcache_range``
794
795 - xlat: Invalid ``mm_cursor`` checks in ``mmap_add`` and ``mmap_add_ctx``
796
797 - sdei: Missing ``context.h`` header
798
799- Platforms
800 - common: Missing prototype warning for ``plat_log_get_prefix``
801
802 - arm: Insufficient maximum BL33 image size
803
804 - arm: Potential memory corruption during BL2-BL31 transition
805
806 On Arm platforms, the BL2 memory can be overlaid by BL31/BL32. The memory
807 descriptors describing the list of executable images are created in BL2
808 R/W memory, which could be possibly corrupted later on by BL31/BL32 due
809 to overlay. This patch creates a reserved location in SRAM for these
810 descriptors and are copied over by BL2 before handing over to next BL
811 image.
812
813 - juno: Invalid behaviour when ``CSS_USE_SCMI_SDS_DRIVER`` is not set
814
815 In ``juno_pm.c`` the ``css_scmi_override_pm_ops`` function was used
816 regardless of whether the build flag was set. The original behaviour has
817 been restored in the case where the build flag is not set.
818
819- Tools
820 - fiptool: Incorrect UUID parsing of blob parameters
821
822 - doimage: Incorrect object rules in Makefile
823
824
825Deprecations
Paul Beesley32379552019-02-11 17:58:21 +0000826^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000827
828- Common Code
829 - ``plat_crash_console_init`` function
830
831 - ``plat_crash_console_putc`` function
832
833 - ``plat_crash_console_flush`` function
834
835 - ``finish_console_register`` macro
836
837- AArch64-specific Code
838 - helpers: ``get_afflvl_shift``
839
840 - helpers: ``mpidr_mask_lower_afflvls``
841
842 - helpers: ``eret``
843
844- Secure Partition Manager (SPM)
845 - Boot-info structure
846
847
848Known Issues
Paul Beesley32379552019-02-11 17:58:21 +0000849^^^^^^^^^^^^
Paul Beesleybbf48042019-03-25 12:21:57 +0000850
851- Build System Issues
852 - dtb: DTB creation not supported when building on a Windows host.
853
854 This step in the build process is skipped when running on a Windows host. A
855 known issue from the 1.6 release.
856
857- Platform Issues
858 - arm/juno: System suspend from Linux does not function as documented in the
859 user guide
860
861 Following the instructions provided in the user guide document does not
862 result in the platform entering system suspend state as expected. A message
863 relating to the hdlcd driver failing to suspend will be emitted on the
864 Linux terminal.
865
Soby Mathewb58f97a2019-03-28 13:46:40 +0000866 - arm/juno: The firmware update use-cases do not work with motherboard
867 firmware version < v1.5.0 (the reset reason is not preserved). The Linaro
868 18.04 release has MB v1.4.9. The MB v1.5.0 is available in Linaro 18.10
869 release.
870
Paul Beesleybbf48042019-03-25 12:21:57 +0000871 - mediatek/mt6795: This platform does not build in this release
872
Paul Beesley32379552019-02-11 17:58:21 +0000873Version 2.0
874-----------
Joanna Farleyadd34512018-09-28 08:38:17 +0100875
876New Features
Paul Beesley32379552019-02-11 17:58:21 +0000877^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +0100878
Paul Beesley1fbc97b2019-01-11 18:26:51 +0000879- Removal of a number of deprecated APIs
Joanna Farleyadd34512018-09-28 08:38:17 +0100880
881 - A new Platform Compatibility Policy document has been created which
882 references a wiki page that maintains a listing of deprecated
883 interfaces and the release after which they will be removed.
884
885 - All deprecated interfaces except the MULTI_CONSOLE_API have been removed
886 from the code base.
887
888 - Various Arm and partner platforms have been updated to remove the use of
Paul Beesley1fbc97b2019-01-11 18:26:51 +0000889 removed APIs in this release.
Joanna Farleyadd34512018-09-28 08:38:17 +0100890
891 - This release is otherwise unchanged from 1.6 release
892
893Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +0000894^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +0100895
896- No issues known at 1.6 release resolved in 2.0 release
897
898Known Issues
Paul Beesley32379552019-02-11 17:58:21 +0000899^^^^^^^^^^^^
Joanna Farleyadd34512018-09-28 08:38:17 +0100900
901- DTB creation not supported when building on a Windows host. This step in the
902 build process is skipped when running on a Windows host. Known issue from
903 1.6 version.
904
905- As a result of removal of deprecated interfaces the Nvidia Tegra, Marvell
906 Armada 8K and MediaTek MT6795 platforms do not build in this release.
907 Also MediaTek MT8173, NXP QorIQ LS1043A, NXP i.MX8QX, NXP i.MX8QMa,
908 Rockchip RK3328, Rockchip RK3368 and Rockchip RK3399 platforms have not been
909 confirmed to be working after the removal of the deprecated interfaces
910 although they do build.
911
Paul Beesley32379552019-02-11 17:58:21 +0000912Version 1.6
913-----------
Joanna Farley325ef902018-09-11 15:51:31 +0100914
915New Features
Paul Beesley32379552019-02-11 17:58:21 +0000916^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +0100917
Joanna Farleyadd34512018-09-28 08:38:17 +0100918- Addressing Speculation Security Vulnerabilities
Joanna Farley325ef902018-09-11 15:51:31 +0100919
920 - Implement static workaround for CVE-2018-3639 for AArch32 and AArch64
921
922 - Add support for dynamic mitigation for CVE-2018-3639
923
924 - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76
925
Paul Beesley606d8072019-03-13 13:58:02 +0000926 - Ensure |SDEI| handler executes with CVE-2018-3639 mitigation enabled
Joanna Farley325ef902018-09-11 15:51:31 +0100927
928- Introduce RAS handling on AArch64
929
John Tsichritzisf93256f2018-10-05 14:16:26 +0100930 - Some RAS extensions are mandatory for Armv8.2 CPUs, with others
931 mandatory for Armv8.4 CPUs however, all extensions are also optional
932 extensions to the base Armv8.0 architecture.
Joanna Farley325ef902018-09-11 15:51:31 +0100933
John Tsichritzisf93256f2018-10-05 14:16:26 +0100934 - The Armv8 RAS Extensions introduced Standard Error Records which are a
Joanna Farley325ef902018-09-11 15:51:31 +0100935 set of standard registers to configure RAS node policy and allow RAS
936 Nodes to record and expose error information for error handling agents.
937
938 - Capabilities are provided to support RAS Node enumeration and iteration
939 along with individual interrupt registrations and fault injections
940 support.
941
942 - Introduce handlers for Uncontainable errors, Double Faults and EL3
943 External Aborts
944
945- Enable Memory Partitioning And Monitoring (MPAM) for lower EL's
946
947 - Memory Partitioning And Monitoring is an Armv8.4 feature that enables
948 various memory system components and resources to define partitions.
949 Software running at various ELs can then assign themselves to the
950 desired partition to control their performance aspects.
951
952 - When ENABLE_MPAM_FOR_LOWER_ELS is set to 1, EL3 allows
953 lower ELs to access their own MPAM registers without trapping to EL3.
954 This patch however, doesn't make use of partitioning in EL3; platform
955 initialisation code should configure and use partitions in EL3 if
956 required.
957
958- Introduce ROM Lib Feature
959
960 - Support combining several libraries into a self-called "romlib" image,
961 that may be shared across images to reduce memory footprint. The romlib
962 image is stored in ROM but is accessed through a jump-table that may be
963 stored in read-write memory, allowing for the library code to be patched.
964
965- Introduce Backtrace Feature
966
967 - This function displays the backtrace, the current EL and security state
968 to allow a post-processing tool to choose the right binary to interpret
969 the dump.
970
971 - Print backtrace in assert() and panic() to the console.
972
973- Code hygiene changes and alignment with MISRA C-2012 guideline with fixes
974 addressing issues complying to the following rules:
975
976 - MISRA rules 4.9, 5.1, 5.3, 5.7, 8.2-8.5, 8.8, 8.13, 9.3, 10.1,
977 10.3-10.4, 10.8, 11.3, 11.6, 12.1, 14.4, 15.7, 16.1-16.7, 17.7-17.8,
978 20.7, 20.10, 20.12, 21.1, 21.15, 22.7
979
980 - Clean up the usage of void pointers to access symbols
981
982 - Increase usage of static qualifier to locally used functions and data
983
984 - Migrated to use of u_register_t for register read/write to better
985 match AArch32 and AArch64 type sizes
986
987 - Use int-ll64 for both AArch32 and AArch64 to assist in consistent
988 format strings between architectures
989
990 - Clean up TF-A libc by removing non arm copyrighted implementations
991 and replacing them with modified FreeBSD and SCC implementations
992
993- Various changes to support Clang linker and assembler
994
John Tsichritzisf93256f2018-10-05 14:16:26 +0100995 - The clang assembler/preprocessor is used when Clang is selected. However,
Joanna Farley325ef902018-09-11 15:51:31 +0100996 the clang linker is not used because it is unable to link TF-A objects
997 due to immaturity of clang linker functionality at this time.
998
Paul Beesley1fbc97b2019-01-11 18:26:51 +0000999- Refactor support APIs into Libraries
Joanna Farley325ef902018-09-11 15:51:31 +01001000
1001 - Evolve libfdt, mbed TLS library and standard C library sources as
1002 proper libraries that TF-A may be linked against.
1003
1004- CPU Enhancements
1005
1006 - Add CPU support for Cortex-Ares and Cortex-A76
1007
1008 - Add AMU support for Cortex-Ares
1009
1010 - Add initial CPU support for Cortex-Deimos
1011
1012 - Add initial CPU support for Cortex-Helios
1013
1014 - Implement dynamic mitigation for CVE-2018-3639 on Cortex-A76
1015
1016 - Implement Cortex-Ares erratum 1043202 workaround
1017
1018 - Implement DSU erratum 936184 workaround
1019
1020 - Check presence of fix for errata 843419 in Cortex-A53
1021
1022 - Check presence of fix for errata 835769 in Cortex-A53
1023
1024- Translation Tables Enhancements
1025
1026 - The xlat v2 library has been refactored in order to be reused by
1027 different TF components at different EL's including the addition of EL2.
1028 Some refactoring to make the code more generic and less specific to TF,
1029 in order to reuse the library outside of this project.
1030
1031- SPM Enhancements
1032
1033 - General cleanups and refactoring to pave the way to multiple partitions
1034 support
1035
1036- SDEI Enhancements
1037
1038 - Allow platforms to define explicit events
1039
1040 - Determine client EL from NS context's SCR_EL3
1041
1042 - Make dispatches synchronous
1043
1044 - Introduce jump primitives for BL31
1045
Paul Beesley606d8072019-03-13 13:58:02 +00001046 - Mask events after CPU wakeup in |SDEI| dispatcher to conform to the
Joanna Farley325ef902018-09-11 15:51:31 +01001047 specification
1048
1049- Misc TF-A Core Common Code Enhancements
1050
1051 - Add support for eXecute In Place (XIP) memory in BL2
1052
1053 - Add support for the SMC Calling Convention 2.0
1054
1055 - Introduce External Abort handling on AArch64
1056 External Abort routed to EL3 was reported as an unhandled exception
John Tsichritzis63801cd2019-07-05 14:22:12 +01001057 and caused a panic. This change enables Trusted Firmware-A to handle
1058 External Aborts routed to EL3.
Joanna Farley325ef902018-09-11 15:51:31 +01001059
1060 - Save value of ACTLR_EL1 implementation-defined register in the CPU
1061 context structure rather than forcing it to 0.
1062
1063 - Introduce ARM_LINUX_KERNEL_AS_BL33 build option, which allows BL31 to
1064 directly jump to a Linux kernel. This makes for a quicker and simpler
1065 boot flow, which might be useful in some test environments.
1066
1067 - Add dynamic configurations for BL31, BL32 and BL33 enabling support for
1068 Chain of Trust (COT).
1069
1070 - Make TF UUID RFC 4122 compliant
1071
1072- New Platform Support
1073
1074 - Arm SGI-575
1075
1076 - Arm SGM-775
1077
1078 - Allwinner sun50i_64
1079
1080 - Allwinner sun50i_h6
1081
John Tsichritzisf93256f2018-10-05 14:16:26 +01001082 - NXP QorIQ LS1043A
Joanna Farley325ef902018-09-11 15:51:31 +01001083
1084 - NXP i.MX8QX
1085
1086 - NXP i.MX8QM
1087
John Tsichritzisf93256f2018-10-05 14:16:26 +01001088 - NXP i.MX7Solo WaRP7
1089
Joanna Farley325ef902018-09-11 15:51:31 +01001090 - TI K3
1091
1092 - Socionext Synquacer SC2A11
1093
1094 - Marvell Armada 8K
1095
1096 - STMicroelectronics STM32MP1
1097
1098- Misc Generic Platform Common Code Enhancements
1099
1100 - Add MMC framework that supports both eMMC and SD card devices
1101
1102- Misc Arm Platform Common Code Enhancements
1103
1104 - Demonstrate PSCI MEM_PROTECT from el3_runtime
1105
1106 - Provide RAS support
1107
1108 - Migrate AArch64 port to the multi console driver. The old API is
1109 deprecated and will eventually be removed.
1110
1111 - Move BL31 below BL2 to enable BL2 overlay resulting in changes in the
1112 layout of BL images in memory to enable more efficient use of available
1113 space.
1114
1115 - Add cpp build processing for dtb that allows processing device tree
1116 with external includes.
1117
1118 - Extend FIP io driver to support multiple FIP devices
1119
1120 - Add support for SCMI AP core configuration protocol v1.0
1121
1122 - Use SCMI AP core protocol to set the warm boot entrypoint
1123
1124 - Add support to Mbed TLS drivers for shared heap among different
1125 BL images to help optimise memory usage
1126
1127 - Enable non-secure access to UART1 through a build option to support
1128 a serial debug port for debugger connection
1129
1130- Enhancements for Arm Juno Platform
1131
1132 - Add support for TrustZone Media Protection 1 (TZMP1)
1133
1134- Enhancements for Arm FVP Platform
1135
1136 - Dynamic_config: remove the FVP dtb files
1137
1138 - Set DYNAMIC_WORKAROUND_CVE_2018_3639=1 on FVP by default
1139
1140 - Set the ability to dynamically disable Trusted Boot Board
1141 authentication to be off by default with DYN_DISABLE_AUTH
1142
1143 - Add librom enhancement support in FVP
1144
1145 - Support shared Mbed TLS heap between BL1 and BL2 that allow a
1146 reduction in BL2 size for FVP
1147
1148- Enhancements for Arm SGI/SGM Platform
1149
1150 - Enable ARM_PLAT_MT flag for SGI-575
1151
1152 - Add dts files to enable support for dynamic config
1153
1154 - Add RAS support
1155
1156 - Support shared Mbed TLS heap for SGI and SGM between BL1 and BL2
1157
1158- Enhancements for Non Arm Platforms
1159
1160 - Raspberry Pi Platform
1161
1162 - Hikey Platforms
1163
1164 - Xilinx Platforms
1165
1166 - QEMU Platform
1167
1168 - Rockchip rk3399 Platform
1169
1170 - TI Platforms
1171
1172 - Socionext Platforms
1173
1174 - Allwinner Platforms
1175
1176 - NXP Platforms
1177
1178 - NVIDIA Tegra Platform
1179
1180 - Marvell Platforms
1181
1182 - STMicroelectronics STM32MP1 Platform
1183
1184Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001185^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +01001186
1187- No issues known at 1.5 release resolved in 1.6 release
1188
1189Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001190^^^^^^^^^^^^
Joanna Farley325ef902018-09-11 15:51:31 +01001191
1192- DTB creation not supported when building on a Windows host. This step in the
1193 build process is skipped when running on a Windows host. Known issue from
1194 1.5 version.
1195
Paul Beesley32379552019-02-11 17:58:21 +00001196Version 1.5
1197-----------
David Cunadob1580432018-03-14 17:57:31 +00001198
1199New features
Paul Beesley32379552019-02-11 17:58:21 +00001200^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00001201
1202- Added new firmware support to enable RAS (Reliability, Availability, and
1203 Serviceability) functionality.
1204
1205 - Secure Partition Manager (SPM): A Secure Partition is a software execution
1206 environment instantiated in S-EL0 that can be used to implement simple
1207 management and security services. The SPM is the firmware component that
1208 is responsible for managing a Secure Partition.
1209
Paul Beesley606d8072019-03-13 13:58:02 +00001210 - SDEI dispatcher: Support for interrupt-based |SDEI| events and all
1211 interfaces as defined by the |SDEI| specification v1.0, see
David Cunadob1580432018-03-14 17:57:31 +00001212 `SDEI Specification`_
1213
1214 - Exception Handling Framework (EHF): Framework that allows dispatching of
1215 EL3 interrupts to their registered handlers which are registered based on
1216 their priorities. Facilitates firmware-first error handling policy where
1217 asynchronous exceptions may be routed to EL3.
1218
1219 Integrated the TSPD with EHF.
1220
1221- Updated PSCI support:
1222
1223 - Implemented PSCI v1.1 optional features `MEM_PROTECT` and `SYSTEM_RESET2`.
1224 The supported PSCI version was updated to v1.1.
1225
1226 - Improved PSCI STAT timestamp collection, including moving accounting for
1227 retention states to be inside the locks and fixing handling of wrap-around
1228 when calculating residency in AArch32 execution state.
1229
1230 - Added optional handler for early suspend that executes when suspending to
1231 a power-down state and with data caches enabled.
1232
1233 This may provide a performance improvement on platforms where it is safe
1234 to perform some or all of the platform actions from `pwr_domain_suspend`
1235 with the data caches enabled.
1236
1237- Enabled build option, BL2_AT_EL3, for BL2 to allow execution at EL3 without
1238 any dependency on TF BL1.
1239
1240 This allows platforms which already have a non-TF Boot ROM to directly load
1241 and execute BL2 and subsequent BL stages without need for BL1. This was not
1242 previously possible because BL2 executes at S-EL1 and cannot jump straight to
1243 EL3.
1244
1245- Implemented support for SMCCC v1.1, including `SMCCC_VERSION` and
1246 `SMCCC_ARCH_FEATURES`.
1247
1248 Additionally, added support for `SMCCC_VERSION` in PSCI features to enable
1249 discovery of the SMCCC version via PSCI feature call.
1250
1251- Added Dynamic Configuration framework which enables each of the boot loader
1252 stages to be dynamically configured at runtime if required by the platform.
1253 The boot loader stage may optionally specify a firmware configuration file
1254 and/or hardware configuration file that can then be shared with the next boot
1255 loader stage.
1256
1257 Introduced a new BL handover interface that essentially allows passing of 4
1258 arguments between the different BL stages.
1259
1260 Updated cert_create and fip_tool to support the dynamic configuration files.
1261 The COT also updated to support these new files.
1262
1263- Code hygiene changes and alignment with MISRA guideline:
1264
1265 - Fix use of undefined macros.
1266
1267 - Achieved compliance with Mandatory MISRA coding rules.
1268
1269 - Achieved compliance for following Required MISRA rules for the default
1270 build configurations on FVP and Juno platforms : 7.3, 8.3, 8.4, 8.5 and
1271 8.8.
1272
1273- Added support for Armv8.2-A architectural features:
1274
1275 - Updated translation table set-up to set the CnP (Common not Private) bit
1276 for secure page tables so that multiple PEs in the same Inner Shareable
1277 domain can use the same translation table entries for a given stage of
1278 translation in a particular translation regime.
1279
1280 - Extended the supported values of ID_AA64MMFR0_EL1.PARange to include the
1281 52-bit Physical Address range.
1282
1283 - Added support for the Scalable Vector Extension to allow Normal world
1284 software to access SVE functionality but disable access to SVE, SIMD and
1285 floating point functionality from the Secure world in order to prevent
1286 corruption of the Z-registers.
1287
1288- Added support for Armv8.4-A architectural feature Activity Monitor Unit (AMU)
1289 extensions.
1290
1291 In addition to the v8.4 architectural extension, AMU support on Cortex-A75
1292 was implemented.
1293
1294- Enhanced OP-TEE support to enable use of pageable OP-TEE image. The Arm
1295 standard platforms are updated to load up to 3 images for OP-TEE; header,
1296 pager image and paged image.
1297
1298 The chain of trust is extended to support the additional images.
1299
1300- Enhancements to the translation table library:
1301
1302 - Introduced APIs to get and set the memory attributes of a region.
1303
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001304 - Added support to manage both privilege levels in translation regimes that
David Cunadob1580432018-03-14 17:57:31 +00001305 describe translations for 2 Exception levels, specifically the EL1&0
1306 translation regime, and extended the memory map region attributes to
1307 include specifying Non-privileged access.
1308
1309 - Added support to specify the granularity of the mappings of each region,
1310 for instance a 2MB region can be specified to be mapped with 4KB page
1311 tables instead of a 2MB block.
1312
1313 - Disabled the higher VA range to avoid unpredictable behaviour if there is
1314 an attempt to access addresses in the higher VA range.
1315
1316 - Added helpers for Device and Normal memory MAIR encodings that align with
1317 the Arm Architecture Reference Manual for Armv8-A (Arm DDI0487B.b).
1318
1319 - Code hygiene including fixing type length and signedness of constants,
1320 refactoring of function to enable the MMU, removing all instances where
1321 the virtual address space is hardcoded and added comments that document
1322 alignment needed between memory attributes and attributes specified in
1323 TCR_ELx.
1324
1325- Updated GIC support:
1326
1327 - Introduce new APIs for GICv2 and GICv3 that provide the capability to
1328 specify interrupt properties rather than list of interrupt numbers alone.
1329 The Arm platforms and other upstream platforms are migrated to use
1330 interrupt properties.
1331
1332 - Added helpers to save / restore the GICv3 context, specifically the
1333 Distributor and Redistributor contexts and architectural parts of the ITS
1334 power management. The Distributor and Redistributor helpers also support
1335 the implementation-defined part of GIC-500 and GIC-600.
1336
1337 Updated the Arm FVP platform to save / restore the GICv3 context on system
1338 suspend / resume as an example of how to use the helpers.
1339
1340 Introduced a new TZC secured DDR carve-out for use by Arm platforms for
1341 storing EL3 runtime data such as the GICv3 register context.
1342
1343- Added support for Armv7-A architecture via build option ARM_ARCH_MAJOR=7.
1344 This includes following features:
1345
1346 - Updates GICv2 driver to manage GICv1 with security extensions.
1347
1348 - Software implementation for 32bit division.
1349
1350 - Enabled use of generic timer for platforms that do not set
1351 ARM_CORTEX_Ax=yes.
1352
1353 - Support for Armv7-A Virtualization extensions [DDI0406C_C].
1354
1355 - Support for both Armv7-A platforms that only have 32-bit addressing and
1356 Armv7-A platforms that support large page addressing.
1357
1358 - Included support for following Armv7 CPUs: Cortex-A12, Cortex-A17,
1359 Cortex-A7, Cortex-A5, Cortex-A9, Cortex-A15.
1360
1361 - Added support in QEMU for Armv7-A/Cortex-A15.
1362
1363- Enhancements to Firmware Update feature:
1364
1365 - Updated the FWU documentation to describe the additional images needed for
1366 Firmware update, and how they are used for both the Juno platform and the
1367 Arm FVP platforms.
1368
1369- Enhancements to Trusted Board Boot feature:
1370
1371 - Added support to cert_create tool for RSA PKCS1# v1.5 and SHA384, SHA512
1372 and SHA256.
1373
1374 - For Arm platforms added support to use ECDSA keys.
1375
1376 - Enhanced the mbed TLS wrapper layer to include support for both RSA and
1377 ECDSA to enable runtime selection between RSA and ECDSA keys.
1378
1379- Added support for secure interrupt handling in AArch32 sp_min, hardcoded to
1380 only handle FIQs.
1381
1382- Added support to allow a platform to load images from multiple boot sources,
1383 for example from a second flash drive.
1384
1385- Added a logging framework that allows platforms to reduce the logging level
1386 at runtime and additionally the prefix string can be defined by the platform.
1387
1388- Further improvements to register initialisation:
1389
1390 - Control register PMCR_EL0 / PMCR is set to prohibit cycle counting in the
1391 secure world. This register is added to the list of registers that are
1392 saved and restored during world switch.
1393
1394 - When EL3 is running in AArch32 execution state, the Non-secure version of
1395 SCTLR is explicitly initialised during the warmboot flow rather than
1396 relying on the hardware to set the correct reset values.
1397
1398- Enhanced support for Arm platforms:
1399
1400 - Introduced driver for Shared-Data-Structure (SDS) framework which is used
1401 for communication between SCP and the AP CPU, replacing Boot-Over_MHU
1402 (BOM) protocol.
1403
1404 The Juno platform is migrated to use SDS with the SCMI support added in
1405 v1.3 and is set as default.
1406
1407 The driver can be found in the plat/arm/css/drivers folder.
1408
1409 - Improved memory usage by only mapping TSP memory region when the TSPD has
1410 been included in the build. This reduces the memory footprint and avoids
1411 unnecessary memory being mapped.
1412
1413 - Updated support for multi-threading CPUs for FVP platforms - always check
1414 the MT field in MPDIR and access the bit fields accordingly.
1415
1416 - Support building for platforms that model DynamIQ configuration by
1417 implementing all CPUs in a single cluster.
1418
1419 - Improved nor flash driver, for instance clearing status registers before
1420 sending commands. Driver can be found plat/arm/board/common folder.
1421
1422- Enhancements to QEMU platform:
1423
1424 - Added support for TBB.
1425
1426 - Added support for using OP-TEE pageable image.
1427
1428 - Added support for LOAD_IMAGE_V2.
1429
1430 - Migrated to use translation table library v2 by default.
1431
1432 - Added support for SEPARATE_CODE_AND_RODATA.
1433
1434- Applied workarounds CVE-2017-5715 on Arm Cortex-A57, -A72, -A73 and -A75, and
1435 for Armv7-A CPUs Cortex-A9, -A15 and -A17.
1436
1437- Applied errata workaround for Arm Cortex-A57: 859972.
1438
1439- Applied errata workaround for Arm Cortex-A72: 859971.
1440
1441- Added support for Poplar 96Board platform.
1442
1443- Added support for Raspberry Pi 3 platform.
1444
1445- Added Call Frame Information (CFI) assembler directives to the vector entries
1446 which enables debuggers to display the backtrace of functions that triggered
1447 a synchronous abort.
1448
1449- Added ability to build dtb.
1450
1451- Added support for pre-tool (cert_create and fiptool) image processing
1452 enabling compression of the image files before processing by cert_create and
1453 fiptool.
1454
1455 This can reduce fip size and may also speed up loading of images. The image
1456 verification will also get faster because certificates are generated based on
1457 compressed images.
1458
1459 Imported zlib 1.2.11 to implement gunzip() for data compression.
1460
1461- Enhancements to fiptool:
1462
1463 - Enabled the fiptool to be built using Visual Studio.
1464
1465 - Added padding bytes at the end of the last image in the fip to be
1466 facilitate transfer by DMA.
1467
1468Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001469^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00001470
1471- TF-A can be built with optimisations disabled (-O0).
1472
1473- Memory layout updated to enable Trusted Board Boot on Juno platform when
1474 running TF-A in AArch32 execution mode (resolving `tf-issue#501`_).
1475
1476Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001477^^^^^^^^^^^^
David Cunadob1580432018-03-14 17:57:31 +00001478
Joanna Farley325ef902018-09-11 15:51:31 +01001479- DTB creation not supported when building on a Windows host. This step in the
1480 build process is skipped when running on a Windows host.
David Cunadob1580432018-03-14 17:57:31 +00001481
Paul Beesley32379552019-02-11 17:58:21 +00001482Version 1.4
1483-----------
David Cunado1b796fa2017-07-03 18:59:07 +01001484
1485New features
Paul Beesley32379552019-02-11 17:58:21 +00001486^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01001487
1488- Enabled support for platforms with hardware assisted coherency.
1489
1490 A new build option HW_ASSISTED_COHERENCY allows platforms to take advantage
1491 of the following optimisations:
1492
1493 - Skip performing cache maintenance during power-up and power-down.
1494
1495 - Use spin-locks instead of bakery locks.
1496
1497 - Enable data caches early on warm-booted CPUs.
1498
1499- Added support for Cortex-A75 and Cortex-A55 processors.
1500
Dan Handley610e7e12018-03-01 18:44:00 +00001501 Both Cortex-A75 and Cortex-A55 processors use the Arm DynamIQ Shared Unit
David Cunado1b796fa2017-07-03 18:59:07 +01001502 (DSU). The power-down and power-up sequences are therefore mostly managed in
1503 hardware, reducing complexity of the software operations.
1504
Dan Handley610e7e12018-03-01 18:44:00 +00001505- Introduced Arm GIC-600 driver.
David Cunado1b796fa2017-07-03 18:59:07 +01001506
Dan Handley610e7e12018-03-01 18:44:00 +00001507 Arm GIC-600 IP complies with Arm GICv3 architecture. For FVP platforms, the
David Cunado1b796fa2017-07-03 18:59:07 +01001508 GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600.
1509
1510- Updated GICv3 support:
1511
1512 - Introduced power management APIs for GICv3 Redistributor. These APIs
1513 allow platforms to power down the Redistributor during CPU power on/off.
1514 Requires the GICv3 implementations to have power management operations.
1515
1516 Implemented the power management APIs for FVP.
1517
1518 - GIC driver data is flushed by the primary CPU so that secondary CPU do
1519 not read stale GIC data.
1520
Dan Handley610e7e12018-03-01 18:44:00 +00001521- Added support for Arm System Control and Management Interface v1.0 (SCMI).
David Cunado1b796fa2017-07-03 18:59:07 +01001522
1523 The SCMI driver implements the power domain management and system power
Dan Handley610e7e12018-03-01 18:44:00 +00001524 management protocol of the SCMI specification (Arm DEN 0056ASCMI) for
David Cunado1b796fa2017-07-03 18:59:07 +01001525 communicating with any compliant power controller.
1526
1527 Support is added for the Juno platform. The driver can be found in the
1528 plat/arm/css/drivers folder.
1529
Dan Handley610e7e12018-03-01 18:44:00 +00001530- Added support to enable pre-integration of TBB with the Arm TrustZone
David Cunado1b796fa2017-07-03 18:59:07 +01001531 CryptoCell product, to take advantage of its hardware Root of Trust and
1532 crypto acceleration services.
1533
1534- Enabled Statistical Profiling Extensions for lower ELs.
1535
1536 The firmware support is limited to the use of SPE in the Non-secure state
1537 and accesses to the SPE specific registers from S-EL1 will trap to EL3.
1538
1539 The SPE are architecturally specified for AArch64 only.
1540
1541- Code hygiene changes aligned with MISRA guidelines:
1542
1543 - Fixed signed / unsigned comparison warnings in the translation table
1544 library.
1545
1546 - Added U(_x) macro and together with the existing ULL(_x) macro fixed
1547 some of the signed-ness defects flagged by the MISRA scanner.
1548
1549- Enhancements to Firmware Update feature:
1550
1551 - The FWU logic now checks for overlapping images to prevent execution of
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001552 unauthenticated arbitrary code.
David Cunado1b796fa2017-07-03 18:59:07 +01001553
1554 - Introduced new FWU_SMC_IMAGE_RESET SMC that changes the image loading
1555 state machine to go from COPYING, COPIED or AUTHENTICATED states to
1556 RESET state. Previously, this was only possible when the authentication
1557 of an image failed or when the execution of the image finished.
1558
1559 - Fixed integer overflow which addressed TFV-1: Malformed Firmware Update
1560 SMC can result in copy of unexpectedly large data into secure memory.
1561
Dan Handley610e7e12018-03-01 18:44:00 +00001562- Introduced support for Arm Compiler 6 and LLVM (clang).
David Cunado1b796fa2017-07-03 18:59:07 +01001563
Dan Handley610e7e12018-03-01 18:44:00 +00001564 TF-A can now also be built with the Arm Compiler 6 or the clang compilers.
David Cunado1b796fa2017-07-03 18:59:07 +01001565 The assembler and linker must be provided by the GNU toolchain.
1566
Dan Handley610e7e12018-03-01 18:44:00 +00001567 Tested with Arm CC 6.7 and clang 3.9.x and 4.0.x.
David Cunado1b796fa2017-07-03 18:59:07 +01001568
1569- Memory footprint improvements:
1570
1571 - Introduced `tf_snprintf`, a reduced version of `snprintf` which has
1572 support for a limited set of formats.
1573
1574 The mbedtls driver is updated to optionally use `tf_snprintf` instead of
1575 `snprintf`.
1576
1577 - The `assert()` is updated to no longer print the function name, and
1578 additional logging options are supported via an optional platform define
1579 `PLAT_LOG_LEVEL_ASSERT`, which controls how verbose the assert output is.
1580
Dan Handley610e7e12018-03-01 18:44:00 +00001581- Enhancements to TF-A support when running in AArch32 execution state:
David Cunado1b796fa2017-07-03 18:59:07 +01001582
1583 - Support booting SP_MIN and BL33 in AArch32 execution mode on Juno. Due to
1584 hardware limitations, BL1 and BL2 boot in AArch64 state and there is
1585 additional trampoline code to warm reset into SP_MIN in AArch32 execution
1586 state.
1587
Dan Handley610e7e12018-03-01 18:44:00 +00001588 - Added support for Arm Cortex-A53/57/72 MPCore processors including the
David Cunado1b796fa2017-07-03 18:59:07 +01001589 errata workarounds that are already implemented for AArch64 execution
1590 state.
1591
1592 - For FVP platforms, added AArch32 Trusted Board Boot support, including the
1593 Firmware Update feature.
1594
Dan Handley610e7e12018-03-01 18:44:00 +00001595- Introduced Arm SiP service for use by Arm standard platforms.
David Cunado1b796fa2017-07-03 18:59:07 +01001596
Dan Handley610e7e12018-03-01 18:44:00 +00001597 - Added new Arm SiP Service SMCs to enable the Non-secure world to read PMF
David Cunado1b796fa2017-07-03 18:59:07 +01001598 timestamps.
1599
Dan Handley610e7e12018-03-01 18:44:00 +00001600 Added PMF instrumentation points in TF-A in order to quantify the
David Cunado1b796fa2017-07-03 18:59:07 +01001601 overall time spent in the PSCI software implementation.
1602
Dan Handley610e7e12018-03-01 18:44:00 +00001603 - Added new Arm SiP service SMC to switch execution state.
David Cunado1b796fa2017-07-03 18:59:07 +01001604
1605 This allows the lower exception level to change its execution state from
1606 AArch64 to AArch32, or vice verse, via a request to EL3.
1607
1608- Migrated to use SPDX[0] license identifiers to make software license
1609 auditing simpler.
1610
Paul Beesleyba3ed402019-03-13 16:20:44 +00001611 .. note::
1612 Files that have been imported by FreeBSD have not been modified.
David Cunado1b796fa2017-07-03 18:59:07 +01001613
1614 [0]: https://spdx.org/
1615
1616- Enhancements to the translation table library:
1617
1618 - Added version 2 of translation table library that allows different
1619 translation tables to be modified by using different 'contexts'. Version 1
David Cunadob1580432018-03-14 17:57:31 +00001620 of the translation table library only allows the current EL's translation
David Cunado1b796fa2017-07-03 18:59:07 +01001621 tables to be modified.
1622
1623 Version 2 of the translation table also added support for dynamic
1624 regions; regions that can be added and removed dynamically whilst the
1625 MMU is enabled. Static regions can only be added or removed before the
1626 MMU is enabled.
1627
1628 The dynamic mapping functionality is enabled or disabled when compiling
1629 by setting the build option PLAT_XLAT_TABLES_DYNAMIC to 1 or 0. This can
1630 be done per-image.
1631
1632 - Added support for translation regimes with two virtual address spaces
1633 such as the one shared by EL1 and EL0.
1634
1635 The library does not support initializing translation tables for EL0
1636 software.
1637
1638 - Added support to mark the translation tables as non-cacheable using an
1639 additional build option `XLAT_TABLE_NC`.
1640
1641- Added support for GCC stack protection. A new build option
1642 ENABLE_STACK_PROTECTOR was introduced that enables compilation of all BL
1643 images with one of the GCC -fstack-protector-* options.
1644
1645 A new platform function plat_get_stack_protector_canary() was introduced
1646 that returns a value used to initialize the canary for stack corruption
1647 detection. For increased effectiveness of protection platforms must provide
1648 an implementation that returns a random value.
1649
Dan Handley610e7e12018-03-01 18:44:00 +00001650- Enhanced support for Arm platforms:
David Cunado1b796fa2017-07-03 18:59:07 +01001651
1652 - Added support for multi-threading CPUs, indicated by `MT` field in MPDIR.
1653 A new build flag `ARM_PLAT_MT` is added, and when enabled, the functions
1654 accessing MPIDR assume that the `MT` bit is set for the platform and
1655 access the bit fields accordingly.
1656
1657 Also, a new API `plat_arm_get_cpu_pe_count` is added when `ARM_PLAT_MT` is
1658 enabled, returning the Processing Element count within the physical CPU
1659 corresponding to `mpidr`.
1660
Dan Handley610e7e12018-03-01 18:44:00 +00001661 - The Arm platforms migrated to use version 2 of the translation tables.
David Cunado1b796fa2017-07-03 18:59:07 +01001662
Dan Handley610e7e12018-03-01 18:44:00 +00001663 - Introduced a new Arm platform layer API `plat_arm_psci_override_pm_ops`
1664 which allows Arm platforms to modify `plat_arm_psci_pm_ops` and therefore
David Cunado1b796fa2017-07-03 18:59:07 +01001665 dynamically define PSCI capability.
1666
Dan Handley610e7e12018-03-01 18:44:00 +00001667 - The Arm platforms migrated to use IMAGE_LOAD_V2 by default.
David Cunado1b796fa2017-07-03 18:59:07 +01001668
1669- Enhanced reporting of errata workaround status with the following policy:
1670
1671 - If an errata workaround is enabled:
1672
1673 - If it applies (i.e. the CPU is affected by the errata), an INFO message
1674 is printed, confirming that the errata workaround has been applied.
1675
1676 - If it does not apply, a VERBOSE message is printed, confirming that the
1677 errata workaround has been skipped.
1678
1679 - If an errata workaround is not enabled, but would have applied had it
1680 been, a WARN message is printed, alerting that errata workaround is
1681 missing.
1682
1683- Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the
Dan Handley610e7e12018-03-01 18:44:00 +00001684 architecture version to target TF-A.
David Cunado1b796fa2017-07-03 18:59:07 +01001685
1686- Updated the spin lock implementation to use the more efficient CAS (Compare
1687 And Swap) instruction when available. This instruction was introduced in
Dan Handley610e7e12018-03-01 18:44:00 +00001688 Armv8.1-A.
David Cunado1b796fa2017-07-03 18:59:07 +01001689
Dan Handley610e7e12018-03-01 18:44:00 +00001690- Applied errata workaround for Arm Cortex-A53: 855873.
David Cunado1b796fa2017-07-03 18:59:07 +01001691
Dan Handley610e7e12018-03-01 18:44:00 +00001692- Applied errata workaround for Arm-Cortex-A57: 813419.
David Cunado1b796fa2017-07-03 18:59:07 +01001693
1694- Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and
1695 AArch32 execution states.
1696
1697- Added support for Socionext UniPhier SoC platform.
1698
1699- Added support for Hikey960 and Hikey platforms.
1700
1701- Added support for Rockchip RK3328 platform.
1702
1703- Added support for NVidia Tegra T186 platform.
1704
1705- Added support for Designware emmc driver.
1706
1707- Imported libfdt v1.4.2 that addresses buffer overflow in fdt_offset_ptr().
1708
1709- Enhanced the CPU operations framework to allow power handlers to be
1710 registered on per-level basis. This enables support for future CPUs that
1711 have multiple threads which might need powering down individually.
1712
1713- Updated register initialisation to prevent unexpected behaviour:
1714
1715 - Debug registers MDCR-EL3/SDCR and MDCR_EL2/HDCR are initialised to avoid
1716 unexpected traps into the higher exception levels and disable secure
1717 self-hosted debug. Additionally, secure privileged external debug on
1718 Juno is disabled by programming the appropriate Juno SoC registers.
1719
1720 - EL2 and EL3 configurable controls are initialised to avoid unexpected
1721 traps in the higher exception levels.
1722
1723 - Essential control registers are fully initialised on EL3 start-up, when
1724 initialising the non-secure and secure context structures and when
Paul Beesley1fbc97b2019-01-11 18:26:51 +00001725 preparing to leave EL3 for a lower EL. This gives better alignment with
Dan Handley610e7e12018-03-01 18:44:00 +00001726 the Arm ARM which states that software must initialise RES0 and RES1
David Cunado1b796fa2017-07-03 18:59:07 +01001727 fields with 0 / 1.
1728
1729- Enhanced PSCI support:
1730
1731 - Introduced new platform interfaces that decouple PSCI stat residency
1732 calculation from PMF, enabling platforms to use alternative methods of
1733 capturing timestamps.
1734
1735 - PSCI stat accounting performed for retention/standby states when
1736 requested at multiple power levels.
1737
1738- Simplified fiptool to have a single linked list of image descriptors.
1739
1740- For the TSP, resolved corruption of pre-empted secure context by aborting any
1741 pre-empted SMC during PSCI power management requests.
1742
1743Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001744^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01001745
Dan Handley610e7e12018-03-01 18:44:00 +00001746- TF-A can be built with the latest mbed TLS version (v2.4.2). The earlier
1747 version 2.3.0 cannot be used due to build warnings that the TF-A build
David Cunado1b796fa2017-07-03 18:59:07 +01001748 system interprets as errors.
1749
1750- TBBR, including the Firmware Update feature is now supported on FVP
Dan Handley610e7e12018-03-01 18:44:00 +00001751 platforms when running TF-A in AArch32 state.
David Cunado1b796fa2017-07-03 18:59:07 +01001752
1753- The version of the AEMv8 Base FVP used in this release has resolved the issue
1754 of the model executing a reset instead of terminating in response to a
1755 shutdown request using the PSCI SYSTEM_OFF API.
1756
1757Known Issues
Paul Beesley32379552019-02-11 17:58:21 +00001758^^^^^^^^^^^^
David Cunado1b796fa2017-07-03 18:59:07 +01001759
Dan Handley610e7e12018-03-01 18:44:00 +00001760- Building TF-A with compiler optimisations disabled (-O0) fails.
David Cunado1b796fa2017-07-03 18:59:07 +01001761
1762- Trusted Board Boot currently does not work on Juno when running Trusted
1763 Firmware in AArch32 execution state due to error when loading the sp_min to
David Cunadob1580432018-03-14 17:57:31 +00001764 memory because of lack of free space available. See `tf-issue#501`_ for more
David Cunado1b796fa2017-07-03 18:59:07 +01001765 details.
1766
1767- The errata workaround for A53 errata 843419 is only available from binutils
1768 2.26 and is not present in GCC4.9. If this errata is applicable to the
1769 platform, please use GCC compiler version of at least 5.0. See `PR#1002`_ for
1770 more details.
1771
Paul Beesley32379552019-02-11 17:58:21 +00001772Version 1.3
1773-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001774
Douglas Raillard30d7b362017-06-28 16:14:55 +01001775
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001776New features
Paul Beesley32379552019-02-11 17:58:21 +00001777^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001778
Dan Handley610e7e12018-03-01 18:44:00 +00001779- Added support for running TF-A in AArch32 execution state.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001780
1781 The PSCI library has been refactored to allow integration with **EL3 Runtime
1782 Software**. This is software that is executing at the highest secure
1783 privilege which is EL3 in AArch64 or Secure SVC/Monitor mode in AArch32. See
Paul Beesleyf8640672019-04-12 14:19:42 +01001784 :ref:`PSCI Library Integration guide for Armv8-A AArch32 systems`.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001785
1786 Included is a minimal AArch32 Secure Payload, **SP-MIN**, that illustrates
1787 the usage and integration of the PSCI library with EL3 Runtime Software
1788 running in AArch32 state.
1789
1790 Booting to the BL1/BL2 images as well as booting straight to the Secure
1791 Payload is supported.
1792
Dan Handley610e7e12018-03-01 18:44:00 +00001793- Improvements to the initialization framework for the PSCI service and Arm
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001794 Standard Services in general.
1795
Dan Handley610e7e12018-03-01 18:44:00 +00001796 The PSCI service is now initialized as part of Arm Standard Service
1797 initialization. This consolidates the initializations of any Arm Standard
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001798 Service that may be added in the future.
1799
1800 A new function ``get_arm_std_svc_args()`` is introduced to get arguments
1801 corresponding to each standard service and must be implemented by the EL3
1802 Runtime Software.
1803
1804 For PSCI, a new versioned structure ``psci_lib_args_t`` is introduced to
1805 initialize the PSCI Library. **Note** this is a compatibility break due to
1806 the change in the prototype of ``psci_setup()``.
1807
1808- To support AArch32 builds of BL1 and BL2, implemented a new, alternative
1809 firmware image loading mechanism that adds flexibility.
1810
1811 The current mechanism has a hard-coded set of images and execution order
1812 (BL31, BL32, etc). The new mechanism is data-driven by a list of image
1813 descriptors provided by the platform code.
1814
Dan Handley610e7e12018-03-01 18:44:00 +00001815 Arm platforms have been updated to support the new loading mechanism.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001816
1817 The new mechanism is enabled by a build flag (``LOAD_IMAGE_V2``) which is
1818 currently off by default for the AArch64 build.
1819
1820 **Note** ``TRUSTED_BOARD_BOOT`` is currently not supported when
1821 ``LOAD_IMAGE_V2`` is enabled.
1822
Dan Handley610e7e12018-03-01 18:44:00 +00001823- Updated requirements for making contributions to TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001824
1825 Commits now must have a 'Signed-off-by:' field to certify that the
1826 contribution has been made under the terms of the
Paul Beesleyf8640672019-04-12 14:19:42 +01001827 :download:`Developer Certificate of Origin <../dco.txt>`.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001828
1829 A signed CLA is no longer required.
1830
Paul Beesleyf8640672019-04-12 14:19:42 +01001831 The :ref:`Contributor's Guide` has been updated to reflect this change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001832
1833- Introduced Performance Measurement Framework (PMF) which provides support
1834 for capturing, storing, dumping and retrieving time-stamps to measure the
1835 execution time of critical paths in the firmware. This relies on defining
1836 fixed sample points at key places in the code.
1837
1838- To support the QEMU platform port, imported libfdt v1.4.1 from
Paul Beesley2437ddc2019-02-08 16:43:05 +00001839 https://git.kernel.org/pub/scm/utils/dtc/dtc.git
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001840
1841- Updated PSCI support:
1842
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001843 - Added support for PSCI NODE_HW_STATE API for Arm platforms.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001844
1845 - New optional platform hook, ``pwr_domain_pwr_down_wfi()``, in
1846 ``plat_psci_ops`` to enable platforms to perform platform-specific actions
1847 needed to enter powerdown, including the 'wfi' invocation.
1848
Dan Handley610e7e12018-03-01 18:44:00 +00001849 - PSCI STAT residency and count functions have been added on Arm platforms
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001850 by using PMF.
1851
1852- Enhancements to the translation table library:
1853
1854 - Limited memory mapping support for region overlaps to only allow regions
1855 to overlap that are identity mapped or have the same virtual to physical
1856 address offset, and overlap completely but must not cover the same area.
1857
1858 This limitation will enable future enhancements without having to
1859 support complex edge cases that may not be necessary.
1860
1861 - The initial translation lookup level is now inferred from the virtual
1862 address space size. Previously, it was hard-coded.
1863
1864 - Added support for mapping Normal, Inner Non-cacheable, Outer
1865 Non-cacheable memory in the translation table library.
1866
1867 This can be useful to map a non-cacheable memory region, such as a DMA
1868 buffer.
1869
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001870 - Introduced the MT_EXECUTE/MT_EXECUTE_NEVER memory mapping attributes to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001871 specify the access permissions for instruction execution of a memory
1872 region.
1873
1874- Enabled support to isolate code and read-only data on separate memory pages,
1875 allowing independent access control to be applied to each.
1876
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001877- Enabled SCR_EL3.SIF (Secure Instruction Fetch) bit in BL1 and BL31 common
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001878 architectural setup code, preventing fetching instructions from non-secure
1879 memory when in secure state.
1880
1881- Enhancements to FIP support:
1882
1883 - Replaced ``fip_create`` with ``fiptool`` which provides a more consistent
1884 and intuitive interface as well as additional support to remove an image
1885 from a FIP file.
1886
1887 - Enabled printing the SHA256 digest with info command, allowing quick
1888 verification of an image within a FIP without having to extract the
1889 image and running sha256sum on it.
1890
1891 - Added support for unpacking the contents of an existing FIP file into
1892 the working directory.
1893
1894 - Aligned command line options for specifying images to use same naming
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001895 convention as specified by TBBR and already used in cert_create tool.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001896
1897- Refactored the TZC-400 driver to also support memory controllers that
Dan Handley610e7e12018-03-01 18:44:00 +00001898 integrate TZC functionality, for example Arm CoreLink DMC-500. Also added
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001899 DMC-500 specific support.
1900
1901- Implemented generic delay timer based on the system generic counter and
1902 migrated all platforms to use it.
1903
Dan Handley610e7e12018-03-01 18:44:00 +00001904- Enhanced support for Arm platforms:
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001905
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001906 - Updated image loading support to make SCP images (SCP_BL2 and SCP_BL2U)
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001907 optional.
1908
1909 - Enhanced topology description support to allow multi-cluster topology
1910 definitions.
1911
1912 - Added interconnect abstraction layer to help platform ports select the
1913 right interconnect driver, CCI or CCN, for the platform.
1914
1915 - Added support to allow loading BL31 in the TZC-secured DRAM instead of
1916 the default secure SRAM.
1917
1918 - Added support to use a System Security Control (SSC) Registers Unit
Dan Handley610e7e12018-03-01 18:44:00 +00001919 enabling TF-A to be compiled to support multiple Arm platforms and
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001920 then select one at runtime.
1921
1922 - Restricted mapping of Trusted ROM in BL1 to what is actually needed by
1923 BL1 rather than entire Trusted ROM region.
1924
1925 - Flash is now mapped as execute-never by default. This increases security
1926 by restricting the executable region to what is strictly needed.
1927
1928- Applied following erratum workarounds for Cortex-A57: 833471, 826977,
1929 829520, 828024 and 826974.
1930
1931- Added support for Mediatek MT6795 platform.
1932
Dan Handley610e7e12018-03-01 18:44:00 +00001933- Added support for QEMU virtualization Armv8-A target.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001934
1935- Added support for Rockchip RK3368 and RK3399 platforms.
1936
1937- Added support for Xilinx Zynq UltraScale+ MPSoC platform.
1938
Dan Handley610e7e12018-03-01 18:44:00 +00001939- Added support for Arm Cortex-A73 MPCore Processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001940
Dan Handley610e7e12018-03-01 18:44:00 +00001941- Added support for Arm Cortex-A72 processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001942
Dan Handley610e7e12018-03-01 18:44:00 +00001943- Added support for Arm Cortex-A35 processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001944
Dan Handley610e7e12018-03-01 18:44:00 +00001945- Added support for Arm Cortex-A32 MPCore Processor.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001946
1947- Enabled preloaded BL33 alternative boot flow, in which BL2 does not load
1948 BL33 from non-volatile storage and BL31 hands execution over to a preloaded
1949 BL33. The User Guide has been updated with an example of how to use this
1950 option with a bootwrapped kernel.
1951
Dan Handley610e7e12018-03-01 18:44:00 +00001952- Added support to build TF-A on a Windows-based host machine.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001953
1954- Updated Trusted Board Boot prototype implementation:
1955
1956 - Enabled the ability for a production ROM with TBBR enabled to boot test
1957 software before a real ROTPK is deployed (e.g. manufacturing mode).
1958 Added support to use ROTPK in certificate without verifying against the
1959 platform value when ``ROTPK_NOT_DEPLOYED`` bit is set.
1960
1961 - Added support for non-volatile counter authentication to the
1962 Authentication Module to protect against roll-back.
1963
1964- Updated GICv3 support:
1965
1966 - Enabled processor power-down and automatic power-on using GICv3.
1967
1968 - Enabled G1S or G0 interrupts to be configured independently.
1969
1970 - Changed FVP default interrupt driver to be the GICv3-only driver.
Dan Handley610e7e12018-03-01 18:44:00 +00001971 **Note** the default build of TF-A will not be able to boot
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001972 Linux kernel with GICv2 FDT blob.
1973
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01001974 - Enabled wake-up from CPU_SUSPEND to stand-by by temporarily re-routing
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001975 interrupts and then restoring after resume.
1976
1977Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00001978^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001979
1980Known issues
Paul Beesley32379552019-02-11 17:58:21 +00001981^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001982
1983- The version of the AEMv8 Base FVP used in this release resets the model
1984 instead of terminating its execution in response to a shutdown request using
1985 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
1986 the model.
1987
Dan Handley610e7e12018-03-01 18:44:00 +00001988- Building TF-A with compiler optimisations disabled (``-O0``) fails.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001989
Dan Handley610e7e12018-03-01 18:44:00 +00001990- TF-A cannot be built with mbed TLS version v2.3.0 due to build warnings
1991 that the TF-A build system interprets as errors.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001992
Dan Handley610e7e12018-03-01 18:44:00 +00001993- TBBR is not currently supported when running TF-A in AArch32 state.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001994
Paul Beesley32379552019-02-11 17:58:21 +00001995Version 1.2
1996-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001997
1998New features
Paul Beesley32379552019-02-11 17:58:21 +00001999^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002000
Dan Handley610e7e12018-03-01 18:44:00 +00002001- The Trusted Board Boot implementation on Arm platforms now conforms to the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002002 mandatory requirements of the TBBR specification.
2003
2004 In particular, the boot process is now guarded by a Trusted Watchdog, which
Dan Handley610e7e12018-03-01 18:44:00 +00002005 will reset the system in case of an authentication or loading error. On Arm
2006 platforms, a secure instance of Arm SP805 is used as the Trusted Watchdog.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002007
2008 Also, a firmware update process has been implemented. It enables
2009 authenticated firmware to update firmware images from external interfaces to
2010 SoC Non-Volatile memories. This feature functions even when the current
2011 firmware in the system is corrupt or missing; it therefore may be used as
2012 a recovery mode.
2013
2014- Improvements have been made to the Certificate Generation Tool
2015 (``cert_create``) as follows.
2016
2017 - Added support for the Firmware Update process by extending the Chain
2018 of Trust definition in the tool to include the Firmware Update
2019 certificate and the required extensions.
2020
2021 - Introduced a new API that allows one to specify command line options in
2022 the Chain of Trust description. This makes the declaration of the tool's
2023 arguments more flexible and easier to extend.
2024
2025 - The tool has been reworked to follow a data driven approach, which
2026 makes it easier to maintain and extend.
2027
2028- Extended the FIP tool (``fip_create``) to support the new set of images
2029 involved in the Firmware Update process.
2030
2031- Various memory footprint improvements. In particular:
2032
2033 - The bakery lock structure for coherent memory has been optimised.
2034
2035 - The mbed TLS SHA1 functions are not needed, as SHA256 is used to
2036 generate the certificate signature. Therefore, they have been compiled
2037 out, reducing the memory footprint of BL1 and BL2 by approximately
2038 6 KB.
2039
Dan Handley610e7e12018-03-01 18:44:00 +00002040 - On Arm development platforms, each BL stage now individually defines
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002041 the number of regions that it needs to map in the MMU.
2042
2043- Added the following new design documents:
2044
Paul Beesleyf8640672019-04-12 14:19:42 +01002045 - :ref:`Authentication Framework & Chain of Trust`
2046 - :ref:`Firmware Update (FWU)`
2047 - :ref:`CPU Reset`
2048 - :ref:`PSCI Power Domain Tree Structure`
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002049
2050- Applied the new image terminology to the code base and documentation, as
Paul Beesleyf8640672019-04-12 14:19:42 +01002051 described in the :ref:`Image Terminology` document.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002052
2053- The build system has been reworked to improve readability and facilitate
2054 adding future extensions.
2055
Dan Handley610e7e12018-03-01 18:44:00 +00002056- On Arm standard platforms, BL31 uses the boot console during cold boot
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002057 but switches to the runtime console for any later logs at runtime. The TSP
2058 uses the runtime console for all output.
2059
Dan Handley610e7e12018-03-01 18:44:00 +00002060- Implemented a basic NOR flash driver for Arm platforms. It programs the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002061 device using CFI (Common Flash Interface) standard commands.
2062
Dan Handley610e7e12018-03-01 18:44:00 +00002063- Implemented support for booting EL3 payloads on Arm platforms, which
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002064 reduces the complexity of developing EL3 baremetal code by doing essential
2065 baremetal initialization.
2066
2067- Provided separate drivers for GICv3 and GICv2. These expect the entire
2068 software stack to use either GICv2 or GICv3; hybrid GIC software systems
Dan Handley610e7e12018-03-01 18:44:00 +00002069 are no longer supported and the legacy Arm GIC driver has been deprecated.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002070
Dan Handley610e7e12018-03-01 18:44:00 +00002071- Added support for Juno r1 and r2. A single set of Juno TF-A binaries can run
2072 on Juno r0, r1 and r2 boards. Note that this TF-A version depends on a Linaro
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002073 release that does *not* contain Juno r2 support.
2074
2075- Added support for MediaTek mt8173 platform.
2076
Dan Handley610e7e12018-03-01 18:44:00 +00002077- Implemented a generic driver for Arm CCN IP.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002078
2079- Major rework of the PSCI implementation.
2080
2081 - Added framework to handle composite power states.
2082
2083 - Decoupled the notions of affinity instances (which describes the
2084 hierarchical arrangement of cores) and of power domain topology, instead
2085 of assuming a one-to-one mapping.
2086
2087 - Better alignment with version 1.0 of the PSCI specification.
2088
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002089- Added support for the SYSTEM_SUSPEND PSCI API on Arm platforms. When invoked
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002090 on the last running core on a supported platform, this puts the system
2091 into a low power mode with memory retention.
2092
2093- Unified the reset handling code as much as possible across BL stages.
2094 Also introduced some build options to enable optimization of the reset path
2095 on platforms that support it.
2096
2097- Added a simple delay timer API, as well as an SP804 timer driver, which is
2098 enabled on FVP.
2099
2100- Added support for NVidia Tegra T210 and T132 SoCs.
2101
Dan Handley610e7e12018-03-01 18:44:00 +00002102- Reorganised Arm platforms ports to greatly improve code shareability and
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002103 facilitate the reuse of some of this code by other platforms.
2104
Dan Handley610e7e12018-03-01 18:44:00 +00002105- Added support for Arm Cortex-A72 processor in the CPU specific framework.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002106
2107- Provided better error handling. Platform ports can now define their own
2108 error handling, for example to perform platform specific bookkeeping or
2109 post-error actions.
2110
Dan Handley610e7e12018-03-01 18:44:00 +00002111- Implemented a unified driver for Arm Cache Coherent Interconnects used for
2112 both CCI-400 & CCI-500 IPs. Arm platforms ports have been migrated to this
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002113 common driver. The standalone CCI-400 driver has been deprecated.
2114
2115Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002116^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002117
2118- The Trusted Board Boot implementation has been redesigned to provide greater
Paul Beesleyf8640672019-04-12 14:19:42 +01002119 modularity and scalability. See the
2120 :ref:`Authentication Framework & Chain of Trust` document.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002121 All missing mandatory features are now implemented.
2122
2123- The FVP and Juno ports may now use the hash of the ROTPK stored in the
2124 Trusted Key Storage registers to verify the ROTPK. Alternatively, a
2125 development public key hash embedded in the BL1 and BL2 binaries might be
2126 used instead. The location of the ROTPK is chosen at build-time using the
2127 ``ARM_ROTPK_LOCATION`` build option.
2128
2129- GICv3 is now fully supported and stable.
2130
2131Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002132^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002133
2134- The version of the AEMv8 Base FVP used in this release resets the model
2135 instead of terminating its execution in response to a shutdown request using
2136 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
2137 the model.
2138
2139- While this version has low on-chip RAM requirements, there are further
2140 RAM usage enhancements that could be made.
2141
2142- The upstream documentation could be improved for structural consistency,
2143 clarity and completeness. In particular, the design documentation is
2144 incomplete for PSCI, the TSP(D) and the Juno platform.
2145
Dan Handley610e7e12018-03-01 18:44:00 +00002146- Building TF-A with compiler optimisations disabled (``-O0``) fails.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002147
Paul Beesley32379552019-02-11 17:58:21 +00002148Version 1.1
2149-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002150
2151New features
Paul Beesley32379552019-02-11 17:58:21 +00002152^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002153
2154- A prototype implementation of Trusted Board Boot has been added. Boot
2155 loader images are verified by BL1 and BL2 during the cold boot path. BL1 and
2156 BL2 use the PolarSSL SSL library to verify certificates and images. The
2157 OpenSSL library is used to create the X.509 certificates. Support has been
2158 added to ``fip_create`` tool to package the certificates in a FIP.
2159
2160- Support for calling CPU and platform specific reset handlers upon entry into
2161 BL3-1 during the cold and warm boot paths has been added. This happens after
2162 another Boot ROM ``reset_handler()`` has already run. This enables a developer
2163 to perform additional actions or undo actions already performed during the
2164 first call of the reset handlers e.g. apply additional errata workarounds.
2165
2166- Support has been added to demonstrate routing of IRQs to EL3 instead of
2167 S-EL1 when execution is in secure world.
2168
2169- The PSCI implementation now conforms to version 1.0 of the PSCI
2170 specification. All the mandatory APIs and selected optional APIs are
2171 supported. In particular, support for the ``PSCI_FEATURES`` API has been
2172 added. A capability variable is constructed during initialization by
2173 examining the ``plat_pm_ops`` and ``spd_pm_ops`` exported by the platform and
2174 the Secure Payload Dispatcher. This is used by the PSCI FEATURES function
2175 to determine which PSCI APIs are supported by the platform.
2176
2177- Improvements have been made to the PSCI code as follows.
2178
2179 - The code has been refactored to remove redundant parameters from
2180 internal functions.
2181
2182 - Changes have been made to the code for PSCI ``CPU_SUSPEND``, ``CPU_ON`` and
2183 ``CPU_OFF`` calls to facilitate an early return to the caller in case a
2184 failure condition is detected. For example, a PSCI ``CPU_SUSPEND`` call
2185 returns ``SUCCESS`` to the caller if a pending interrupt is detected early
2186 in the code path.
2187
2188 - Optional platform APIs have been added to validate the ``power_state`` and
2189 ``entrypoint`` parameters early in PSCI ``CPU_ON`` and ``CPU_SUSPEND`` code
2190 paths.
2191
2192 - PSCI migrate APIs have been reworked to invoke the SPD hook to determine
2193 the type of Trusted OS and the CPU it is resident on (if
2194 applicable). Also, during a PSCI ``MIGRATE`` call, the SPD hook to migrate
2195 the Trusted OS is invoked.
2196
Dan Handley610e7e12018-03-01 18:44:00 +00002197- It is now possible to build TF-A without marking at least an extra page of
2198 memory as coherent. The build flag ``USE_COHERENT_MEM`` can be used to
2199 choose between the two implementations. This has been made possible through
2200 these changes.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002201
2202 - An implementation of Bakery locks, where the locks are not allocated in
2203 coherent memory has been added.
2204
2205 - Memory which was previously marked as coherent is now kept coherent
2206 through the use of software cache maintenance operations.
2207
2208 Approximately, 4K worth of memory is saved for each boot loader stage when
2209 ``USE_COHERENT_MEM=0``. Enabling this option increases the latencies
2210 associated with acquire and release of locks. It also requires changes to
2211 the platform ports.
2212
2213- It is now possible to specify the name of the FIP at build time by defining
2214 the ``FIP_NAME`` variable.
2215
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002216- Issues with dependencies on the 'fiptool' makefile target have been
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002217 rectified. The ``fip_create`` tool is now rebuilt whenever its source files
2218 change.
2219
2220- The BL3-1 runtime console is now also used as the crash console. The crash
2221 console is changed to SoC UART0 (UART2) from the previous FPGA UART0 (UART0)
2222 on Juno. In FVP, it is changed from UART0 to UART1.
2223
2224- CPU errata workarounds are applied only when the revision and part number
2225 match. This behaviour has been made consistent across the debug and release
2226 builds. The debug build additionally prints a warning if a mismatch is
2227 detected.
2228
2229- It is now possible to issue cache maintenance operations by set/way for a
2230 particular level of data cache. Levels 1-3 are currently supported.
2231
2232- The following improvements have been made to the FVP port.
2233
2234 - The build option ``FVP_SHARED_DATA_LOCATION`` which allowed relocation of
2235 shared data into the Trusted DRAM has been deprecated. Shared data is
2236 now always located at the base of Trusted SRAM.
2237
2238 - BL2 Translation tables have been updated to map only the region of
2239 DRAM which is accessible to normal world. This is the region of the 2GB
2240 DDR-DRAM memory at 0x80000000 excluding the top 16MB. The top 16MB is
2241 accessible to only the secure world.
2242
2243 - BL3-2 can now reside in the top 16MB of DRAM which is accessible only to
2244 the secure world. This can be done by setting the build flag
2245 ``FVP_TSP_RAM_LOCATION`` to the value ``dram``.
2246
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002247- Separate translation tables are created for each boot loader image. The
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002248 ``IMAGE_BLx`` build options are used to do this. This allows each stage to
2249 create mappings only for areas in the memory map that it needs.
2250
2251- A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been
Paul Beesleyf8640672019-04-12 14:19:42 +01002252 added. Details of using it with TF-A can be found in :ref:`OP-TEE Dispatcher`
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002253
2254Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002255^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002256
2257- The Juno port has been aligned with the FVP port as follows.
2258
2259 - Support for reclaiming all BL1 RW memory and BL2 memory by overlaying
2260 the BL3-1/BL3-2 NOBITS sections on top of them has been added to the
2261 Juno port.
2262
2263 - The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured
2264 using the TZC-400 controller to be accessible only to the secure world.
2265
Dan Handley610e7e12018-03-01 18:44:00 +00002266 - The Arm GIC driver is used to configure the GIC-400 instead of using a
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002267 GIC driver private to the Juno port.
2268
2269 - PSCI ``CPU_SUSPEND`` calls that target a standby state are now supported.
2270
2271 - The TZC-400 driver is used to configure the controller instead of direct
2272 accesses to the registers.
2273
2274- The Linux kernel version referred to in the user guide has DVFS and HMP
2275 support enabled.
2276
2277- DS-5 v5.19 did not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
2278 CADI server mode. This issue is not seen with DS-5 v5.20 and Version 6.2 of
2279 the Cortex-A57-A53 Base FVPs.
2280
2281Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002282^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002283
2284- The Trusted Board Boot implementation is a prototype. There are issues with
2285 the modularity and scalability of the design. Support for a Trusted
2286 Watchdog, firmware update mechanism, recovery images and Trusted debug is
2287 absent. These issues will be addressed in future releases.
2288
2289- The FVP and Juno ports do not use the hash of the ROTPK stored in the
2290 Trusted Key Storage registers to verify the ROTPK in the
2291 ``plat_match_rotpk()`` function. This prevents the correct establishment of
2292 the Chain of Trust at the first step in the Trusted Board Boot process.
2293
2294- The version of the AEMv8 Base FVP used in this release resets the model
2295 instead of terminating its execution in response to a shutdown request using
2296 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
2297 the model.
2298
2299- GICv3 support is experimental. There are known issues with GICv3
Dan Handley610e7e12018-03-01 18:44:00 +00002300 initialization in the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002301
2302- While this version greatly reduces the on-chip RAM requirements, there are
2303 further RAM usage enhancements that could be made.
2304
2305- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2306 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2307
2308- The Juno-specific firmware design documentation is incomplete.
2309
Paul Beesley32379552019-02-11 17:58:21 +00002310Version 1.0
2311-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002312
2313New features
Paul Beesley32379552019-02-11 17:58:21 +00002314^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002315
2316- It is now possible to map higher physical addresses using non-flat virtual
2317 to physical address mappings in the MMU setup.
2318
2319- Wider use is now made of the per-CPU data cache in BL3-1 to store:
2320
2321 - Pointers to the non-secure and secure security state contexts.
2322
2323 - A pointer to the CPU-specific operations.
2324
2325 - A pointer to PSCI specific information (for example the current power
2326 state).
2327
2328 - A crash reporting buffer.
2329
2330- The following RAM usage improvements result in a BL3-1 RAM usage reduction
2331 from 96KB to 56KB (for FVP with TSPD), and a total RAM usage reduction
2332 across all images from 208KB to 88KB, compared to the previous release.
2333
2334 - Removed the separate ``early_exception`` vectors from BL3-1 (2KB code size
2335 saving).
2336
2337 - Removed NSRAM from the FVP memory map, allowing the removal of one
2338 (4KB) translation table.
2339
2340 - Eliminated the internal ``psci_suspend_context`` array, saving 2KB.
2341
2342 - Correctly dimensioned the PSCI ``aff_map_node`` array, saving 1.5KB in the
2343 FVP port.
2344
2345 - Removed calling CPU mpidr from the bakery lock API, saving 160 bytes.
2346
2347 - Removed current CPU mpidr from PSCI common code, saving 160 bytes.
2348
2349 - Inlined the mmio accessor functions, saving 360 bytes.
2350
2351 - Fully reclaimed all BL1 RW memory and BL2 memory on the FVP port by
2352 overlaying the BL3-1/BL3-2 NOBITS sections on top of these at runtime.
2353
2354 - Made storing the FP register context optional, saving 0.5KB per context
2355 (8KB on the FVP port, with TSPD enabled and running on 8 CPUs).
2356
2357 - Implemented a leaner ``tf_printf()`` function, allowing the stack to be
2358 greatly reduced.
2359
2360 - Removed coherent stacks from the codebase. Stacks allocated in normal
2361 memory are now used before and after the MMU is enabled. This saves 768
2362 bytes per CPU in BL3-1.
2363
2364 - Reworked the crash reporting in BL3-1 to use less stack.
2365
2366 - Optimized the EL3 register state stored in the ``cpu_context`` structure
2367 so that registers that do not change during normal execution are
2368 re-initialized each time during cold/warm boot, rather than restored
2369 from memory. This saves about 1.2KB.
2370
2371 - As a result of some of the above, reduced the runtime stack size in all
2372 BL images. For BL3-1, this saves 1KB per CPU.
2373
2374- PSCI SMC handler improvements to correctly handle calls from secure states
2375 and from AArch32.
2376
2377- CPU contexts are now initialized from the ``entry_point_info``. BL3-1 fully
2378 determines the exception level to use for the non-trusted firmware (BL3-3)
2379 based on the SPSR value provided by the BL2 platform code (or otherwise
2380 provided to BL3-1). This allows platform code to directly run non-trusted
2381 firmware payloads at either EL2 or EL1 without requiring an EL2 stub or OS
2382 loader.
2383
2384- Code refactoring improvements:
2385
2386 - Refactored ``fvp_config`` into a common platform header.
2387
2388 - Refactored the fvp gic code to be a generic driver that no longer has an
2389 explicit dependency on platform code.
2390
2391 - Refactored the CCI-400 driver to not have dependency on platform code.
2392
2393 - Simplified the IO driver so it's no longer necessary to call ``io_init()``
2394 and moved all the IO storage framework code to one place.
2395
2396 - Simplified the interface the the TZC-400 driver.
2397
2398 - Clarified the platform porting interface to the TSP.
2399
2400 - Reworked the TSPD setup code to support the alternate BL3-2
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002401 initialization flow where BL3-1 generic code hands control to BL3-2,
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002402 rather than expecting the TSPD to hand control directly to BL3-2.
2403
2404 - Considerable rework to PSCI generic code to support CPU specific
2405 operations.
2406
2407- Improved console log output, by:
2408
2409 - Adding the concept of debug log levels.
2410
2411 - Rationalizing the existing debug messages and adding new ones.
2412
2413 - Printing out the version of each BL stage at runtime.
2414
2415 - Adding support for printing console output from assembler code,
2416 including when a crash occurs before the C runtime is initialized.
2417
2418- Moved up to the latest versions of the FVPs, toolchain, EDK2, kernel, Linaro
2419 file system and DS-5.
2420
2421- On the FVP port, made the use of the Trusted DRAM region optional at build
2422 time (off by default). Normal platforms will not have such a "ready-to-use"
2423 DRAM area so it is not a good example to use it.
2424
2425- Added support for PSCI ``SYSTEM_OFF`` and ``SYSTEM_RESET`` APIs.
2426
2427- Added support for CPU specific reset sequences, power down sequences and
2428 register dumping during crash reporting. The CPU specific reset sequences
2429 include support for errata workarounds.
2430
2431- Merged the Juno port into the master branch. Added support for CPU hotplug
2432 and CPU idle. Updated the user guide to describe how to build and run on the
2433 Juno platform.
2434
2435Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002436^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002437
2438- Removed the concept of top/bottom image loading. The image loader now
2439 automatically detects the position of the image inside the current memory
Paul Beesley1fbc97b2019-01-11 18:26:51 +00002440 layout and updates the layout to minimize fragmentation. This resolves the
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002441 image loader limitations of previously releases. There are currently no
2442 plans to support dynamic image loading.
2443
2444- CPU idle now works on the publicized version of the Foundation FVP.
2445
2446- All known issues relating to the compiler version used have now been
Dan Handley610e7e12018-03-01 18:44:00 +00002447 resolved. This TF-A version uses Linaro toolchain 14.07 (based on GCC 4.9).
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002448
2449Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002450^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002451
2452- GICv3 support is experimental. The Linux kernel patches to support this are
2453 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00002454 the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002455
2456- While this version greatly reduces the on-chip RAM requirements, there are
2457 further RAM usage enhancements that could be made.
2458
2459- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2460 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2461
2462- The Juno-specific firmware design documentation is incomplete.
2463
2464- Some recent enhancements to the FVP port have not yet been translated into
2465 the Juno port. These will be tracked via the tf-issues project.
2466
2467- The Linux kernel version referred to in the user guide has DVFS and HMP
2468 support disabled due to some known instabilities at the time of this
2469 release. A future kernel version will re-enable these features.
2470
2471- DS-5 v5.19 does not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
2472 CADI server mode. This is because the ``<SimName>`` reported by the FVP in
2473 this version has changed. For example, for the Cortex-A57x4-A53x4 Base FVP,
2474 the ``<SimName>`` reported by the FVP is ``FVP_Base_Cortex_A57x4_A53x4``, while
2475 DS-5 expects it to be ``FVP_Base_A57x4_A53x4``.
2476
2477 The temporary fix to this problem is to change the name of the FVP in
2478 ``sw/debugger/configdb/Boards/ARM FVP/Base_A57x4_A53x4/cadi_config.xml``.
2479 Change the following line:
2480
2481 ::
2482
2483 <SimName>System Generator:FVP_Base_A57x4_A53x4</SimName>
2484
2485 to
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002486 System Generator:FVP_Base_Cortex-A57x4_A53x4
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002487
2488 A similar change can be made to the other Cortex-A57-A53 Base FVP variants.
2489
Paul Beesley32379552019-02-11 17:58:21 +00002490Version 0.4
2491-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002492
2493New features
Paul Beesley32379552019-02-11 17:58:21 +00002494^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002495
2496- Makefile improvements:
2497
2498 - Improved dependency checking when building.
2499
2500 - Removed ``dump`` target (build now always produces dump files).
2501
2502 - Enabled platform ports to optionally make use of parts of the Trusted
2503 Firmware (e.g. BL3-1 only), rather than being forced to use all parts.
2504 Also made the ``fip`` target optional.
2505
2506 - Specified the full path to source files and removed use of the ``vpath``
2507 keyword.
2508
2509- Provided translation table library code for potential re-use by platforms
2510 other than the FVPs.
2511
2512- Moved architectural timer setup to platform-specific code.
2513
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002514- Added standby state support to PSCI cpu_suspend implementation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002515
2516- SRAM usage improvements:
2517
2518 - Started using the ``-ffunction-sections``, ``-fdata-sections`` and
2519 ``--gc-sections`` compiler/linker options to remove unused code and data
2520 from the images. Previously, all common functions were being built into
2521 all binary images, whether or not they were actually used.
2522
2523 - Placed all assembler functions in their own section to allow more unused
2524 functions to be removed from images.
2525
2526 - Updated BL1 and BL2 to use a single coherent stack each, rather than one
2527 per CPU.
2528
2529 - Changed variables that were unnecessarily declared and initialized as
2530 non-const (i.e. in the .data section) so they are either uninitialized
2531 (zero init) or const.
2532
2533- Moved the Test Secure-EL1 Payload (BL3-2) to execute in Trusted SRAM by
2534 default. The option for it to run in Trusted DRAM remains.
2535
2536- Implemented a TrustZone Address Space Controller (TZC-400) driver. A
2537 default configuration is provided for the Base FVPs. This means the model
2538 parameter ``-C bp.secure_memory=1`` is now supported.
2539
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002540- Started saving the PSCI cpu_suspend 'power_state' parameter prior to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002541 suspending a CPU. This allows platforms that implement multiple power-down
2542 states at the same affinity level to identify a specific state.
2543
2544- Refactored the entire codebase to reduce the amount of nesting in header
2545 files and to make the use of system/user includes more consistent. Also
2546 split platform.h to separate out the platform porting declarations from the
2547 required platform porting definitions and the definitions/declarations
2548 specific to the platform port.
2549
2550- Optimized the data cache clean/invalidate operations.
2551
2552- Improved the BL3-1 unhandled exception handling and reporting. Unhandled
2553 exceptions now result in a dump of registers to the console.
2554
2555- Major rework to the handover interface between BL stages, in particular the
2556 interface to BL3-1. The interface now conforms to a specification and is
2557 more future proof.
2558
2559- Added support for optionally making the BL3-1 entrypoint a reset handler
2560 (instead of BL1). This allows platforms with an alternative image loading
2561 architecture to re-use BL3-1 with fewer modifications to generic code.
2562
2563- Reserved some DDR DRAM for secure use on FVP platforms to avoid future
2564 compatibility problems with non-secure software.
2565
2566- Added support for secure interrupts targeting the Secure-EL1 Payload (SP)
2567 (using GICv2 routing only). Demonstrated this working by adding an interrupt
2568 target and supporting test code to the TSP. Also demonstrated non-secure
2569 interrupt handling during TSP processing.
2570
2571Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002572^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002573
2574- Now support use of the model parameter ``-C bp.secure_memory=1`` in the Base
2575 FVPs (see **New features**).
2576
2577- Support for secure world interrupt handling now available (see **New
2578 features**).
2579
2580- Made enough SRAM savings (see **New features**) to enable the Test Secure-EL1
2581 Payload (BL3-2) to execute in Trusted SRAM by default.
2582
2583- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
2584 14.04) now correctly reports progress in the console.
2585
2586- Improved the Makefile structure to make it easier to separate out parts of
Dan Handley610e7e12018-03-01 18:44:00 +00002587 the TF-A for re-use in platform ports. Also, improved target dependency
2588 checking.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002589
2590Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002591^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002592
2593- GICv3 support is experimental. The Linux kernel patches to support this are
2594 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00002595 the TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002596
2597- Dynamic image loading is not available yet. The current image loader
2598 implementation (used to load BL2 and all subsequent images) has some
2599 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
2600 to loading errors, even if the images should theoretically fit in memory.
2601
Dan Handley610e7e12018-03-01 18:44:00 +00002602- TF-A still uses too much on-chip Trusted SRAM. A number of RAM usage
2603 enhancements have been identified to rectify this situation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002604
2605- CPU idle does not work on the advertised version of the Foundation FVP.
2606 Some FVP fixes are required that are not available externally at the time
2607 of writing. This can be worked around by disabling CPU idle in the Linux
2608 kernel.
2609
Dan Handley610e7e12018-03-01 18:44:00 +00002610- Various bugs in TF-A, UEFI and the Linux kernel have been observed when
2611 using Linaro toolchain versions later than 13.11. Although most of these
2612 have been fixed, some remain at the time of writing. These mainly seem to
2613 relate to a subtle change in the way the compiler converts between 64-bit
2614 and 32-bit values (e.g. during casting operations), which reveals
2615 previously hidden bugs in client code.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002616
2617- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2618 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2619
Paul Beesley32379552019-02-11 17:58:21 +00002620Version 0.3
2621-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002622
2623New features
Paul Beesley32379552019-02-11 17:58:21 +00002624^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002625
2626- Support for Foundation FVP Version 2.0 added.
2627 The documented UEFI configuration disables some devices that are unavailable
2628 in the Foundation FVP, including MMC and CLCD. The resultant UEFI binary can
2629 be used on the AEMv8 and Cortex-A57-A53 Base FVPs, as well as the Foundation
2630 FVP.
2631
Paul Beesleyba3ed402019-03-13 16:20:44 +00002632 .. note::
2633 The software will not work on Version 1.0 of the Foundation FVP.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002634
2635- Enabled third party contributions. Added a new contributing.md containing
2636 instructions for how to contribute and updated copyright text in all files
2637 to acknowledge contributors.
2638
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002639- The PSCI CPU_SUSPEND API has been stabilised to the extent where it can be
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002640 used for entry into power down states with the following restrictions:
2641
2642 - Entry into standby states is not supported.
2643 - The API is only supported on the AEMv8 and Cortex-A57-A53 Base FVPs.
2644
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002645- The PSCI AFFINITY_INFO api has undergone limited testing on the Base FVPs to
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002646 allow experimental use.
2647
Dan Handley610e7e12018-03-01 18:44:00 +00002648- Required C library and runtime header files are now included locally in
2649 TF-A instead of depending on the toolchain standard include paths. The
2650 local implementation has been cleaned up and reduced in scope.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002651
2652- Added I/O abstraction framework, primarily to allow generic code to load
2653 images in a platform-independent way. The existing image loading code has
2654 been reworked to use the new framework. Semi-hosting and NOR flash I/O
2655 drivers are provided.
2656
2657- Introduced Firmware Image Package (FIP) handling code and tools. A FIP
2658 combines multiple firmware images with a Table of Contents (ToC) into a
2659 single binary image. The new FIP driver is another type of I/O driver. The
2660 Makefile builds a FIP by default and the FVP platform code expect to load a
2661 FIP from NOR flash, although some support for image loading using semi-
2662 hosting is retained.
2663
Paul Beesleyba3ed402019-03-13 16:20:44 +00002664 .. note::
2665 Building a FIP by default is a non-backwards-compatible change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002666
Paul Beesleyba3ed402019-03-13 16:20:44 +00002667 .. note::
2668 Generic BL2 code now loads a BL3-3 (non-trusted firmware) image into
2669 DRAM instead of expecting this to be pre-loaded at known location. This is
2670 also a non-backwards-compatible change.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002671
Paul Beesleyba3ed402019-03-13 16:20:44 +00002672 .. note::
2673 Some non-trusted firmware (e.g. UEFI) will need to be rebuilt so that
2674 it knows the new location to execute from and no longer needs to copy
2675 particular code modules to DRAM itself.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002676
2677- Reworked BL2 to BL3-1 handover interface. A new composite structure
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002678 (bl31_args) holds the superset of information that needs to be passed from
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002679 BL2 to BL3-1, including information on how handover execution control to
2680 BL3-2 (if present) and BL3-3 (non-trusted firmware).
2681
2682- Added library support for CPU context management, allowing the saving and
2683 restoring of
2684
2685 - Shared system registers between Secure-EL1 and EL1.
2686 - VFP registers.
2687 - Essential EL3 system registers.
2688
2689- Added a framework for implementing EL3 runtime services. Reworked the PSCI
2690 implementation to be one such runtime service.
2691
Sandrine Bailleux15530dd2019-02-08 15:26:36 +01002692- Reworked the exception handling logic, making use of both SP_EL0 and SP_EL3
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002693 stack pointers for determining the type of exception, managing general
2694 purpose and system register context on exception entry/exit, and handling
2695 SMCs. SMCs are directed to the correct EL3 runtime service.
2696
2697- Added support for a Test Secure-EL1 Payload (TSP) and a corresponding
2698 Dispatcher (TSPD), which is loaded as an EL3 runtime service. The TSPD
2699 implements Secure Monitor functionality such as world switching and
2700 EL1 context management, and is responsible for communication with the TSP.
Paul Beesleyba3ed402019-03-13 16:20:44 +00002701
2702 .. note::
2703 The TSPD does not yet contain support for secure world interrupts.
2704 .. note::
2705 The TSP/TSPD is not built by default.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002706
2707Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002708^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002709
2710- Support has been added for switching context between secure and normal
2711 worlds in EL3.
2712
2713- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` have now been tested (to
2714 a limited extent).
2715
Dan Handley610e7e12018-03-01 18:44:00 +00002716- The TF-A build artifacts are now placed in the ``./build`` directory and
2717 sub-directories instead of being placed in the root of the project.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002718
Dan Handley610e7e12018-03-01 18:44:00 +00002719- TF-A is now free from build warnings. Build warnings are now treated as
2720 errors.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002721
Dan Handley610e7e12018-03-01 18:44:00 +00002722- TF-A now provides C library support locally within the project to maintain
2723 compatibility between toolchains/systems.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002724
2725- The PSCI locking code has been reworked so it no longer takes locks in an
2726 incorrect sequence.
2727
2728- The RAM-disk method of loading a Linux file-system has been confirmed to
Dan Handley610e7e12018-03-01 18:44:00 +00002729 work with the TF-A and Linux kernel version (based on version 3.13) used
2730 in this release, for both Foundation and Base FVPs.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002731
2732Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002733^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002734
2735The following is a list of issues which are expected to be fixed in the future
Dan Handley610e7e12018-03-01 18:44:00 +00002736releases of TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002737
2738- The TrustZone Address Space Controller (TZC-400) is not being programmed
2739 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
2740
2741- No support yet for secure world interrupt handling.
2742
2743- GICv3 support is experimental. The Linux kernel patches to support this are
2744 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00002745 TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002746
2747- Dynamic image loading is not available yet. The current image loader
2748 implementation (used to load BL2 and all subsequent images) has some
2749 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
2750 to loading errors, even if the images should theoretically fit in memory.
2751
Dan Handley610e7e12018-03-01 18:44:00 +00002752- TF-A uses too much on-chip Trusted SRAM. Currently the Test Secure-EL1
2753 Payload (BL3-2) executes in Trusted DRAM since there is not enough SRAM.
2754 A number of RAM usage enhancements have been identified to rectify this
2755 situation.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002756
2757- CPU idle does not work on the advertised version of the Foundation FVP.
2758 Some FVP fixes are required that are not available externally at the time
2759 of writing.
2760
Dan Handley610e7e12018-03-01 18:44:00 +00002761- Various bugs in TF-A, UEFI and the Linux kernel have been observed when
2762 using Linaro toolchain versions later than 13.11. Although most of these
2763 have been fixed, some remain at the time of writing. These mainly seem to
2764 relate to a subtle change in the way the compiler converts between 64-bit
2765 and 32-bit values (e.g. during casting operations), which reveals
2766 previously hidden bugs in client code.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002767
2768- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
2769 14.01) does not report progress correctly in the console. It only seems to
2770 produce error output, not standard output. It otherwise appears to function
2771 correctly. Other filesystem versions on the same software stack do not
2772 exhibit the problem.
2773
2774- The Makefile structure doesn't make it easy to separate out parts of the
Dan Handley610e7e12018-03-01 18:44:00 +00002775 TF-A for re-use in platform ports, for example if only BL3-1 is required in
2776 a platform port. Also, dependency checking in the Makefile is flawed.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002777
2778- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
2779 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
2780
Paul Beesley32379552019-02-11 17:58:21 +00002781Version 0.2
2782-----------
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002783
2784New features
Paul Beesley32379552019-02-11 17:58:21 +00002785^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002786
2787- First source release.
2788
2789- Code for the PSCI suspend feature is supplied, although this is not enabled
2790 by default since there are known issues (see below).
2791
2792Issues resolved since last release
Paul Beesley32379552019-02-11 17:58:21 +00002793^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002794
2795- The "psci" nodes in the FDTs provided in this release now fully comply
2796 with the recommendations made in the PSCI specification.
2797
2798Known issues
Paul Beesley32379552019-02-11 17:58:21 +00002799^^^^^^^^^^^^
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002800
2801The following is a list of issues which are expected to be fixed in the future
Dan Handley610e7e12018-03-01 18:44:00 +00002802releases of TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002803
2804- The TrustZone Address Space Controller (TZC-400) is not being programmed
2805 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
2806
2807- No support yet for secure world interrupt handling or for switching context
2808 between secure and normal worlds in EL3.
2809
2810- GICv3 support is experimental. The Linux kernel patches to support this are
2811 not widely available. There are known issues with GICv3 initialization in
Dan Handley610e7e12018-03-01 18:44:00 +00002812 TF-A.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002813
2814- Dynamic image loading is not available yet. The current image loader
2815 implementation (used to load BL2 and all subsequent images) has some
2816 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
2817 to loading errors, even if the images should theoretically fit in memory.
2818
2819- Although support for PSCI ``CPU_SUSPEND`` is present, it is not yet stable
2820 and ready for use.
2821
Dan Handley610e7e12018-03-01 18:44:00 +00002822- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` are implemented but have
2823 not been tested.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002824
Dan Handley610e7e12018-03-01 18:44:00 +00002825- The TF-A make files result in all build artifacts being placed in the root
2826 of the project. These should be placed in appropriate sub-directories.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002827
Dan Handley610e7e12018-03-01 18:44:00 +00002828- The compilation of TF-A is not free from compilation warnings. Some of these
2829 warnings have not been investigated yet so they could mask real bugs.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002830
Dan Handley610e7e12018-03-01 18:44:00 +00002831- TF-A currently uses toolchain/system include files like stdio.h. It should
2832 provide versions of these within the project to maintain compatibility
2833 between toolchains/systems.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002834
2835- The PSCI code takes some locks in an incorrect sequence. This may cause
2836 problems with suspend and hotplug in certain conditions.
2837
2838- The Linux kernel used in this release is based on version 3.12-rc4. Using
Dan Handley610e7e12018-03-01 18:44:00 +00002839 this kernel with the TF-A fails to start the file-system as a RAM-disk. It
2840 fails to execute user-space ``init`` from the RAM-disk. As an alternative,
2841 the VirtioBlock mechanism can be used to provide a file-system to the
2842 kernel.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002843
2844--------------
2845
Louis Mayencourt950ef2f2020-03-27 11:49:20 +00002846*Copyright (c) 2013-2020, Arm Limited and Contributors. All rights reserved.*
Douglas Raillardd7c21b72017-06-28 15:23:03 +01002847
David Cunadob1580432018-03-14 17:57:31 +00002848.. _SDEI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf
David Cunado1b796fa2017-07-03 18:59:07 +01002849.. _tf-issue#501: https://github.com/ARM-software/tf-issues/issues/501
2850.. _PR#1002: https://github.com/ARM-software/arm-trusted-firmware/pull/1002#issuecomment-312650193
Paul Beesleyf8640672019-04-12 14:19:42 +01002851.. _mbed TLS releases: https://tls.mbed.org/tech-updates/releases