readme.md
1ARM Trusted Firmware - version 1.1
2==================================
3
4ARM Trusted Firmware provides a reference implementation of secure world
5software for [ARMv8-A], including Exception Level 3 (EL3) software. This release
6provides complete support for version 0.2 of the [PSCI] specification, initial
7support for the new version 1.0 of that specification, and prototype support for
8the Trusted Board Boot Requirements specification.
9
10The intent is to provide a reference implementation of various ARM interface
11standards, such as the Power State Coordination Interface ([PSCI]), Trusted
12Board Boot Requirements (TBBR) and [Secure Monitor] [TEE-SMC] code. As far as
13possible the code is designed for reuse or porting to other ARMv8-A model and
14hardware platforms.
15
16ARM will continue development in collaboration with interested parties to
17provide a full reference implementation of PSCI, TBBR and Secure Monitor code
18to the benefit of all developers working with ARMv8-A TrustZone technology.
19
20
21License
22-------
23
24The software is provided under a BSD 3-Clause [license]. Certain source files
25are derived from FreeBSD code: the original license is included in these
26source files.
27
28
29This Release
30------------
31
32This release is a limited functionality implementation of the Trusted Firmware.
33It provides a suitable starting point for productization. Future versions will
34contain new features, optimizations and quality improvements.
35
36### Functionality
37
38* Prototype implementation of a subset of the Trusted Board Boot Requirements
39 Platform Design Document (PDD). This includes packaging the various firmware
40 images into a Firmware Image Package (FIP) to be loaded from non-volatile
41 storage, and a prototype of authenticated boot using key certificates stored
42 in the FIP.
43
44* Initializes the secure world (for example, exception vectors, control
45 registers, GIC and interrupts for the platform), before transitioning into
46 the normal world.
47
48* Supports both GICv2 and GICv3 initialization for use by normal world
49 software.
50
51* Starts the normal world at the Exception Level and Register Width specified
52 by the platform port. Typically this is AArch64 EL2 if available.
53
54* Handles SMCs (Secure Monitor Calls) conforming to the [SMC Calling
55 Convention PDD] [SMCCC] using an EL3 runtime services framework.
56
57* Handles SMCs relating to the [Power State Coordination Interface PDD] [PSCI]
58 for the Secondary CPU Boot, CPU Hotplug, CPU Idle and System Shutdown/Reset
59 use-cases.
60
61* A Test Secure-EL1 Payload and Dispatcher to demonstrate Secure Monitor
62 functionality such as world switching, EL1 context management and interrupt
63 routing. This also demonstrates Secure-EL1 interaction with PSCI. Some of
64 this functionality is provided in library form for re-use by other
65 Secure-EL1 Payload Dispatchers.
66
67* Support for alternative Trusted Boot Firmware. Some platforms have their own
68 Trusted Boot implementation and only require the Secure Monitor
69 functionality provided by ARM Trusted Firmware.
70
71* Isolation of memory accessible by the secure world from the normal world
72 through programming of a TrustZone controller.
73
74* Support for CPU specific reset sequences, power down sequences and register
75 dumping during crash reporting. The CPU specific reset sequences include
76 support for errata workarounds.
77
78For a full description of functionality and implementation details, please
79see the [Firmware Design] and supporting documentation. The [Change Log]
80provides details of changes made since the last release.
81
82### Platforms
83
84This release of the Trusted Firmware has been tested on Revision B of the
85[Juno ARM Development Platform] [Juno] with Version r0p0-00rel7 of the
86[ARM SCP Firmware] [SCP download].
87
88The Trusted Firmware has also been tested on the 64-bit Linux versions of the
89following ARM [FVP]s:
90
91* `Foundation_Platform` (Version 9.1, Build 9.1.33)
92* `FVP_Base_AEMv8A-AEMv8A` (Version 6.2, Build 0.8.6202)
93* `FVP_Base_Cortex-A57x4-A53x4` (Version 6.2, Build 0.8.6202)
94* `FVP_Base_Cortex-A57x1-A53x1` (Version 6.2, Build 0.8.6202)
95* `FVP_Base_Cortex-A57x2-A53x4` (Version 6.2, Build 0.8.6202)
96
97The Foundation FVP can be downloaded free of charge. The Base FVPs can be
98licensed from ARM: see [www.arm.com/fvp] [FVP].
99
100### Still to Come
101
102* Complete and more flexible Trusted Board Boot implementation.
103
104* Complete implementation of the [PSCI] v1.0 specification.
105
106* Support for alternative types of Secure-EL1 Payloads.
107
108* Extending the GICv3 support to the secure world.
109
110* Support for new System IP devices.
111
112For a full list of detailed issues in the current code, please see the [Change
113Log] and the [GitHub issue tracker].
114
115
116Getting Started
117---------------
118
119Get the Trusted Firmware source code from
120[GitHub](https://www.github.com/ARM-software/arm-trusted-firmware).
121
122See the [User Guide] for instructions on how to install, build and use
123the Trusted Firmware with the ARM [FVP]s.
124
125See the [Firmware Design] for information on how the ARM Trusted Firmware works.
126
127See the [Porting Guide] as well for information about how to use this
128software on another ARMv8-A platform.
129
130See the [Contributing Guidelines] for information on how to contribute to this
131project and the [Acknowledgments] file for a list of contributors to the
132project.
133
134### Feedback and support
135
136ARM welcomes any feedback on the Trusted Firmware. Please send feedback using
137the [GitHub issue tracker].
138
139ARM licensees may contact ARM directly via their partner managers.
140
141
142- - - - - - - - - - - - - - - - - - - - - - - - - -
143
144_Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved._
145
146
147[License]: ./license.md "BSD license for ARM Trusted Firmware"
148[Contributing Guidelines]: ./contributing.md "Guidelines for contributors"
149[Acknowledgments]: ./acknowledgements.md "Contributor acknowledgments"
150[Change Log]: ./docs/change-log.md
151[User Guide]: ./docs/user-guide.md
152[Firmware Design]: ./docs/firmware-design.md
153[Porting Guide]: ./docs/porting-guide.md
154
155[ARMv8-A]: http://www.arm.com/products/processors/armv8-architecture.php "ARMv8-A Architecture"
156[FVP]: http://www.arm.com/fvp "ARM's Fixed Virtual Platforms"
157[Juno]: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php "Juno ARM Development Platform"
158[SCP download]: https://silver.arm.com/download/download.tm?pv=1764630
159[PSCI]: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf "Power State Coordination Interface PDD (ARM DEN 0022C)"
160[SMCCC]: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html "SMC Calling Convention PDD (ARM DEN 0028A)"
161[TEE-SMC]: http://www.arm.com/products/processors/technologies/trustzone/tee-smc.php "Secure Monitor and TEEs"
162[GitHub issue tracker]: https://github.com/ARM-software/tf-issues/issues
163