14bf3349bSDan HandleyARM Trusted Firmware - version 1.4 26f625747SDouglas Raillard================================== 36f625747SDouglas Raillard 46f625747SDouglas RaillardARM Trusted Firmware provides a reference implementation of secure world 56f625747SDouglas Raillardsoftware for `ARMv8-A`_, including a `Secure Monitor`_ executing at 64bf3349bSDan HandleyException Level 3 (EL3). It implements various ARM interface standards, such as: 74bf3349bSDan Handley 84bf3349bSDan Handley- The `Power State Coordination Interface (PSCI)`_ 94bf3349bSDan Handley- Trusted Board Boot Requirements (TBBR, ARM DEN0006C-1) 104bf3349bSDan Handley- `SMC Calling Convention`_ 114bf3349bSDan Handley- `System Control and Management Interface`_ 124bf3349bSDan Handley 134bf3349bSDan HandleyAs far as possible the code is designed for reuse or porting to other ARMv8-A 144bf3349bSDan Handleymodel and hardware platforms. 156f625747SDouglas Raillard 166f625747SDouglas RaillardARM will continue development in collaboration with interested parties to 174bf3349bSDan Handleyprovide a full reference implementation of Secure Monitor code and ARM standards 186f625747SDouglas Raillardto the benefit of all developers working with ARMv8-A TrustZone technology. 196f625747SDouglas Raillard 206f625747SDouglas RaillardLicense 216f625747SDouglas Raillard------- 226f625747SDouglas Raillard 236f625747SDouglas RaillardThe software is provided under a BSD-3-Clause `license`_. Contributions to this 246f625747SDouglas Raillardproject are accepted under the same license with developer sign-off as 256f625747SDouglas Raillarddescribed in the `Contributing Guidelines`_. 266f625747SDouglas Raillard 276f625747SDouglas RaillardThis project contains code from other projects as listed below. The original 286f625747SDouglas Raillardlicense text is included in those source files. 296f625747SDouglas Raillard 30*bbd90710SDan Handley- The stdlib source code is derived from FreeBSD code, which uses various 31*bbd90710SDan Handley BSD licenses, including BSD-3-Clause and BSD-2-Clause. 326f625747SDouglas Raillard 336f625747SDouglas Raillard- The libfdt source code is dual licensed. It is used by this project under 346f625747SDouglas Raillard the terms of the BSD-2-Clause license. 356f625747SDouglas Raillard 364bf3349bSDan Handley- The LLVM compiler-rt source code is dual licensed. It is used by this 37*bbd90710SDan Handley project under the terms of the NCSA license (also known as the University of 38*bbd90710SDan Handley Illinois/NCSA Open Source License). 394bf3349bSDan Handley 406f625747SDouglas RaillardThis Release 416f625747SDouglas Raillard------------ 426f625747SDouglas Raillard 436f625747SDouglas RaillardThis release provides a suitable starting point for productization of secure 444bf3349bSDan Handleyworld boot and runtime firmware, in either the AArch32 or AArch64 execution 454bf3349bSDan Handleystate. 466f625747SDouglas Raillard 476f625747SDouglas RaillardUsers are encouraged to do their own security validation, including penetration 486f625747SDouglas Raillardtesting, on any secure world code derived from ARM Trusted Firmware. 496f625747SDouglas Raillard 506f625747SDouglas RaillardFunctionality 516f625747SDouglas Raillard~~~~~~~~~~~~~ 526f625747SDouglas Raillard 534bf3349bSDan Handley- Initialization of the secure world, for example exception vectors, control 544bf3349bSDan Handley registers and interrupts for the platform. 556f625747SDouglas Raillard 566f625747SDouglas Raillard- Library support for CPU specific reset and power down sequences. This 574bf3349bSDan Handley includes support for errata workarounds and the latest ARM DynamIQ CPUs. 586f625747SDouglas Raillard 596f625747SDouglas Raillard- Drivers to enable standard initialization of ARM System IP, for example 604bf3349bSDan Handley Generic Interrupt Controller (GIC), Cache Coherent Interconnect (CCI), 614bf3349bSDan Handley Cache Coherent Network (CCN), Network Interconnect (NIC) and TrustZone 624bf3349bSDan Handley Controller (TZC). 636f625747SDouglas Raillard 644bf3349bSDan Handley- A generic `SCMI`_ driver to interface with conforming power controllers, for 654bf3349bSDan Handley example the ARM System Control Processor (SCP). 666f625747SDouglas Raillard 674bf3349bSDan Handley- SMC (Secure Monitor Call) handling, conforming to the `SMC Calling 684bf3349bSDan Handley Convention`_ using an EL3 runtime services framework. 696f625747SDouglas Raillard 704bf3349bSDan Handley- `PSCI`_ library support for CPU, cluster and system power management 714bf3349bSDan Handley use-cases. 724bf3349bSDan Handley This library is pre-integrated with the AArch64 EL3 Runtime Software, and 734bf3349bSDan Handley is also suitable for integration with other AArch32 EL3 Runtime Software, 744bf3349bSDan Handley for example an AArch32 Secure OS. 754bf3349bSDan Handley 764bf3349bSDan Handley- A minimal AArch32 Secure Payload (SP\_MIN) to demonstrate `PSCI`_ library 774bf3349bSDan Handley integration with AArch32 EL3 Runtime Software. 786f625747SDouglas Raillard 796f625747SDouglas Raillard- Secure Monitor library code such as world switching, EL1 context management 806f625747SDouglas Raillard and interrupt routing. 814bf3349bSDan Handley When a Secure-EL1 Payload (SP) is present, for example a Secure OS, the 824bf3349bSDan Handley AArch64 EL3 Runtime Software must be integrated with a dispatcher component 834bf3349bSDan Handley (SPD) to customize the interaction with the SP. 846f625747SDouglas Raillard 854bf3349bSDan Handley- A Test SP/SPD to demonstrate AArch64 Secure Monitor functionality and SP 864bf3349bSDan Handley interaction with PSCI. 876f625747SDouglas Raillard 884bf3349bSDan Handley- SPDs for the `OP-TEE Secure OS`_, `NVidia Trusted Little Kernel`_ 894bf3349bSDan Handley and `Trusty Secure OS`_. 906f625747SDouglas Raillard 916f625747SDouglas Raillard- A Trusted Board Boot implementation, conforming to all mandatory TBBR 924bf3349bSDan Handley requirements. This includes image authentication, Firmware Update (or 934bf3349bSDan Handley recovery mode), and packaging of the various firmware images into a 944bf3349bSDan Handley Firmware Image Package (FIP). 956f625747SDouglas Raillard 964bf3349bSDan Handley- Pre-integration of TBB with the ARM TrustZone CryptoCell product, to take 974bf3349bSDan Handley advantage of its hardware Root of Trust and crypto acceleration services. 984bf3349bSDan Handley 994bf3349bSDan Handley- Support for alternative boot flows, for example to support platforms where 1004bf3349bSDan Handley the EL3 Runtime Software is loaded using other firmware or a separate 1014bf3349bSDan Handley secure system processor. 1024bf3349bSDan Handley 1034bf3349bSDan Handley- Support for the GCC, LLVM and ARM Compiler 6 toolchains. 1046f625747SDouglas Raillard 1056f625747SDouglas RaillardFor a full description of functionality and implementation details, please 1066f625747SDouglas Raillardsee the `Firmware Design`_ and supporting documentation. The `Change Log`_ 1076f625747SDouglas Raillardprovides details of changes made since the last release. 1086f625747SDouglas Raillard 1096f625747SDouglas RaillardPlatforms 1106f625747SDouglas Raillard~~~~~~~~~ 1116f625747SDouglas Raillard 1124bf3349bSDan HandleyVarious AArch32 and AArch64 builds of this release has been tested on variants 1134bf3349bSDan Handleyr0, r1 and r2 of the `Juno ARM Development Platform`_. 1146f625747SDouglas Raillard 1154bf3349bSDan HandleyVarious AArch64 builds of this release have been tested on the following ARM 1164bf3349bSDan Handley`FVP`_\ s (64-bit host machine only): 1176f625747SDouglas Raillard 1184bf3349bSDan HandleyNOTE: Unless otherwise stated, the FVP Version is 11.0, Build 11.0.34. 1196f625747SDouglas Raillard 1204bf3349bSDan Handley- ``Foundation_Platform`` 1214bf3349bSDan Handley- ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.5, Build 0.8.8502) 1224bf3349bSDan Handley- ``FVP_Base_Cortex-A35x4`` 1234bf3349bSDan Handley- ``FVP_Base_Cortex-A53x4`` 1244bf3349bSDan Handley- ``FVP_Base_Cortex-A57x4-A53x4`` 1254bf3349bSDan Handley- ``FVP_Base_Cortex-A57x4`` 1264bf3349bSDan Handley- ``FVP_Base_Cortex-A72x4-A53x4`` 1274bf3349bSDan Handley- ``FVP_Base_Cortex-A72x4`` 1284bf3349bSDan Handley- ``FVP_Base_Cortex-A73x4-A53x4`` 1294bf3349bSDan Handley- ``FVP_Base_Cortex-A73x4`` 1304bf3349bSDan Handley- ``FVP_CSS_SGM-775`` (Version 11.0, Build 11.0.36) 1316f625747SDouglas Raillard 1324bf3349bSDan HandleyVarious AArch32 builds of this release has been tested on the following ARM 1334bf3349bSDan Handley`FVP`_\ s (64-bit host machine only): 1344bf3349bSDan Handley 1354bf3349bSDan Handley- ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.5, Build 0.8.8502) 1364bf3349bSDan Handley- ``FVP_Base_Cortex-A32x4`` 1376f625747SDouglas Raillard 1386f625747SDouglas RaillardThe Foundation FVP can be downloaded free of charge. The Base FVPs can be 1394bf3349bSDan Handleylicensed from ARM. See the `ARM FVP website`_. 1404bf3349bSDan Handley 1414bf3349bSDan HandleyAll the above platforms have been tested with `Linaro Release 17.04`_. 1426f625747SDouglas Raillard 1436f625747SDouglas RaillardThis release also contains the following platform support: 1446f625747SDouglas Raillard 1454bf3349bSDan Handley- HiKey and HiKey960 boards 1466f625747SDouglas Raillard- MediaTek MT6795 and MT8173 SoCs 1474bf3349bSDan Handley- NVidia T132, T186 and T210 SoCs 1486f625747SDouglas Raillard- QEMU emulator 1494bf3349bSDan Handley- RockChip RK3328, RK3368 and RK3399 SoCs 1504bf3349bSDan Handley- Socionext UniPhier SoC family 1516f625747SDouglas Raillard- Xilinx Zynq UltraScale + MPSoC 1526f625747SDouglas Raillard 1536f625747SDouglas RaillardStill to Come 1546f625747SDouglas Raillard~~~~~~~~~~~~~ 1556f625747SDouglas Raillard 1566f625747SDouglas Raillard- More platform support. 1576f625747SDouglas Raillard 1586f625747SDouglas Raillard- Ongoing support for new architectural features, CPUs and System IP. 1596f625747SDouglas Raillard 1604bf3349bSDan Handley- Ongoing support for new `PSCI`_, `SCMI`_ and TBBR features. 1616f625747SDouglas Raillard 1626f625747SDouglas Raillard- Ongoing security hardening, optimization and quality improvements. 1636f625747SDouglas Raillard 1644bf3349bSDan HandleyFor a full list of detailed issues in the current code, please see the `Change 1654bf3349bSDan HandleyLog`_ and the `GitHub issue tracker`_. 1666f625747SDouglas Raillard 1676f625747SDouglas RaillardGetting Started 1686f625747SDouglas Raillard--------------- 1696f625747SDouglas Raillard 1704bf3349bSDan HandleyGet the Trusted Firmware source code from `GitHub`_. 1716f625747SDouglas Raillard 1726f625747SDouglas RaillardSee the `User Guide`_ for instructions on how to install, build and use 1736f625747SDouglas Raillardthe Trusted Firmware with the ARM `FVP`_\ s. 1746f625747SDouglas Raillard 1754bf3349bSDan HandleySee the `Firmware Design`_ for information on how the Trusted Firmware works. 1766f625747SDouglas Raillard 1776f625747SDouglas RaillardSee the `Porting Guide`_ as well for information about how to use this 1786f625747SDouglas Raillardsoftware on another ARMv8-A platform. 1796f625747SDouglas Raillard 1806f625747SDouglas RaillardSee the `Contributing Guidelines`_ for information on how to contribute to this 1816f625747SDouglas Raillardproject and the `Acknowledgments`_ file for a list of contributors to the 1826f625747SDouglas Raillardproject. 1836f625747SDouglas Raillard 1846f625747SDouglas RaillardFeedback and support 1856f625747SDouglas Raillard~~~~~~~~~~~~~~~~~~~~ 1866f625747SDouglas Raillard 1874bf3349bSDan HandleyARM welcomes any feedback on Trusted Firmware. If you think you have found a 1884bf3349bSDan Handleysecurity vulnerability, please report this using the process defined in the 1894bf3349bSDan HandleyTrusted Firmware `Security Centre`_. For all other feedback, please use the 1904bf3349bSDan Handley`GitHub issue tracker`_. 1916f625747SDouglas Raillard 1926f625747SDouglas RaillardARM licensees may contact ARM directly via their partner managers. 1936f625747SDouglas Raillard 1946f625747SDouglas Raillard-------------- 1956f625747SDouglas Raillard 1964bf3349bSDan Handley*Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.* 1976f625747SDouglas Raillard 1986f625747SDouglas Raillard.. _ARMv8-A: http://www.arm.com/products/processors/armv8-architecture.php 1996f625747SDouglas Raillard.. _Secure Monitor: http://www.arm.com/products/processors/technologies/trustzone/tee-smc.php 2004bf3349bSDan Handley.. _Power State Coordination Interface (PSCI): PSCI_ 2014bf3349bSDan Handley.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf 2024bf3349bSDan Handley.. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf 2034bf3349bSDan Handley.. _System Control and Management Interface: SCMI_ 2044bf3349bSDan Handley.. _SCMI: http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/DEN0056A_System_Control_and_Management_Interface.pdf 2054bf3349bSDan Handley.. _Juno ARM Development Platform: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php 2064bf3349bSDan Handley.. _ARM FVP website: FVP_ 2074bf3349bSDan Handley.. _FVP: https://developer.arm.com/products/system-design/fixed-virtual-platforms 2084bf3349bSDan Handley.. _Linaro Release 17.04: https://community.arm.com/dev-platforms/b/documents/posts/linaro-release-notes-deprecated#LinaroRelease17.04 2096f625747SDouglas Raillard.. _OP-TEE Secure OS: https://github.com/OP-TEE/optee_os 2106f625747SDouglas Raillard.. _NVidia Trusted Little Kernel: http://nv-tegra.nvidia.com/gitweb/?p=3rdparty/ote_partner/tlk.git;a=summary 2114bf3349bSDan Handley.. _Trusty Secure OS: https://source.android.com/security/trusty 2124bf3349bSDan Handley.. _GitHub: https://www.github.com/ARM-software/arm-trusted-firmware 2134bf3349bSDan Handley.. _GitHub issue tracker: https://github.com/ARM-software/tf-issues/issues 2144bf3349bSDan Handley.. _Security Centre: https://github.com/ARM-software/arm-trusted-firmware/wiki/ARM-Trusted-Firmware-Security-Centre 2154bf3349bSDan Handley.. _license: ./license.rst 2164bf3349bSDan Handley.. _Contributing Guidelines: ./contributing.rst 2174bf3349bSDan Handley.. _Acknowledgments: ./acknowledgements.rst 2186f625747SDouglas Raillard.. _Firmware Design: ./docs/firmware-design.rst 2196f625747SDouglas Raillard.. _Change Log: ./docs/change-log.rst 2206f625747SDouglas Raillard.. _User Guide: ./docs/user-guide.rst 2216f625747SDouglas Raillard.. _Porting Guide: ./docs/porting-guide.rst 222