blob: e07516078b721ef280a256ac7d9243ec8e421486 [file] [log] [blame]
Douglas Raillard6f625742017-06-28 15:23:03 +01001ARM Trusted Firmware - version 1.3
2==================================
3
4New features
5------------
6
7- Added support for running Trusted Firmware in AArch32 execution state.
8
9 The PSCI library has been refactored to allow integration with **EL3 Runtime
10 Software**. This is software that is executing at the highest secure
11 privilege which is EL3 in AArch64 or Secure SVC/Monitor mode in AArch32. See
12 `PSCI Integration Guide`_.
13
14 Included is a minimal AArch32 Secure Payload, **SP-MIN**, that illustrates
15 the usage and integration of the PSCI library with EL3 Runtime Software
16 running in AArch32 state.
17
18 Booting to the BL1/BL2 images as well as booting straight to the Secure
19 Payload is supported.
20
21- Improvements to the initialization framework for the PSCI service and ARM
22 Standard Services in general.
23
24 The PSCI service is now initialized as part of ARM Standard Service
25 initialization. This consolidates the initializations of any ARM Standard
26 Service that may be added in the future.
27
28 A new function ``get_arm_std_svc_args()`` is introduced to get arguments
29 corresponding to each standard service and must be implemented by the EL3
30 Runtime Software.
31
32 For PSCI, a new versioned structure ``psci_lib_args_t`` is introduced to
33 initialize the PSCI Library. **Note** this is a compatibility break due to
34 the change in the prototype of ``psci_setup()``.
35
36- To support AArch32 builds of BL1 and BL2, implemented a new, alternative
37 firmware image loading mechanism that adds flexibility.
38
39 The current mechanism has a hard-coded set of images and execution order
40 (BL31, BL32, etc). The new mechanism is data-driven by a list of image
41 descriptors provided by the platform code.
42
43 ARM platforms have been updated to support the new loading mechanism.
44
45 The new mechanism is enabled by a build flag (``LOAD_IMAGE_V2``) which is
46 currently off by default for the AArch64 build.
47
48 **Note** ``TRUSTED_BOARD_BOOT`` is currently not supported when
49 ``LOAD_IMAGE_V2`` is enabled.
50
51- Updated requirements for making contributions to ARM TF.
52
53 Commits now must have a 'Signed-off-by:' field to certify that the
54 contribution has been made under the terms of the
55 `Developer Certificate of Origin`_.
56
57 A signed CLA is no longer required.
58
59 The `Contribution Guide`_ has been updated to reflect this change.
60
61- Introduced Performance Measurement Framework (PMF) which provides support
62 for capturing, storing, dumping and retrieving time-stamps to measure the
63 execution time of critical paths in the firmware. This relies on defining
64 fixed sample points at key places in the code.
65
66- To support the QEMU platform port, imported libfdt v1.4.1 from
67 https://git.kernel.org/cgit/utils/dtc/dtc.git
68
69- Updated PSCI support:
70
71 - Added support for PSCI NODE\_HW\_STATE API for ARM platforms.
72
73 - New optional platform hook, ``pwr_domain_pwr_down_wfi()``, in
74 ``plat_psci_ops`` to enable platforms to perform platform-specific actions
75 needed to enter powerdown, including the 'wfi' invocation.
76
77 - PSCI STAT residency and count functions have been added on ARM platforms
78 by using PMF.
79
80- Enhancements to the translation table library:
81
82 - Limited memory mapping support for region overlaps to only allow regions
83 to overlap that are identity mapped or have the same virtual to physical
84 address offset, and overlap completely but must not cover the same area.
85
86 This limitation will enable future enhancements without having to
87 support complex edge cases that may not be necessary.
88
89 - The initial translation lookup level is now inferred from the virtual
90 address space size. Previously, it was hard-coded.
91
92 - Added support for mapping Normal, Inner Non-cacheable, Outer
93 Non-cacheable memory in the translation table library.
94
95 This can be useful to map a non-cacheable memory region, such as a DMA
96 buffer.
97
98 - Introduced the MT\_EXECUTE/MT\_EXECUTE\_NEVER memory mapping attributes to
99 specify the access permissions for instruction execution of a memory
100 region.
101
102- Enabled support to isolate code and read-only data on separate memory pages,
103 allowing independent access control to be applied to each.
104
105- Enabled SCR\_EL3.SIF (Secure Instruction Fetch) bit in BL1 and BL31 common
106 architectural setup code, preventing fetching instructions from non-secure
107 memory when in secure state.
108
109- Enhancements to FIP support:
110
111 - Replaced ``fip_create`` with ``fiptool`` which provides a more consistent
112 and intuitive interface as well as additional support to remove an image
113 from a FIP file.
114
115 - Enabled printing the SHA256 digest with info command, allowing quick
116 verification of an image within a FIP without having to extract the
117 image and running sha256sum on it.
118
119 - Added support for unpacking the contents of an existing FIP file into
120 the working directory.
121
122 - Aligned command line options for specifying images to use same naming
123 convention as specified by TBBR and already used in cert\_create tool.
124
125- Refactored the TZC-400 driver to also support memory controllers that
126 integrate TZC functionality, for example ARM CoreLink DMC-500. Also added
127 DMC-500 specific support.
128
129- Implemented generic delay timer based on the system generic counter and
130 migrated all platforms to use it.
131
132- Enhanced support for ARM platforms:
133
134 - Updated image loading support to make SCP images (SCP\_BL2 and SCP\_BL2U)
135 optional.
136
137 - Enhanced topology description support to allow multi-cluster topology
138 definitions.
139
140 - Added interconnect abstraction layer to help platform ports select the
141 right interconnect driver, CCI or CCN, for the platform.
142
143 - Added support to allow loading BL31 in the TZC-secured DRAM instead of
144 the default secure SRAM.
145
146 - Added support to use a System Security Control (SSC) Registers Unit
147 enabling ARM TF to be compiled to support multiple ARM platforms and
148 then select one at runtime.
149
150 - Restricted mapping of Trusted ROM in BL1 to what is actually needed by
151 BL1 rather than entire Trusted ROM region.
152
153 - Flash is now mapped as execute-never by default. This increases security
154 by restricting the executable region to what is strictly needed.
155
156- Applied following erratum workarounds for Cortex-A57: 833471, 826977,
157 829520, 828024 and 826974.
158
159- Added support for Mediatek MT6795 platform.
160
161- Added support for QEMU virtualization ARMv8-A target.
162
163- Added support for Rockchip RK3368 and RK3399 platforms.
164
165- Added support for Xilinx Zynq UltraScale+ MPSoC platform.
166
167- Added support for ARM Cortex-A73 MPCore Processor.
168
169- Added support for ARM Cortex-A72 processor.
170
171- Added support for ARM Cortex-A35 processor.
172
173- Added support for ARM Cortex-A32 MPCore Processor.
174
175- Enabled preloaded BL33 alternative boot flow, in which BL2 does not load
176 BL33 from non-volatile storage and BL31 hands execution over to a preloaded
177 BL33. The User Guide has been updated with an example of how to use this
178 option with a bootwrapped kernel.
179
180- Added support to build ARM TF on a Windows-based host machine.
181
182- Updated Trusted Board Boot prototype implementation:
183
184 - Enabled the ability for a production ROM with TBBR enabled to boot test
185 software before a real ROTPK is deployed (e.g. manufacturing mode).
186 Added support to use ROTPK in certificate without verifying against the
187 platform value when ``ROTPK_NOT_DEPLOYED`` bit is set.
188
189 - Added support for non-volatile counter authentication to the
190 Authentication Module to protect against roll-back.
191
192- Updated GICv3 support:
193
194 - Enabled processor power-down and automatic power-on using GICv3.
195
196 - Enabled G1S or G0 interrupts to be configured independently.
197
198 - Changed FVP default interrupt driver to be the GICv3-only driver.
199 **Note** the default build of Trusted Firmware will not be able to boot
200 Linux kernel with GICv2 FDT blob.
201
202 - Enabled wake-up from CPU\_SUSPEND to stand-by by temporarily re-routing
203 interrupts and then restoring after resume.
204
205Issues resolved since last release
206----------------------------------
207
208Known issues
209------------
210
211- The version of the AEMv8 Base FVP used in this release resets the model
212 instead of terminating its execution in response to a shutdown request using
213 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
214 the model.
215
216- Building TF with compiler optimisations disabled (``-O0``) fails.
217
218- ARM TF cannot be built with mbed TLS version v2.3.0 due to build warnings
219 that the ARM TF build system interprets as errors.
220
221- TBBR is not currently supported when running Trusted Firmware in AArch32
222 state.
223
224ARM Trusted Firmware - version 1.2
225==================================
226
227New features
228------------
229
230- The Trusted Board Boot implementation on ARM platforms now conforms to the
231 mandatory requirements of the TBBR specification.
232
233 In particular, the boot process is now guarded by a Trusted Watchdog, which
234 will reset the system in case of an authentication or loading error. On ARM
235 platforms, a secure instance of ARM SP805 is used as the Trusted Watchdog.
236
237 Also, a firmware update process has been implemented. It enables
238 authenticated firmware to update firmware images from external interfaces to
239 SoC Non-Volatile memories. This feature functions even when the current
240 firmware in the system is corrupt or missing; it therefore may be used as
241 a recovery mode.
242
243- Improvements have been made to the Certificate Generation Tool
244 (``cert_create``) as follows.
245
246 - Added support for the Firmware Update process by extending the Chain
247 of Trust definition in the tool to include the Firmware Update
248 certificate and the required extensions.
249
250 - Introduced a new API that allows one to specify command line options in
251 the Chain of Trust description. This makes the declaration of the tool's
252 arguments more flexible and easier to extend.
253
254 - The tool has been reworked to follow a data driven approach, which
255 makes it easier to maintain and extend.
256
257- Extended the FIP tool (``fip_create``) to support the new set of images
258 involved in the Firmware Update process.
259
260- Various memory footprint improvements. In particular:
261
262 - The bakery lock structure for coherent memory has been optimised.
263
264 - The mbed TLS SHA1 functions are not needed, as SHA256 is used to
265 generate the certificate signature. Therefore, they have been compiled
266 out, reducing the memory footprint of BL1 and BL2 by approximately
267 6 KB.
268
269 - On ARM development platforms, each BL stage now individually defines
270 the number of regions that it needs to map in the MMU.
271
272- Added the following new design documents:
273
274 - `Authentication framework`_
275 - `Firmware Update`_
276 - `TF Reset Design`_
277 - `Power Domain Topology Design`_
278
279- Applied the new image terminology to the code base and documentation, as
280 described on the `TF wiki on GitHub`_.
281
282- The build system has been reworked to improve readability and facilitate
283 adding future extensions.
284
285- On ARM standard platforms, BL31 uses the boot console during cold boot
286 but switches to the runtime console for any later logs at runtime. The TSP
287 uses the runtime console for all output.
288
289- Implemented a basic NOR flash driver for ARM platforms. It programs the
290 device using CFI (Common Flash Interface) standard commands.
291
292- Implemented support for booting EL3 payloads on ARM platforms, which
293 reduces the complexity of developing EL3 baremetal code by doing essential
294 baremetal initialization.
295
296- Provided separate drivers for GICv3 and GICv2. These expect the entire
297 software stack to use either GICv2 or GICv3; hybrid GIC software systems
298 are no longer supported and the legacy ARM GIC driver has been deprecated.
299
300- Added support for Juno r1 and r2. A single set of Juno TF binaries can run
301 on Juno r0, r1 and r2 boards. Note that this TF version depends on a Linaro
302 release that does *not* contain Juno r2 support.
303
304- Added support for MediaTek mt8173 platform.
305
306- Implemented a generic driver for ARM CCN IP.
307
308- Major rework of the PSCI implementation.
309
310 - Added framework to handle composite power states.
311
312 - Decoupled the notions of affinity instances (which describes the
313 hierarchical arrangement of cores) and of power domain topology, instead
314 of assuming a one-to-one mapping.
315
316 - Better alignment with version 1.0 of the PSCI specification.
317
318- Added support for the SYSTEM\_SUSPEND PSCI API on ARM platforms. When invoked
319 on the last running core on a supported platform, this puts the system
320 into a low power mode with memory retention.
321
322- Unified the reset handling code as much as possible across BL stages.
323 Also introduced some build options to enable optimization of the reset path
324 on platforms that support it.
325
326- Added a simple delay timer API, as well as an SP804 timer driver, which is
327 enabled on FVP.
328
329- Added support for NVidia Tegra T210 and T132 SoCs.
330
331- Reorganised ARM platforms ports to greatly improve code shareability and
332 facilitate the reuse of some of this code by other platforms.
333
334- Added support for ARM Cortex-A72 processor in the CPU specific framework.
335
336- Provided better error handling. Platform ports can now define their own
337 error handling, for example to perform platform specific bookkeeping or
338 post-error actions.
339
340- Implemented a unified driver for ARM Cache Coherent Interconnects used for
341 both CCI-400 & CCI-500 IPs. ARM platforms ports have been migrated to this
342 common driver. The standalone CCI-400 driver has been deprecated.
343
344Issues resolved since last release
345----------------------------------
346
347- The Trusted Board Boot implementation has been redesigned to provide greater
348 modularity and scalability. See the `Authentication Framework`_ document.
349 All missing mandatory features are now implemented.
350
351- The FVP and Juno ports may now use the hash of the ROTPK stored in the
352 Trusted Key Storage registers to verify the ROTPK. Alternatively, a
353 development public key hash embedded in the BL1 and BL2 binaries might be
354 used instead. The location of the ROTPK is chosen at build-time using the
355 ``ARM_ROTPK_LOCATION`` build option.
356
357- GICv3 is now fully supported and stable.
358
359Known issues
360------------
361
362- The version of the AEMv8 Base FVP used in this release resets the model
363 instead of terminating its execution in response to a shutdown request using
364 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
365 the model.
366
367- While this version has low on-chip RAM requirements, there are further
368 RAM usage enhancements that could be made.
369
370- The upstream documentation could be improved for structural consistency,
371 clarity and completeness. In particular, the design documentation is
372 incomplete for PSCI, the TSP(D) and the Juno platform.
373
374- Building TF with compiler optimisations disabled (``-O0``) fails.
375
376ARM Trusted Firmware - version 1.1
377==================================
378
379New features
380------------
381
382- A prototype implementation of Trusted Board Boot has been added. Boot
383 loader images are verified by BL1 and BL2 during the cold boot path. BL1 and
384 BL2 use the PolarSSL SSL library to verify certificates and images. The
385 OpenSSL library is used to create the X.509 certificates. Support has been
386 added to ``fip_create`` tool to package the certificates in a FIP.
387
388- Support for calling CPU and platform specific reset handlers upon entry into
389 BL3-1 during the cold and warm boot paths has been added. This happens after
390 another Boot ROM ``reset_handler()`` has already run. This enables a developer
391 to perform additional actions or undo actions already performed during the
392 first call of the reset handlers e.g. apply additional errata workarounds.
393
394- Support has been added to demonstrate routing of IRQs to EL3 instead of
395 S-EL1 when execution is in secure world.
396
397- The PSCI implementation now conforms to version 1.0 of the PSCI
398 specification. All the mandatory APIs and selected optional APIs are
399 supported. In particular, support for the ``PSCI_FEATURES`` API has been
400 added. A capability variable is constructed during initialization by
401 examining the ``plat_pm_ops`` and ``spd_pm_ops`` exported by the platform and
402 the Secure Payload Dispatcher. This is used by the PSCI FEATURES function
403 to determine which PSCI APIs are supported by the platform.
404
405- Improvements have been made to the PSCI code as follows.
406
407 - The code has been refactored to remove redundant parameters from
408 internal functions.
409
410 - Changes have been made to the code for PSCI ``CPU_SUSPEND``, ``CPU_ON`` and
411 ``CPU_OFF`` calls to facilitate an early return to the caller in case a
412 failure condition is detected. For example, a PSCI ``CPU_SUSPEND`` call
413 returns ``SUCCESS`` to the caller if a pending interrupt is detected early
414 in the code path.
415
416 - Optional platform APIs have been added to validate the ``power_state`` and
417 ``entrypoint`` parameters early in PSCI ``CPU_ON`` and ``CPU_SUSPEND`` code
418 paths.
419
420 - PSCI migrate APIs have been reworked to invoke the SPD hook to determine
421 the type of Trusted OS and the CPU it is resident on (if
422 applicable). Also, during a PSCI ``MIGRATE`` call, the SPD hook to migrate
423 the Trusted OS is invoked.
424
425- It is now possible to build Trusted Firmware without marking at least an
426 extra page of memory as coherent. The build flag ``USE_COHERENT_MEM`` can be
427 used to choose between the two implementations. This has been made possible
428 through these changes.
429
430 - An implementation of Bakery locks, where the locks are not allocated in
431 coherent memory has been added.
432
433 - Memory which was previously marked as coherent is now kept coherent
434 through the use of software cache maintenance operations.
435
436 Approximately, 4K worth of memory is saved for each boot loader stage when
437 ``USE_COHERENT_MEM=0``. Enabling this option increases the latencies
438 associated with acquire and release of locks. It also requires changes to
439 the platform ports.
440
441- It is now possible to specify the name of the FIP at build time by defining
442 the ``FIP_NAME`` variable.
443
444- Issues with depedencies on the 'fiptool' makefile target have been
445 rectified. The ``fip_create`` tool is now rebuilt whenever its source files
446 change.
447
448- The BL3-1 runtime console is now also used as the crash console. The crash
449 console is changed to SoC UART0 (UART2) from the previous FPGA UART0 (UART0)
450 on Juno. In FVP, it is changed from UART0 to UART1.
451
452- CPU errata workarounds are applied only when the revision and part number
453 match. This behaviour has been made consistent across the debug and release
454 builds. The debug build additionally prints a warning if a mismatch is
455 detected.
456
457- It is now possible to issue cache maintenance operations by set/way for a
458 particular level of data cache. Levels 1-3 are currently supported.
459
460- The following improvements have been made to the FVP port.
461
462 - The build option ``FVP_SHARED_DATA_LOCATION`` which allowed relocation of
463 shared data into the Trusted DRAM has been deprecated. Shared data is
464 now always located at the base of Trusted SRAM.
465
466 - BL2 Translation tables have been updated to map only the region of
467 DRAM which is accessible to normal world. This is the region of the 2GB
468 DDR-DRAM memory at 0x80000000 excluding the top 16MB. The top 16MB is
469 accessible to only the secure world.
470
471 - BL3-2 can now reside in the top 16MB of DRAM which is accessible only to
472 the secure world. This can be done by setting the build flag
473 ``FVP_TSP_RAM_LOCATION`` to the value ``dram``.
474
475- Separate transation tables are created for each boot loader image. The
476 ``IMAGE_BLx`` build options are used to do this. This allows each stage to
477 create mappings only for areas in the memory map that it needs.
478
479- A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been
480 added. Details of using it with ARM Trusted Firmware can be found in
481 `OP-TEE Dispatcher`_
482
483Issues resolved since last release
484----------------------------------
485
486- The Juno port has been aligned with the FVP port as follows.
487
488 - Support for reclaiming all BL1 RW memory and BL2 memory by overlaying
489 the BL3-1/BL3-2 NOBITS sections on top of them has been added to the
490 Juno port.
491
492 - The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured
493 using the TZC-400 controller to be accessible only to the secure world.
494
495 - The ARM GIC driver is used to configure the GIC-400 instead of using a
496 GIC driver private to the Juno port.
497
498 - PSCI ``CPU_SUSPEND`` calls that target a standby state are now supported.
499
500 - The TZC-400 driver is used to configure the controller instead of direct
501 accesses to the registers.
502
503- The Linux kernel version referred to in the user guide has DVFS and HMP
504 support enabled.
505
506- DS-5 v5.19 did not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
507 CADI server mode. This issue is not seen with DS-5 v5.20 and Version 6.2 of
508 the Cortex-A57-A53 Base FVPs.
509
510Known issues
511------------
512
513- The Trusted Board Boot implementation is a prototype. There are issues with
514 the modularity and scalability of the design. Support for a Trusted
515 Watchdog, firmware update mechanism, recovery images and Trusted debug is
516 absent. These issues will be addressed in future releases.
517
518- The FVP and Juno ports do not use the hash of the ROTPK stored in the
519 Trusted Key Storage registers to verify the ROTPK in the
520 ``plat_match_rotpk()`` function. This prevents the correct establishment of
521 the Chain of Trust at the first step in the Trusted Board Boot process.
522
523- The version of the AEMv8 Base FVP used in this release resets the model
524 instead of terminating its execution in response to a shutdown request using
525 the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
526 the model.
527
528- GICv3 support is experimental. There are known issues with GICv3
529 initialization in the ARM Trusted Firmware.
530
531- While this version greatly reduces the on-chip RAM requirements, there are
532 further RAM usage enhancements that could be made.
533
534- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
535 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
536
537- The Juno-specific firmware design documentation is incomplete.
538
539ARM Trusted Firmware - version 1.0
540==================================
541
542New features
543------------
544
545- It is now possible to map higher physical addresses using non-flat virtual
546 to physical address mappings in the MMU setup.
547
548- Wider use is now made of the per-CPU data cache in BL3-1 to store:
549
550 - Pointers to the non-secure and secure security state contexts.
551
552 - A pointer to the CPU-specific operations.
553
554 - A pointer to PSCI specific information (for example the current power
555 state).
556
557 - A crash reporting buffer.
558
559- The following RAM usage improvements result in a BL3-1 RAM usage reduction
560 from 96KB to 56KB (for FVP with TSPD), and a total RAM usage reduction
561 across all images from 208KB to 88KB, compared to the previous release.
562
563 - Removed the separate ``early_exception`` vectors from BL3-1 (2KB code size
564 saving).
565
566 - Removed NSRAM from the FVP memory map, allowing the removal of one
567 (4KB) translation table.
568
569 - Eliminated the internal ``psci_suspend_context`` array, saving 2KB.
570
571 - Correctly dimensioned the PSCI ``aff_map_node`` array, saving 1.5KB in the
572 FVP port.
573
574 - Removed calling CPU mpidr from the bakery lock API, saving 160 bytes.
575
576 - Removed current CPU mpidr from PSCI common code, saving 160 bytes.
577
578 - Inlined the mmio accessor functions, saving 360 bytes.
579
580 - Fully reclaimed all BL1 RW memory and BL2 memory on the FVP port by
581 overlaying the BL3-1/BL3-2 NOBITS sections on top of these at runtime.
582
583 - Made storing the FP register context optional, saving 0.5KB per context
584 (8KB on the FVP port, with TSPD enabled and running on 8 CPUs).
585
586 - Implemented a leaner ``tf_printf()`` function, allowing the stack to be
587 greatly reduced.
588
589 - Removed coherent stacks from the codebase. Stacks allocated in normal
590 memory are now used before and after the MMU is enabled. This saves 768
591 bytes per CPU in BL3-1.
592
593 - Reworked the crash reporting in BL3-1 to use less stack.
594
595 - Optimized the EL3 register state stored in the ``cpu_context`` structure
596 so that registers that do not change during normal execution are
597 re-initialized each time during cold/warm boot, rather than restored
598 from memory. This saves about 1.2KB.
599
600 - As a result of some of the above, reduced the runtime stack size in all
601 BL images. For BL3-1, this saves 1KB per CPU.
602
603- PSCI SMC handler improvements to correctly handle calls from secure states
604 and from AArch32.
605
606- CPU contexts are now initialized from the ``entry_point_info``. BL3-1 fully
607 determines the exception level to use for the non-trusted firmware (BL3-3)
608 based on the SPSR value provided by the BL2 platform code (or otherwise
609 provided to BL3-1). This allows platform code to directly run non-trusted
610 firmware payloads at either EL2 or EL1 without requiring an EL2 stub or OS
611 loader.
612
613- Code refactoring improvements:
614
615 - Refactored ``fvp_config`` into a common platform header.
616
617 - Refactored the fvp gic code to be a generic driver that no longer has an
618 explicit dependency on platform code.
619
620 - Refactored the CCI-400 driver to not have dependency on platform code.
621
622 - Simplified the IO driver so it's no longer necessary to call ``io_init()``
623 and moved all the IO storage framework code to one place.
624
625 - Simplified the interface the the TZC-400 driver.
626
627 - Clarified the platform porting interface to the TSP.
628
629 - Reworked the TSPD setup code to support the alternate BL3-2
630 intialization flow where BL3-1 generic code hands control to BL3-2,
631 rather than expecting the TSPD to hand control directly to BL3-2.
632
633 - Considerable rework to PSCI generic code to support CPU specific
634 operations.
635
636- Improved console log output, by:
637
638 - Adding the concept of debug log levels.
639
640 - Rationalizing the existing debug messages and adding new ones.
641
642 - Printing out the version of each BL stage at runtime.
643
644 - Adding support for printing console output from assembler code,
645 including when a crash occurs before the C runtime is initialized.
646
647- Moved up to the latest versions of the FVPs, toolchain, EDK2, kernel, Linaro
648 file system and DS-5.
649
650- On the FVP port, made the use of the Trusted DRAM region optional at build
651 time (off by default). Normal platforms will not have such a "ready-to-use"
652 DRAM area so it is not a good example to use it.
653
654- Added support for PSCI ``SYSTEM_OFF`` and ``SYSTEM_RESET`` APIs.
655
656- Added support for CPU specific reset sequences, power down sequences and
657 register dumping during crash reporting. The CPU specific reset sequences
658 include support for errata workarounds.
659
660- Merged the Juno port into the master branch. Added support for CPU hotplug
661 and CPU idle. Updated the user guide to describe how to build and run on the
662 Juno platform.
663
664Issues resolved since last release
665----------------------------------
666
667- Removed the concept of top/bottom image loading. The image loader now
668 automatically detects the position of the image inside the current memory
669 layout and updates the layout to minimize fragementation. This resolves the
670 image loader limitations of previously releases. There are currently no
671 plans to support dynamic image loading.
672
673- CPU idle now works on the publicized version of the Foundation FVP.
674
675- All known issues relating to the compiler version used have now been
676 resolved. This TF version uses Linaro toolchain 14.07 (based on GCC 4.9).
677
678Known issues
679------------
680
681- GICv3 support is experimental. The Linux kernel patches to support this are
682 not widely available. There are known issues with GICv3 initialization in
683 the ARM Trusted Firmware.
684
685- While this version greatly reduces the on-chip RAM requirements, there are
686 further RAM usage enhancements that could be made.
687
688- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
689 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
690
691- The Juno-specific firmware design documentation is incomplete.
692
693- Some recent enhancements to the FVP port have not yet been translated into
694 the Juno port. These will be tracked via the tf-issues project.
695
696- The Linux kernel version referred to in the user guide has DVFS and HMP
697 support disabled due to some known instabilities at the time of this
698 release. A future kernel version will re-enable these features.
699
700- DS-5 v5.19 does not detect Version 5.8 of the Cortex-A57-A53 Base FVPs in
701 CADI server mode. This is because the ``<SimName>`` reported by the FVP in
702 this version has changed. For example, for the Cortex-A57x4-A53x4 Base FVP,
703 the ``<SimName>`` reported by the FVP is ``FVP_Base_Cortex_A57x4_A53x4``, while
704 DS-5 expects it to be ``FVP_Base_A57x4_A53x4``.
705
706 The temporary fix to this problem is to change the name of the FVP in
707 ``sw/debugger/configdb/Boards/ARM FVP/Base_A57x4_A53x4/cadi_config.xml``.
708 Change the following line:
709
710 ::
711
712 <SimName>System Generator:FVP_Base_A57x4_A53x4</SimName>
713
714 to
715 System Generator:FVP\_Base\_Cortex-A57x4\_A53x4
716
717 A similar change can be made to the other Cortex-A57-A53 Base FVP variants.
718
719ARM Trusted Firmware - version 0.4
720==================================
721
722New features
723------------
724
725- Makefile improvements:
726
727 - Improved dependency checking when building.
728
729 - Removed ``dump`` target (build now always produces dump files).
730
731 - Enabled platform ports to optionally make use of parts of the Trusted
732 Firmware (e.g. BL3-1 only), rather than being forced to use all parts.
733 Also made the ``fip`` target optional.
734
735 - Specified the full path to source files and removed use of the ``vpath``
736 keyword.
737
738- Provided translation table library code for potential re-use by platforms
739 other than the FVPs.
740
741- Moved architectural timer setup to platform-specific code.
742
743- Added standby state support to PSCI cpu\_suspend implementation.
744
745- SRAM usage improvements:
746
747 - Started using the ``-ffunction-sections``, ``-fdata-sections`` and
748 ``--gc-sections`` compiler/linker options to remove unused code and data
749 from the images. Previously, all common functions were being built into
750 all binary images, whether or not they were actually used.
751
752 - Placed all assembler functions in their own section to allow more unused
753 functions to be removed from images.
754
755 - Updated BL1 and BL2 to use a single coherent stack each, rather than one
756 per CPU.
757
758 - Changed variables that were unnecessarily declared and initialized as
759 non-const (i.e. in the .data section) so they are either uninitialized
760 (zero init) or const.
761
762- Moved the Test Secure-EL1 Payload (BL3-2) to execute in Trusted SRAM by
763 default. The option for it to run in Trusted DRAM remains.
764
765- Implemented a TrustZone Address Space Controller (TZC-400) driver. A
766 default configuration is provided for the Base FVPs. This means the model
767 parameter ``-C bp.secure_memory=1`` is now supported.
768
769- Started saving the PSCI cpu\_suspend 'power\_state' parameter prior to
770 suspending a CPU. This allows platforms that implement multiple power-down
771 states at the same affinity level to identify a specific state.
772
773- Refactored the entire codebase to reduce the amount of nesting in header
774 files and to make the use of system/user includes more consistent. Also
775 split platform.h to separate out the platform porting declarations from the
776 required platform porting definitions and the definitions/declarations
777 specific to the platform port.
778
779- Optimized the data cache clean/invalidate operations.
780
781- Improved the BL3-1 unhandled exception handling and reporting. Unhandled
782 exceptions now result in a dump of registers to the console.
783
784- Major rework to the handover interface between BL stages, in particular the
785 interface to BL3-1. The interface now conforms to a specification and is
786 more future proof.
787
788- Added support for optionally making the BL3-1 entrypoint a reset handler
789 (instead of BL1). This allows platforms with an alternative image loading
790 architecture to re-use BL3-1 with fewer modifications to generic code.
791
792- Reserved some DDR DRAM for secure use on FVP platforms to avoid future
793 compatibility problems with non-secure software.
794
795- Added support for secure interrupts targeting the Secure-EL1 Payload (SP)
796 (using GICv2 routing only). Demonstrated this working by adding an interrupt
797 target and supporting test code to the TSP. Also demonstrated non-secure
798 interrupt handling during TSP processing.
799
800Issues resolved since last release
801----------------------------------
802
803- Now support use of the model parameter ``-C bp.secure_memory=1`` in the Base
804 FVPs (see **New features**).
805
806- Support for secure world interrupt handling now available (see **New
807 features**).
808
809- Made enough SRAM savings (see **New features**) to enable the Test Secure-EL1
810 Payload (BL3-2) to execute in Trusted SRAM by default.
811
812- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
813 14.04) now correctly reports progress in the console.
814
815- Improved the Makefile structure to make it easier to separate out parts of
816 the Trusted Firmware for re-use in platform ports. Also, improved target
817 dependency checking.
818
819Known issues
820------------
821
822- GICv3 support is experimental. The Linux kernel patches to support this are
823 not widely available. There are known issues with GICv3 initialization in
824 the ARM Trusted Firmware.
825
826- Dynamic image loading is not available yet. The current image loader
827 implementation (used to load BL2 and all subsequent images) has some
828 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
829 to loading errors, even if the images should theoretically fit in memory.
830
831- The ARM Trusted Firmware still uses too much on-chip Trusted SRAM. A number
832 of RAM usage enhancements have been identified to rectify this situation.
833
834- CPU idle does not work on the advertised version of the Foundation FVP.
835 Some FVP fixes are required that are not available externally at the time
836 of writing. This can be worked around by disabling CPU idle in the Linux
837 kernel.
838
839- Various bugs in ARM Trusted Firmware, UEFI and the Linux kernel have been
840 observed when using Linaro toolchain versions later than 13.11. Although
841 most of these have been fixed, some remain at the time of writing. These
842 mainly seem to relate to a subtle change in the way the compiler converts
843 between 64-bit and 32-bit values (e.g. during casting operations), which
844 reveals previously hidden bugs in client code.
845
846- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
847 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
848
849ARM Trusted Firmware - version 0.3
850==================================
851
852New features
853------------
854
855- Support for Foundation FVP Version 2.0 added.
856 The documented UEFI configuration disables some devices that are unavailable
857 in the Foundation FVP, including MMC and CLCD. The resultant UEFI binary can
858 be used on the AEMv8 and Cortex-A57-A53 Base FVPs, as well as the Foundation
859 FVP.
860
861 NOTE: The software will not work on Version 1.0 of the Foundation FVP.
862
863- Enabled third party contributions. Added a new contributing.md containing
864 instructions for how to contribute and updated copyright text in all files
865 to acknowledge contributors.
866
867- The PSCI CPU\_SUSPEND API has been stabilised to the extent where it can be
868 used for entry into power down states with the following restrictions:
869
870 - Entry into standby states is not supported.
871 - The API is only supported on the AEMv8 and Cortex-A57-A53 Base FVPs.
872
873- The PSCI AFFINITY\_INFO api has undergone limited testing on the Base FVPs to
874 allow experimental use.
875
876- Required C library and runtime header files are now included locally in ARM
877 Trusted Firmware instead of depending on the toolchain standard include
878 paths. The local implementation has been cleaned up and reduced in scope.
879
880- Added I/O abstraction framework, primarily to allow generic code to load
881 images in a platform-independent way. The existing image loading code has
882 been reworked to use the new framework. Semi-hosting and NOR flash I/O
883 drivers are provided.
884
885- Introduced Firmware Image Package (FIP) handling code and tools. A FIP
886 combines multiple firmware images with a Table of Contents (ToC) into a
887 single binary image. The new FIP driver is another type of I/O driver. The
888 Makefile builds a FIP by default and the FVP platform code expect to load a
889 FIP from NOR flash, although some support for image loading using semi-
890 hosting is retained.
891
892 NOTE: Building a FIP by default is a non-backwards-compatible change.
893
894 NOTE: Generic BL2 code now loads a BL3-3 (non-trusted firmware) image into
895 DRAM instead of expecting this to be pre-loaded at known location. This is
896 also a non-backwards-compatible change.
897
898 NOTE: Some non-trusted firmware (e.g. UEFI) will need to be rebuilt so that
899 it knows the new location to execute from and no longer needs to copy
900 particular code modules to DRAM itself.
901
902- Reworked BL2 to BL3-1 handover interface. A new composite structure
903 (bl31\_args) holds the superset of information that needs to be passed from
904 BL2 to BL3-1, including information on how handover execution control to
905 BL3-2 (if present) and BL3-3 (non-trusted firmware).
906
907- Added library support for CPU context management, allowing the saving and
908 restoring of
909
910 - Shared system registers between Secure-EL1 and EL1.
911 - VFP registers.
912 - Essential EL3 system registers.
913
914- Added a framework for implementing EL3 runtime services. Reworked the PSCI
915 implementation to be one such runtime service.
916
917- Reworked the exception handling logic, making use of both SP\_EL0 and SP\_EL3
918 stack pointers for determining the type of exception, managing general
919 purpose and system register context on exception entry/exit, and handling
920 SMCs. SMCs are directed to the correct EL3 runtime service.
921
922- Added support for a Test Secure-EL1 Payload (TSP) and a corresponding
923 Dispatcher (TSPD), which is loaded as an EL3 runtime service. The TSPD
924 implements Secure Monitor functionality such as world switching and
925 EL1 context management, and is responsible for communication with the TSP.
926 NOTE: The TSPD does not yet contain support for secure world interrupts.
927 NOTE: The TSP/TSPD is not built by default.
928
929Issues resolved since last release
930----------------------------------
931
932- Support has been added for switching context between secure and normal
933 worlds in EL3.
934
935- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` have now been tested (to
936 a limited extent).
937
938- The ARM Trusted Firmware build artifacts are now placed in the ``./build``
939 directory and sub-directories instead of being placed in the root of the
940 project.
941
942- The ARM Trusted Firmware is now free from build warnings. Build warnings
943 are now treated as errors.
944
945- The ARM Trusted Firmware now provides C library support locally within the
946 project to maintain compatibility between toolchains/systems.
947
948- The PSCI locking code has been reworked so it no longer takes locks in an
949 incorrect sequence.
950
951- The RAM-disk method of loading a Linux file-system has been confirmed to
952 work with the ARM Trusted Firmware and Linux kernel version (based on
953 version 3.13) used in this release, for both Foundation and Base FVPs.
954
955Known issues
956------------
957
958The following is a list of issues which are expected to be fixed in the future
959releases of the ARM Trusted Firmware.
960
961- The TrustZone Address Space Controller (TZC-400) is not being programmed
962 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
963
964- No support yet for secure world interrupt handling.
965
966- GICv3 support is experimental. The Linux kernel patches to support this are
967 not widely available. There are known issues with GICv3 initialization in
968 the ARM Trusted Firmware.
969
970- Dynamic image loading is not available yet. The current image loader
971 implementation (used to load BL2 and all subsequent images) has some
972 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
973 to loading errors, even if the images should theoretically fit in memory.
974
975- The ARM Trusted Firmware uses too much on-chip Trusted SRAM. Currently the
976 Test Secure-EL1 Payload (BL3-2) executes in Trusted DRAM since there is not
977 enough SRAM. A number of RAM usage enhancements have been identified to
978 rectify this situation.
979
980- CPU idle does not work on the advertised version of the Foundation FVP.
981 Some FVP fixes are required that are not available externally at the time
982 of writing.
983
984- Various bugs in ARM Trusted Firmware, UEFI and the Linux kernel have been
985 observed when using Linaro toolchain versions later than 13.11. Although
986 most of these have been fixed, some remain at the time of writing. These
987 mainly seem to relate to a subtle change in the way the compiler converts
988 between 64-bit and 32-bit values (e.g. during casting operations), which
989 reveals previously hidden bugs in client code.
990
991- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
992 14.01) does not report progress correctly in the console. It only seems to
993 produce error output, not standard output. It otherwise appears to function
994 correctly. Other filesystem versions on the same software stack do not
995 exhibit the problem.
996
997- The Makefile structure doesn't make it easy to separate out parts of the
998 Trusted Firmware for re-use in platform ports, for example if only BL3-1 is
999 required in a platform port. Also, dependency checking in the Makefile is
1000 flawed.
1001
1002- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
1003 its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
1004
1005ARM Trusted Firmware - version 0.2
1006==================================
1007
1008New features
1009------------
1010
1011- First source release.
1012
1013- Code for the PSCI suspend feature is supplied, although this is not enabled
1014 by default since there are known issues (see below).
1015
1016Issues resolved since last release
1017----------------------------------
1018
1019- The "psci" nodes in the FDTs provided in this release now fully comply
1020 with the recommendations made in the PSCI specification.
1021
1022Known issues
1023------------
1024
1025The following is a list of issues which are expected to be fixed in the future
1026releases of the ARM Trusted Firmware.
1027
1028- The TrustZone Address Space Controller (TZC-400) is not being programmed
1029 yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
1030
1031- No support yet for secure world interrupt handling or for switching context
1032 between secure and normal worlds in EL3.
1033
1034- GICv3 support is experimental. The Linux kernel patches to support this are
1035 not widely available. There are known issues with GICv3 initialization in
1036 the ARM Trusted Firmware.
1037
1038- Dynamic image loading is not available yet. The current image loader
1039 implementation (used to load BL2 and all subsequent images) has some
1040 limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
1041 to loading errors, even if the images should theoretically fit in memory.
1042
1043- Although support for PSCI ``CPU_SUSPEND`` is present, it is not yet stable
1044 and ready for use.
1045
1046- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` are implemented but have not
1047 been tested.
1048
1049- The ARM Trusted Firmware make files result in all build artifacts being
1050 placed in the root of the project. These should be placed in appropriate
1051 sub-directories.
1052
1053- The compilation of ARM Trusted Firmware is not free from compilation
1054 warnings. Some of these warnings have not been investigated yet so they
1055 could mask real bugs.
1056
1057- The ARM Trusted Firmware currently uses toolchain/system include files like
1058 stdio.h. It should provide versions of these within the project to maintain
1059 compatibility between toolchains/systems.
1060
1061- The PSCI code takes some locks in an incorrect sequence. This may cause
1062 problems with suspend and hotplug in certain conditions.
1063
1064- The Linux kernel used in this release is based on version 3.12-rc4. Using
1065 this kernel with the ARM Trusted Firmware fails to start the file-system as
1066 a RAM-disk. It fails to execute user-space ``init`` from the RAM-disk. As an
1067 alternative, the VirtioBlock mechanism can be used to provide a file-system
1068 to the kernel.
1069
1070--------------
1071
1072*Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.*
1073
1074.. _PSCI Integration Guide: psci-lib-integration-guide.rst
1075.. _Developer Certificate of Origin: ../dco.txt
1076.. _Contribution Guide: ../contributing.rst
1077.. _Authentication framework: auth-framework.rst
1078.. _Firmware Update: firmware-update.rst
1079.. _TF Reset Design: reset-design.rst
1080.. _Power Domain Topology Design: psci-pd-tree.rst
1081.. _TF wiki on GitHub: https://github.com/ARM-software/arm-trusted-firmware/wiki/ARM-Trusted-Firmware-Image-Terminology
1082.. _Authentication Framework: auth-framework.rst
1083.. _OP-TEE Dispatcher: optee-dispatcher.rst