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