1ARM Trusted Firmware - version 1.3 2================================== 3 4ARM Trusted Firmware provides a reference implementation of secure world 5software for `ARMv8-A`_, including a `Secure Monitor`_ executing at 6Exception Level 3 (EL3). It implements various ARM interface standards, such as 7the Power State Coordination Interface (`PSCI`_), Trusted Board Boot Requirements 8(TBBR, ARM DEN0006C-1) and `SMC Calling Convention`_. As far as possible 9the code is designed for reuse or porting to other ARMv8-A model and hardware 10platforms. 11 12ARM will continue development in collaboration with interested parties to 13provide a full reference implementation of PSCI, TBBR and Secure Monitor code 14to the benefit of all developers working with ARMv8-A TrustZone technology. 15 16License 17------- 18 19The software is provided under a BSD-3-Clause `license`_. Contributions to this 20project are accepted under the same license with developer sign-off as 21described in the `Contributing Guidelines`_. 22 23This project contains code from other projects as listed below. The original 24license text is included in those source files. 25 26- The stdlib source code is derived from FreeBSD code. 27 28- The libfdt source code is dual licensed. It is used by this project under 29 the terms of the BSD-2-Clause license. 30 31This Release 32------------ 33 34This release provides a suitable starting point for productization of secure 35world boot and runtime firmware, executing in either the AArch32 or AArch64 36execution state. 37 38Users are encouraged to do their own security validation, including penetration 39testing, on any secure world code derived from ARM Trusted Firmware. 40 41Functionality 42~~~~~~~~~~~~~ 43 44- Initialization of the secure world (for example, exception vectors, control 45 registers, interrupt controller and interrupts for the platform), before 46 transitioning into the normal world at the Exception Level and Register 47 Width specified by the platform. 48 49- Library support for CPU specific reset and power down sequences. This 50 includes support for errata workarounds. 51 52- Drivers for both versions 2.0 and 3.0 of the ARM Generic Interrupt 53 Controller specifications (GICv2 and GICv3). The latter also enables GICv3 54 hardware systems that do not contain legacy GICv2 support. 55 56- Drivers to enable standard initialization of ARM System IP, for example 57 Cache Coherent Interconnect (CCI), Cache Coherent Network (CCN), Network 58 Interconnect (NIC) and TrustZone Controller (TZC). 59 60- SMC (Secure Monitor Call) handling, conforming to the 61 `SMC Calling Convention`_ using an EL3 runtime services framework. 62 63- `PSCI`_ library support for the Secondary CPU Boot, CPU Hotplug, CPU Idle 64 and System Shutdown/Reset/Suspend use-cases. 65 This library is pre-integrated with the provided AArch64 EL3 Runtime 66 Software, and is also suitable for integration into other EL3 Runtime 67 Software. 68 69- A minimal AArch32 Secure Payload to demonstrate `PSCI`_ library integration 70 on platforms with AArch32 EL3 Runtime Software. 71 72- Secure Monitor library code such as world switching, EL1 context management 73 and interrupt routing. 74 When using the provided AArch64 EL3 Runtime Software, this must be 75 integrated with a Secure-EL1 Payload Dispatcher (SPD) component to 76 customize the interaction with a Secure-EL1 Payload (SP), for example a 77 Secure OS. 78 79- A Test Secure-EL1 Payload and Dispatcher to demonstrate AArch64 Secure 80 Monitor functionality and Secure-EL1 interaction with PSCI. 81 82- AArch64 SPDs for the `OP-TEE Secure OS`_ and `NVidia Trusted Little Kernel`_. 83 84- A Trusted Board Boot implementation, conforming to all mandatory TBBR 85 requirements. This includes image authentication using certificates, a 86 Firmware Update (or recovery mode) boot flow, and packaging of the various 87 firmware images into a Firmware Image Package (FIP) to be loaded from 88 non-volatile storage. 89 The TBBR implementation is currently only supported in the AArch64 build. 90 91- Support for alternative boot flows. Some platforms have their own boot 92 firmware and only require the AArch64 EL3 Runtime Software provided by this 93 project. Other platforms require minimal initialization before booting 94 into an arbitrary EL3 payload. 95 96For a full description of functionality and implementation details, please 97see the `Firmware Design`_ and supporting documentation. The `Change Log`_ 98provides details of changes made since the last release. 99 100Platforms 101~~~~~~~~~ 102 103The AArch64 build of this release has been tested on variants r0, r1 and r2 104of the `Juno ARM Development Platform`_ with `Linaro Release 16.06`_. 105 106The AArch64 build of this release has been tested on the following ARM 107`FVP`_\ s (64-bit host machine only, with `Linaro Release 16.06`_): 108 109- ``Foundation_Platform`` (Version 10.1, Build 10.1.32) 110- ``FVP_Base_AEMv8A-AEMv8A`` (Version 7.7, Build 0.8.7701) 111- ``FVP_Base_Cortex-A57x4-A53x4`` (Version 7.7, Build 0.8.7701) 112- ``FVP_Base_Cortex-A57x1-A53x1`` (Version 7.7, Build 0.8.7701) 113- ``FVP_Base_Cortex-A57x2-A53x4`` (Version 7.7, Build 0.8.7701) 114 115The AArch32 build of this release has been tested on the following ARM 116`FVP`_\ s (64-bit host machine only, with `Linaro Release 16.06`_): 117 118- ``FVP_Base_AEMv8A-AEMv8A`` (Version 7.7, Build 0.8.7701) 119- ``FVP_Base_Cortex-A32x4`` (Version 10.1, Build 10.1.32) 120 121The Foundation FVP can be downloaded free of charge. The Base FVPs can be 122licensed from ARM: see `www.arm.com/fvp`_. 123 124This release also contains the following platform support: 125 126- MediaTek MT6795 and MT8173 SoCs 127- NVidia T210 and T132 SoCs 128- QEMU emulator 129- RockChip RK3368 and RK3399 SoCs 130- Xilinx Zynq UltraScale + MPSoC 131 132Still to Come 133~~~~~~~~~~~~~ 134 135- AArch32 TBBR support and ongoing TBBR alignment. 136 137- More platform support. 138 139- Ongoing support for new architectural features, CPUs and System IP. 140 141- Ongoing `PSCI`_ alignment and feature support. 142 143- Ongoing security hardening, optimization and quality improvements. 144 145For a full list of detailed issues in the current code, please see the 146`Change Log`_ and the `GitHub issue tracker`_. 147 148Getting Started 149--------------- 150 151Get the Trusted Firmware source code from 152`GitHub`_. 153 154See the `User Guide`_ for instructions on how to install, build and use 155the Trusted Firmware with the ARM `FVP`_\ s. 156 157See the `Firmware Design`_ for information on how the ARM Trusted Firmware works. 158 159See the `Porting Guide`_ as well for information about how to use this 160software on another ARMv8-A platform. 161 162See the `Contributing Guidelines`_ for information on how to contribute to this 163project and the `Acknowledgments`_ file for a list of contributors to the 164project. 165 166Feedback and support 167~~~~~~~~~~~~~~~~~~~~ 168 169ARM welcomes any feedback on the Trusted Firmware. Please send feedback using 170the `GitHub issue tracker`_. 171 172ARM licensees may contact ARM directly via their partner managers. 173 174-------------- 175 176*Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.* 177 178.. _ARMv8-A: http://www.arm.com/products/processors/armv8-architecture.php 179.. _Secure Monitor: http://www.arm.com/products/processors/technologies/trustzone/tee-smc.php 180.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf 181.. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html 182.. _license: ./license.rst 183.. _Contributing Guidelines: ./contributing.rst 184.. _OP-TEE Secure OS: https://github.com/OP-TEE/optee_os 185.. _NVidia Trusted Little Kernel: http://nv-tegra.nvidia.com/gitweb/?p=3rdparty/ote_partner/tlk.git;a=summary 186.. _Firmware Design: ./docs/firmware-design.rst 187.. _Change Log: ./docs/change-log.rst 188.. _Juno ARM Development Platform: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php 189.. _Linaro Release 16.06: https://community.arm.com/docs/DOC-10952#jive_content_id_Linaro_Release_1606 190.. _FVP: http://www.arm.com/fvp 191.. _www.arm.com/fvp: http://www.arm.com/fvp 192.. _GitHub issue tracker: https://github.com/ARM-software/tf-issues/issues 193.. _GitHub: https://www.github.com/ARM-software/arm-trusted-firmware 194.. _User Guide: ./docs/user-guide.rst 195.. _Porting Guide: ./docs/porting-guide.rst 196.. _Acknowledgments: ./acknowledgements.rst 197