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