Update Arm TF references to TF-A

Update Arm Trusted Firmware references in the upstream documents to
Trusted Firmware-A (TF-A). This is for consistency with and
disambiguation from Trusted Firmware-M (TF-M).

Also update other Arm trademarks, e.g. ARM->Arm, ARMv8->Armv8-A.

Change-Id: I8bb0e18af29c6744eeea2dc6c08f2c10b20ede22
Signed-off-by: Dan Handley <dan.handley@arm.com>
Signed-off-by: David Cunado <david.cunado@arm.com>
This commit is contained in:
Dan Handley 2018-03-01 18:44:00 +00:00 committed by David Cunado
parent c3e34a9e01
commit 4def07d535
34 changed files with 999 additions and 1031 deletions

View File

@ -1,13 +1,13 @@
Contributing to ARM Trusted Firmware Contributing to Trusted Firmware-A
==================================== ==================================
Getting Started Getting Started
--------------- ---------------
- Make sure you have a `GitHub account`_. - Make sure you have a `GitHub account`_.
- Create an `issue`_ for your work if one does not already exist. This gives - Create an `issue`_ for your work if one does not already exist. This gives
everyone visibility of whether others are working on something similar. ARM everyone visibility of whether others are working on something similar. Arm
licensees may contact ARM directly via their partner managers instead if licensees may contact Arm directly via their partner managers instead if
they prefer. they prefer.
- Note that the `issue`_ tracker for this project is in a separate - Note that the `issue`_ tracker for this project is in a separate
@ -27,8 +27,8 @@ Making Changes
- Make commits of logical units. See these general `Git guidelines`_ for - Make commits of logical units. See these general `Git guidelines`_ for
contributing to a project. contributing to a project.
- Follow the `Linux coding style`_; this style is enforced for the ARM Trusted - Follow the `Linux coding style`_; this style is enforced for the TF-A
Firmware project (style errors only, not warnings). project (style errors only, not warnings).
- Use the checkpatch.pl script provided with the Linux source tree. A - Use the checkpatch.pl script provided with the Linux source tree. A
Makefile target is provided for convenience (see section 2 in the Makefile target is provided for convenience (see section 2 in the
@ -57,7 +57,7 @@ Making Changes
:: ::
Portions copyright (c) [XXXX-]YYYY, ARM Limited and Contributors. All rights reserved. Portions copyright (c) [XXXX-]YYYY, Arm Limited and Contributors. All rights reserved.
where XXXX is the year of first contribution (if different to YYYY) and where XXXX is the year of first contribution (if different to YYYY) and
YYYY is the year of most recent contribution. YYYY is the year of most recent contribution.
@ -108,7 +108,7 @@ Submitting Changes
-------------- --------------
*Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _GitHub account: https://github.com/signup/free .. _GitHub account: https://github.com/signup/free
.. _issue: https://github.com/ARM-software/tf-issues/issues .. _issue: https://github.com/ARM-software/tf-issues/issues

View File

@ -1,7 +1,7 @@
ARM SiP Service Arm SiP Service
=============== ===============
This document enumerates and describes the ARM SiP (Silicon Provider) services. This document enumerates and describes the Arm SiP (Silicon Provider) services.
SiP services are non-standard, platform-specific services offered by the silicon SiP services are non-standard, platform-specific services offered by the silicon
implementer or platform provider. They are accessed via. ``SMC`` ("SMC calls") implementer or platform provider. They are accessed via. ``SMC`` ("SMC calls")
@ -13,20 +13,20 @@ services:
``0xc200ffff`` for 64-bit calls, and ``0x82000000`` - ``0x8200ffff`` for 32-bit ``0xc200ffff`` for 64-bit calls, and ``0x82000000`` - ``0x8200ffff`` for 32-bit
calls. calls.
The ARM SiP implementation offers the following services: The Arm SiP implementation offers the following services:
- Performance Measurement Framework (PMF) - Performance Measurement Framework (PMF)
- Execution State Switching service - Execution State Switching service
Source definitions for ARM SiP service are located in the ``arm_sip_svc.h`` header Source definitions for Arm SiP service are located in the ``arm_sip_svc.h`` header
file. file.
Performance Measurement Framework (PMF) Performance Measurement Framework (PMF)
--------------------------------------- ---------------------------------------
The `Performance Measurement Framework`_ The `Performance Measurement Framework`_
allows callers to retrieve timestamps captured at various paths in ARM Trusted allows callers to retrieve timestamps captured at various paths in TF-A
Firmware execution. It's described in detail in `Firmware Design document`_. execution. It's described in detail in `Firmware Design document`_.
Execution State Switching service Execution State Switching service
--------------------------------- ---------------------------------
@ -35,8 +35,8 @@ Execution State Switching service provides a mechanism for a non-secure lower
Exception Level (either EL2, or NS EL1 if EL2 isn't implemented) to request to Exception Level (either EL2, or NS EL1 if EL2 isn't implemented) to request to
switch its execution state (a.k.a. Register Width), either from AArch64 to switch its execution state (a.k.a. Register Width), either from AArch64 to
AArch32, or from AArch32 to AArch64, for the calling CPU. This service is only AArch32, or from AArch32 to AArch64, for the calling CPU. This service is only
available when ARM Trusted Firmware is built for AArch64 (i.e. when build option available when Trusted Firmware-A (TF-A) is built for AArch64 (i.e. when build
``ARCH`` is set to ``aarch64``). option ``ARCH`` is set to ``aarch64``).
``ARM_SIP_SVC_EXE_STATE_SWITCH`` ``ARM_SIP_SVC_EXE_STATE_SWITCH``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -79,8 +79,8 @@ The service may return the following error codes:
- ``STATE_SW_E_PARAM``: If any of the parameters were deemed invalid for - ``STATE_SW_E_PARAM``: If any of the parameters were deemed invalid for
a specific request. a specific request.
- ``STATE_SW_E_DENIED``: If the call is not successful, or when ARM Trusted - ``STATE_SW_E_DENIED``: If the call is not successful, or when TF-A is
Firmware is built for AArch32. built for AArch32.
If the call is successful, the caller wouldn't observe the SMC returning. If the call is successful, the caller wouldn't observe the SMC returning.
Instead, execution starts at the supplied entry point, with the CPU registers 0 Instead, execution starts at the supplied entry point, with the CPU registers 0
@ -89,7 +89,7 @@ respectively.
-------------- --------------
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*
.. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html .. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html
.. _Performance Measurement Framework: ./firmware-design.rst#user-content-performance-measurement-framework .. _Performance Measurement Framework: ./firmware-design.rst#user-content-performance-measurement-framework

View File

@ -7,8 +7,9 @@ Abstracting a Chain of Trust
.. contents:: .. contents::
The aim of this document is to describe the authentication framework implemented The aim of this document is to describe the authentication framework
in the Trusted Firmware. This framework fulfills the following requirements: implemented in Trusted Firmware-A (TF-A). This framework fulfills the
following requirements:
#. It should be possible for a platform port to specify the Chain of Trust in #. It should be possible for a platform port to specify the Chain of Trust in
terms of certificate hierarchy and the mechanisms used to verify a terms of certificate hierarchy and the mechanisms used to verify a
@ -152,8 +153,8 @@ performed to verify it:
In Diagram 1, each component is responsible for one or more of these operations. In Diagram 1, each component is responsible for one or more of these operations.
The responsibilities are briefly described below. The responsibilities are briefly described below.
TF Generic code and IO framework (GEN/IO) TF-A Generic code and IO framework (GEN/IO)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These components are responsible for initiating the authentication process for a These components are responsible for initiating the authentication process for a
particular image in BL1 or BL2. For each BL image that requires authentication, particular image in BL1 or BL2. For each BL image that requires authentication,
@ -162,8 +163,8 @@ image until either an authenticated image or the ROT is reached. Then the
Generic code calls the IO framewotk to load the image and calls the Generic code calls the IO framewotk to load the image and calls the
Authentication module to authenticate it, following the CoT from ROT to Image. Authentication module to authenticate it, following the CoT from ROT to Image.
TF Platform Port (PP) TF-A Platform Port (PP)
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
The platform is responsible for: The platform is responsible for:
@ -374,8 +375,8 @@ single parsing method. There has to be one IPL for every method used by the
platform. platform.
#. Raw format: This format is effectively a nop as an image using this method #. Raw format: This format is effectively a nop as an image using this method
is treated as being in raw binary format e.g. boot loader images used by ARM is treated as being in raw binary format e.g. boot loader images used by
TF. This method should only be used by data images. TF-A. This method should only be used by data images.
#. X509V3 method: This method uses industry standards like X.509 to represent #. X509V3 method: This method uses industry standards like X.509 to represent
PKI certificates (authentication images). It is expected that open source PKI certificates (authentication images). It is expected that open source
@ -631,8 +632,8 @@ array of image descriptors and it is registered in the framework using the macro
process to fail). process to fail).
The number of images participating in the boot process depends on the CoT. There The number of images participating in the boot process depends on the CoT. There
is, however, a minimum set of images that are mandatory in the Trusted Firmware is, however, a minimum set of images that are mandatory in TF-A and thus all
and thus all CoTs must present: CoTs must present:
- ``BL2`` - ``BL2``
- ``SCP_BL2`` (platform specific) - ``SCP_BL2`` (platform specific)
@ -648,7 +649,7 @@ Following the `Platform Porting Guide`_, a platform must provide unique
identifiers for all the images and certificates that will be loaded during the identifiers for all the images and certificates that will be loaded during the
boot process. If a platform is using the TBBR as a reference for trusted boot, boot process. If a platform is using the TBBR as a reference for trusted boot,
these identifiers can be obtained from ``include/common/tbbr/tbbr_img_def.h``. these identifiers can be obtained from ``include/common/tbbr/tbbr_img_def.h``.
ARM platforms include this file in ``include/plat/arm/common/arm_def.h``. Other Arm platforms include this file in ``include/plat/arm/common/arm_def.h``. Other
platforms may also include this file or provide their own identifiers. platforms may also include this file or provide their own identifiers.
**Important**: the authentication module uses these identifiers to index the **Important**: the authentication module uses these identifiers to index the
@ -880,7 +881,7 @@ extract the authentication parameters. The number and type of parser libraries
depend on the images used in the CoT. Raw images do not need a library, so depend on the images used in the CoT. Raw images do not need a library, so
only an x509v3 library is required for the TBBR CoT. only an x509v3 library is required for the TBBR CoT.
ARM platforms will use an x509v3 library based on mbed TLS. This library may be Arm platforms will use an x509v3 library based on mbed TLS. This library may be
found in ``drivers/auth/mbedtls/mbedtls_x509_parser.c``. It exports three found in ``drivers/auth/mbedtls/mbedtls_x509_parser.c``. It exports three
functions: functions:
@ -898,14 +899,14 @@ an image of type ``IMG_CERT``, it will call the corresponding function exported
in this file. in this file.
The build system must be updated to include the corresponding library and The build system must be updated to include the corresponding library and
mbed TLS sources. ARM platforms use the ``arm_common.mk`` file to pull the mbed TLS sources. Arm platforms use the ``arm_common.mk`` file to pull the
sources. sources.
The cryptographic library The cryptographic library
~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
The cryptographic module relies on a library to perform the required operations, The cryptographic module relies on a library to perform the required operations,
i.e. verify a hash or a digital signature. ARM platforms will use a library i.e. verify a hash or a digital signature. Arm platforms will use a library
based on mbed TLS, which can be found in based on mbed TLS, which can be found in
``drivers/auth/mbedtls/mbedtls_crypto.c``. This library is registered in the ``drivers/auth/mbedtls/mbedtls_crypto.c``. This library is registered in the
authentication framework using the macro ``REGISTER_CRYPTO_LIB()`` and exports authentication framework using the macro ``REGISTER_CRYPTO_LIB()`` and exports
@ -934,7 +935,7 @@ of SHA-256 with smaller memory footprint (~1.5 KB less) but slower (~30%).
-------------- --------------
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*
.. _Trusted Board Boot: ./trusted-board-boot.rst .. _Trusted Board Boot: ./trusted-board-boot.rst
.. _Platform Porting Guide: ./porting-guide.rst .. _Platform Porting Guide: ./porting-guide.rst

View File

@ -4,8 +4,8 @@
.. contents:: .. contents::
ARM Trusted Firmware - version 1.4 Trusted Firmware-A - version 1.4
================================== ================================
New features New features
------------ ------------
@ -23,13 +23,13 @@ New features
- Added support for Cortex-A75 and Cortex-A55 processors. - Added support for Cortex-A75 and Cortex-A55 processors.
Both Cortex-A75 and Cortex-A55 processors use the ARM DynamIQ Shared Unit Both Cortex-A75 and Cortex-A55 processors use the Arm DynamIQ Shared Unit
(DSU). The power-down and power-up sequences are therefore mostly managed in (DSU). The power-down and power-up sequences are therefore mostly managed in
hardware, reducing complexity of the software operations. hardware, reducing complexity of the software operations.
- Introduced ARM GIC-600 driver. - Introduced Arm GIC-600 driver.
ARM GIC-600 IP complies with ARM GICv3 architecture. For FVP platforms, the Arm GIC-600 IP complies with Arm GICv3 architecture. For FVP platforms, the
GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600. GIC-600 driver is chosen when FVP_USE_GIC_DRIVER is set to FVP_GIC600.
- Updated GICv3 support: - Updated GICv3 support:
@ -43,16 +43,16 @@ New features
- GIC driver data is flushed by the primary CPU so that secondary CPU do - GIC driver data is flushed by the primary CPU so that secondary CPU do
not read stale GIC data. not read stale GIC data.
- Added support for ARM System Control and Management Interface v1.0 (SCMI). - Added support for Arm System Control and Management Interface v1.0 (SCMI).
The SCMI driver implements the power domain management and system power The SCMI driver implements the power domain management and system power
management protocol of the SCMI specification (ARM DEN 0056ASCMI) for management protocol of the SCMI specification (Arm DEN 0056ASCMI) for
communicating with any compliant power controller. communicating with any compliant power controller.
Support is added for the Juno platform. The driver can be found in the Support is added for the Juno platform. The driver can be found in the
plat/arm/css/drivers folder. plat/arm/css/drivers folder.
- Added support to enable pre-integration of TBB with the ARM TrustZone - Added support to enable pre-integration of TBB with the Arm TrustZone
CryptoCell product, to take advantage of its hardware Root of Trust and CryptoCell product, to take advantage of its hardware Root of Trust and
crypto acceleration services. crypto acceleration services.
@ -84,12 +84,12 @@ New features
- Fixed integer overflow which addressed TFV-1: Malformed Firmware Update - Fixed integer overflow which addressed TFV-1: Malformed Firmware Update
SMC can result in copy of unexpectedly large data into secure memory. SMC can result in copy of unexpectedly large data into secure memory.
- Introduced support for ARM Compiler 6 and LLVM (clang). - Introduced support for Arm Compiler 6 and LLVM (clang).
ARM TF can now also be built with the ARM Compiler 6 or the clang compilers. TF-A can now also be built with the Arm Compiler 6 or the clang compilers.
The assembler and linker must be provided by the GNU toolchain. The assembler and linker must be provided by the GNU toolchain.
Tested with ARM CC 6.7 and clang 3.9.x and 4.0.x. Tested with Arm CC 6.7 and clang 3.9.x and 4.0.x.
- Memory footprint improvements: - Memory footprint improvements:
@ -103,30 +103,29 @@ New features
additional logging options are supported via an optional platform define additional logging options are supported via an optional platform define
`PLAT_LOG_LEVEL_ASSERT`, which controls how verbose the assert output is. `PLAT_LOG_LEVEL_ASSERT`, which controls how verbose the assert output is.
- Enhancements to Trusted Firmware support when running in AArch32 execution - Enhancements to TF-A support when running in AArch32 execution state:
state:
- Support booting SP_MIN and BL33 in AArch32 execution mode on Juno. Due to - Support booting SP_MIN and BL33 in AArch32 execution mode on Juno. Due to
hardware limitations, BL1 and BL2 boot in AArch64 state and there is hardware limitations, BL1 and BL2 boot in AArch64 state and there is
additional trampoline code to warm reset into SP_MIN in AArch32 execution additional trampoline code to warm reset into SP_MIN in AArch32 execution
state. state.
- Added support for ARM Cortex-A53/57/72 MPCore processors including the - Added support for Arm Cortex-A53/57/72 MPCore processors including the
errata workarounds that are already implemented for AArch64 execution errata workarounds that are already implemented for AArch64 execution
state. state.
- For FVP platforms, added AArch32 Trusted Board Boot support, including the - For FVP platforms, added AArch32 Trusted Board Boot support, including the
Firmware Update feature. Firmware Update feature.
- Introduced ARM SiP service for use by ARM standard platforms. - Introduced Arm SiP service for use by Arm standard platforms.
- Added new ARM SiP Service SMCs to enable the Non-secure world to read PMF - Added new Arm SiP Service SMCs to enable the Non-secure world to read PMF
timestamps. timestamps.
Added PMF instrumentation points in ARM TF in order to quantify the Added PMF instrumentation points in TF-A in order to quantify the
overall time spent in the PSCI software implementation. overall time spent in the PSCI software implementation.
- Added new ARM SiP service SMC to switch execution state. - Added new Arm SiP service SMC to switch execution state.
This allows the lower exception level to change its execution state from This allows the lower exception level to change its execution state from
AArch64 to AArch32, or vice verse, via a request to EL3. AArch64 to AArch32, or vice verse, via a request to EL3.
@ -172,7 +171,7 @@ New features
detection. For increased effectiveness of protection platforms must provide detection. For increased effectiveness of protection platforms must provide
an implementation that returns a random value. an implementation that returns a random value.
- Enhanced support for ARM platforms: - Enhanced support for Arm platforms:
- Added support for multi-threading CPUs, indicated by `MT` field in MPDIR. - Added support for multi-threading CPUs, indicated by `MT` field in MPDIR.
A new build flag `ARM_PLAT_MT` is added, and when enabled, the functions A new build flag `ARM_PLAT_MT` is added, and when enabled, the functions
@ -183,13 +182,13 @@ New features
enabled, returning the Processing Element count within the physical CPU enabled, returning the Processing Element count within the physical CPU
corresponding to `mpidr`. corresponding to `mpidr`.
- The ARM platforms migrated to use version 2 of the translation tables. - The Arm platforms migrated to use version 2 of the translation tables.
- Introduced a new ARM platform layer API `plat_arm_psci_override_pm_ops` - Introduced a new Arm platform layer API `plat_arm_psci_override_pm_ops`
which allows ARM platforms to modify `plat_arm_psci_pm_ops` and therefore which allows Arm platforms to modify `plat_arm_psci_pm_ops` and therefore
dynamically define PSCI capability. dynamically define PSCI capability.
- The ARM platforms migrated to use IMAGE_LOAD_V2 by default. - The Arm platforms migrated to use IMAGE_LOAD_V2 by default.
- Enhanced reporting of errata workaround status with the following policy: - Enhanced reporting of errata workaround status with the following policy:
@ -206,15 +205,15 @@ New features
missing. missing.
- Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the - Added build options ARM_ARCH_MAJOR and ARM_ARM_MINOR to choose the
architecture version to target ARM TF. architecture version to target TF-A.
- Updated the spin lock implementation to use the more efficient CAS (Compare - Updated the spin lock implementation to use the more efficient CAS (Compare
And Swap) instruction when available. This instruction was introduced in And Swap) instruction when available. This instruction was introduced in
ARMv8.1-A. Armv8.1-A.
- Applied errata workaround for ARM Cortex-A53: 855873. - Applied errata workaround for Arm Cortex-A53: 855873.
- Applied errata workaround for ARM-Cortex-A57: 813419. - Applied errata workaround for Arm-Cortex-A57: 813419.
- Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and - Enabled all A53 and A57 errata workarounds for Juno, both in AArch64 and
AArch32 execution states. AArch32 execution states.
@ -248,7 +247,7 @@ New features
- Essential control registers are fully initialised on EL3 start-up, when - Essential control registers are fully initialised on EL3 start-up, when
initialising the non-secure and secure context structures and when initialising the non-secure and secure context structures and when
preparing to leave EL3 for a lower EL. This gives better alignement with preparing to leave EL3 for a lower EL. This gives better alignement with
the ARM ARM which states that software must initialise RES0 and RES1 the Arm ARM which states that software must initialise RES0 and RES1
fields with 0 / 1. fields with 0 / 1.
- Enhanced PSCI support: - Enhanced PSCI support:
@ -268,12 +267,12 @@ New features
Issues resolved since last release Issues resolved since last release
---------------------------------- ----------------------------------
- ARM TF can be built with the latest mbed TLS version (v2.4.2). The earlier - TF-A can be built with the latest mbed TLS version (v2.4.2). The earlier
version 2.3.0 cannot be used due to build warnings that the ARM TF build version 2.3.0 cannot be used due to build warnings that the TF-A build
system interprets as errors. system interprets as errors.
- TBBR, including the Firmware Update feature is now supported on FVP - TBBR, including the Firmware Update feature is now supported on FVP
platforms when running Trusted Firmware in AArch32 state. platforms when running TF-A in AArch32 state.
- The version of the AEMv8 Base FVP used in this release has resolved the issue - The version of the AEMv8 Base FVP used in this release has resolved the issue
of the model executing a reset instead of terminating in response to a of the model executing a reset instead of terminating in response to a
@ -282,7 +281,7 @@ Issues resolved since last release
Known Issues Known Issues
------------ ------------
- Building TF with compiler optimisations disabled (-O0) fails. - Building TF-A with compiler optimisations disabled (-O0) fails.
- Trusted Board Boot currently does not work on Juno when running Trusted - Trusted Board Boot currently does not work on Juno when running Trusted
Firmware in AArch32 execution state due to error when loading the sp_min to Firmware in AArch32 execution state due to error when loading the sp_min to
@ -294,14 +293,14 @@ Known Issues
platform, please use GCC compiler version of at least 5.0. See `PR#1002`_ for platform, please use GCC compiler version of at least 5.0. See `PR#1002`_ for
more details. more details.
ARM Trusted Firmware - version 1.3 Trusted Firmware-A - version 1.3
================================== ================================
New features New features
------------ ------------
- Added support for running Trusted Firmware in AArch32 execution state. - Added support for running TF-A in AArch32 execution state.
The PSCI library has been refactored to allow integration with **EL3 Runtime The PSCI library has been refactored to allow integration with **EL3 Runtime
Software**. This is software that is executing at the highest secure Software**. This is software that is executing at the highest secure
@ -315,11 +314,11 @@ New features
Booting to the BL1/BL2 images as well as booting straight to the Secure Booting to the BL1/BL2 images as well as booting straight to the Secure
Payload is supported. Payload is supported.
- Improvements to the initialization framework for the PSCI service and ARM - Improvements to the initialization framework for the PSCI service and Arm
Standard Services in general. Standard Services in general.
The PSCI service is now initialized as part of ARM Standard Service The PSCI service is now initialized as part of Arm Standard Service
initialization. This consolidates the initializations of any ARM Standard initialization. This consolidates the initializations of any Arm Standard
Service that may be added in the future. Service that may be added in the future.
A new function ``get_arm_std_svc_args()`` is introduced to get arguments A new function ``get_arm_std_svc_args()`` is introduced to get arguments
@ -337,7 +336,7 @@ New features
(BL31, BL32, etc). The new mechanism is data-driven by a list of image (BL31, BL32, etc). The new mechanism is data-driven by a list of image
descriptors provided by the platform code. descriptors provided by the platform code.
ARM platforms have been updated to support the new loading mechanism. Arm platforms have been updated to support the new loading mechanism.
The new mechanism is enabled by a build flag (``LOAD_IMAGE_V2``) which is The new mechanism is enabled by a build flag (``LOAD_IMAGE_V2``) which is
currently off by default for the AArch64 build. currently off by default for the AArch64 build.
@ -345,7 +344,7 @@ New features
**Note** ``TRUSTED_BOARD_BOOT`` is currently not supported when **Note** ``TRUSTED_BOARD_BOOT`` is currently not supported when
``LOAD_IMAGE_V2`` is enabled. ``LOAD_IMAGE_V2`` is enabled.
- Updated requirements for making contributions to ARM TF. - Updated requirements for making contributions to TF-A.
Commits now must have a 'Signed-off-by:' field to certify that the Commits now must have a 'Signed-off-by:' field to certify that the
contribution has been made under the terms of the contribution has been made under the terms of the
@ -365,13 +364,13 @@ New features
- Updated PSCI support: - Updated PSCI support:
- Added support for PSCI NODE\_HW\_STATE API for ARM platforms. - Added support for PSCI NODE\_HW\_STATE API for Arm platforms.
- New optional platform hook, ``pwr_domain_pwr_down_wfi()``, in - New optional platform hook, ``pwr_domain_pwr_down_wfi()``, in
``plat_psci_ops`` to enable platforms to perform platform-specific actions ``plat_psci_ops`` to enable platforms to perform platform-specific actions
needed to enter powerdown, including the 'wfi' invocation. needed to enter powerdown, including the 'wfi' invocation.
- PSCI STAT residency and count functions have been added on ARM platforms - PSCI STAT residency and count functions have been added on Arm platforms
by using PMF. by using PMF.
- Enhancements to the translation table library: - Enhancements to the translation table library:
@ -420,13 +419,13 @@ New features
convention as specified by TBBR and already used in cert\_create tool. convention as specified by TBBR and already used in cert\_create tool.
- Refactored the TZC-400 driver to also support memory controllers that - Refactored the TZC-400 driver to also support memory controllers that
integrate TZC functionality, for example ARM CoreLink DMC-500. Also added integrate TZC functionality, for example Arm CoreLink DMC-500. Also added
DMC-500 specific support. DMC-500 specific support.
- Implemented generic delay timer based on the system generic counter and - Implemented generic delay timer based on the system generic counter and
migrated all platforms to use it. migrated all platforms to use it.
- Enhanced support for ARM platforms: - Enhanced support for Arm platforms:
- Updated image loading support to make SCP images (SCP\_BL2 and SCP\_BL2U) - Updated image loading support to make SCP images (SCP\_BL2 and SCP\_BL2U)
optional. optional.
@ -441,7 +440,7 @@ New features
the default secure SRAM. the default secure SRAM.
- Added support to use a System Security Control (SSC) Registers Unit - Added support to use a System Security Control (SSC) Registers Unit
enabling ARM TF to be compiled to support multiple ARM platforms and enabling TF-A to be compiled to support multiple Arm platforms and
then select one at runtime. then select one at runtime.
- Restricted mapping of Trusted ROM in BL1 to what is actually needed by - Restricted mapping of Trusted ROM in BL1 to what is actually needed by
@ -455,26 +454,26 @@ New features
- Added support for Mediatek MT6795 platform. - Added support for Mediatek MT6795 platform.
- Added support for QEMU virtualization ARMv8-A target. - Added support for QEMU virtualization Armv8-A target.
- Added support for Rockchip RK3368 and RK3399 platforms. - Added support for Rockchip RK3368 and RK3399 platforms.
- Added support for Xilinx Zynq UltraScale+ MPSoC platform. - Added support for Xilinx Zynq UltraScale+ MPSoC platform.
- Added support for ARM Cortex-A73 MPCore Processor. - Added support for Arm Cortex-A73 MPCore Processor.
- Added support for ARM Cortex-A72 processor. - Added support for Arm Cortex-A72 processor.
- Added support for ARM Cortex-A35 processor. - Added support for Arm Cortex-A35 processor.
- Added support for ARM Cortex-A32 MPCore Processor. - Added support for Arm Cortex-A32 MPCore Processor.
- Enabled preloaded BL33 alternative boot flow, in which BL2 does not load - Enabled preloaded BL33 alternative boot flow, in which BL2 does not load
BL33 from non-volatile storage and BL31 hands execution over to a preloaded BL33 from non-volatile storage and BL31 hands execution over to a preloaded
BL33. The User Guide has been updated with an example of how to use this BL33. The User Guide has been updated with an example of how to use this
option with a bootwrapped kernel. option with a bootwrapped kernel.
- Added support to build ARM TF on a Windows-based host machine. - Added support to build TF-A on a Windows-based host machine.
- Updated Trusted Board Boot prototype implementation: - Updated Trusted Board Boot prototype implementation:
@ -493,7 +492,7 @@ New features
- Enabled G1S or G0 interrupts to be configured independently. - Enabled G1S or G0 interrupts to be configured independently.
- Changed FVP default interrupt driver to be the GICv3-only driver. - Changed FVP default interrupt driver to be the GICv3-only driver.
**Note** the default build of Trusted Firmware will not be able to boot **Note** the default build of TF-A will not be able to boot
Linux kernel with GICv2 FDT blob. Linux kernel with GICv2 FDT blob.
- Enabled wake-up from CPU\_SUSPEND to stand-by by temporarily re-routing - Enabled wake-up from CPU\_SUSPEND to stand-by by temporarily re-routing
@ -510,26 +509,25 @@ Known issues
the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of the PSCI ``SYSTEM_OFF`` API. This issue will be fixed in a future version of
the model. the model.
- Building TF with compiler optimisations disabled (``-O0``) fails. - Building TF-A with compiler optimisations disabled (``-O0``) fails.
- ARM TF cannot be built with mbed TLS version v2.3.0 due to build warnings - TF-A cannot be built with mbed TLS version v2.3.0 due to build warnings
that the ARM TF build system interprets as errors. that the TF-A build system interprets as errors.
- TBBR is not currently supported when running Trusted Firmware in AArch32 - TBBR is not currently supported when running TF-A in AArch32 state.
state.
ARM Trusted Firmware - version 1.2 Trusted Firmware-A - version 1.2
================================== ================================
New features New features
------------ ------------
- The Trusted Board Boot implementation on ARM platforms now conforms to the - The Trusted Board Boot implementation on Arm platforms now conforms to the
mandatory requirements of the TBBR specification. mandatory requirements of the TBBR specification.
In particular, the boot process is now guarded by a Trusted Watchdog, which In particular, the boot process is now guarded by a Trusted Watchdog, which
will reset the system in case of an authentication or loading error. On ARM will reset the system in case of an authentication or loading error. On Arm
platforms, a secure instance of ARM SP805 is used as the Trusted Watchdog. platforms, a secure instance of Arm SP805 is used as the Trusted Watchdog.
Also, a firmware update process has been implemented. It enables Also, a firmware update process has been implemented. It enables
authenticated firmware to update firmware images from external interfaces to authenticated firmware to update firmware images from external interfaces to
@ -563,44 +561,44 @@ New features
out, reducing the memory footprint of BL1 and BL2 by approximately out, reducing the memory footprint of BL1 and BL2 by approximately
6 KB. 6 KB.
- On ARM development platforms, each BL stage now individually defines - On Arm development platforms, each BL stage now individually defines
the number of regions that it needs to map in the MMU. the number of regions that it needs to map in the MMU.
- Added the following new design documents: - Added the following new design documents:
- `Authentication framework`_ - `Authentication framework`_
- `Firmware Update`_ - `Firmware Update`_
- `TF Reset Design`_ - `TF-A Reset Design`_
- `Power Domain Topology Design`_ - `Power Domain Topology Design`_
- Applied the new image terminology to the code base and documentation, as - Applied the new image terminology to the code base and documentation, as
described on the `TF wiki on GitHub`_. described on the `TF-A wiki on GitHub`_.
- The build system has been reworked to improve readability and facilitate - The build system has been reworked to improve readability and facilitate
adding future extensions. adding future extensions.
- On ARM standard platforms, BL31 uses the boot console during cold boot - On Arm standard platforms, BL31 uses the boot console during cold boot
but switches to the runtime console for any later logs at runtime. The TSP but switches to the runtime console for any later logs at runtime. The TSP
uses the runtime console for all output. uses the runtime console for all output.
- Implemented a basic NOR flash driver for ARM platforms. It programs the - Implemented a basic NOR flash driver for Arm platforms. It programs the
device using CFI (Common Flash Interface) standard commands. device using CFI (Common Flash Interface) standard commands.
- Implemented support for booting EL3 payloads on ARM platforms, which - Implemented support for booting EL3 payloads on Arm platforms, which
reduces the complexity of developing EL3 baremetal code by doing essential reduces the complexity of developing EL3 baremetal code by doing essential
baremetal initialization. baremetal initialization.
- Provided separate drivers for GICv3 and GICv2. These expect the entire - Provided separate drivers for GICv3 and GICv2. These expect the entire
software stack to use either GICv2 or GICv3; hybrid GIC software systems software stack to use either GICv2 or GICv3; hybrid GIC software systems
are no longer supported and the legacy ARM GIC driver has been deprecated. are no longer supported and the legacy Arm GIC driver has been deprecated.
- Added support for Juno r1 and r2. A single set of Juno TF binaries can run - Added support for Juno r1 and r2. A single set of Juno TF-A binaries can run
on Juno r0, r1 and r2 boards. Note that this TF version depends on a Linaro on Juno r0, r1 and r2 boards. Note that this TF-A version depends on a Linaro
release that does *not* contain Juno r2 support. release that does *not* contain Juno r2 support.
- Added support for MediaTek mt8173 platform. - Added support for MediaTek mt8173 platform.
- Implemented a generic driver for ARM CCN IP. - Implemented a generic driver for Arm CCN IP.
- Major rework of the PSCI implementation. - Major rework of the PSCI implementation.
@ -612,7 +610,7 @@ New features
- Better alignment with version 1.0 of the PSCI specification. - Better alignment with version 1.0 of the PSCI specification.
- Added support for the SYSTEM\_SUSPEND PSCI API on ARM platforms. When invoked - Added support for the SYSTEM\_SUSPEND PSCI API on Arm platforms. When invoked
on the last running core on a supported platform, this puts the system on the last running core on a supported platform, this puts the system
into a low power mode with memory retention. into a low power mode with memory retention.
@ -625,17 +623,17 @@ New features
- Added support for NVidia Tegra T210 and T132 SoCs. - Added support for NVidia Tegra T210 and T132 SoCs.
- Reorganised ARM platforms ports to greatly improve code shareability and - Reorganised Arm platforms ports to greatly improve code shareability and
facilitate the reuse of some of this code by other platforms. facilitate the reuse of some of this code by other platforms.
- Added support for ARM Cortex-A72 processor in the CPU specific framework. - Added support for Arm Cortex-A72 processor in the CPU specific framework.
- Provided better error handling. Platform ports can now define their own - Provided better error handling. Platform ports can now define their own
error handling, for example to perform platform specific bookkeeping or error handling, for example to perform platform specific bookkeeping or
post-error actions. post-error actions.
- Implemented a unified driver for ARM Cache Coherent Interconnects used for - Implemented a unified driver for Arm Cache Coherent Interconnects used for
both CCI-400 & CCI-500 IPs. ARM platforms ports have been migrated to this both CCI-400 & CCI-500 IPs. Arm platforms ports have been migrated to this
common driver. The standalone CCI-400 driver has been deprecated. common driver. The standalone CCI-400 driver has been deprecated.
Issues resolved since last release Issues resolved since last release
@ -668,10 +666,10 @@ Known issues
clarity and completeness. In particular, the design documentation is clarity and completeness. In particular, the design documentation is
incomplete for PSCI, the TSP(D) and the Juno platform. incomplete for PSCI, the TSP(D) and the Juno platform.
- Building TF with compiler optimisations disabled (``-O0``) fails. - Building TF-A with compiler optimisations disabled (``-O0``) fails.
ARM Trusted Firmware - version 1.1 Trusted Firmware-A - version 1.1
================================== ================================
New features New features
------------ ------------
@ -719,10 +717,10 @@ New features
applicable). Also, during a PSCI ``MIGRATE`` call, the SPD hook to migrate applicable). Also, during a PSCI ``MIGRATE`` call, the SPD hook to migrate
the Trusted OS is invoked. the Trusted OS is invoked.
- It is now possible to build Trusted Firmware without marking at least an - It is now possible to build TF-A without marking at least an extra page of
extra page of memory as coherent. The build flag ``USE_COHERENT_MEM`` can be memory as coherent. The build flag ``USE_COHERENT_MEM`` can be used to
used to choose between the two implementations. This has been made possible choose between the two implementations. This has been made possible through
through these changes. these changes.
- An implementation of Bakery locks, where the locks are not allocated in - An implementation of Bakery locks, where the locks are not allocated in
coherent memory has been added. coherent memory has been added.
@ -774,8 +772,7 @@ New features
create mappings only for areas in the memory map that it needs. create mappings only for areas in the memory map that it needs.
- A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been - A Secure Payload Dispatcher (OPTEED) for the OP-TEE Trusted OS has been
added. Details of using it with ARM Trusted Firmware can be found in added. Details of using it with TF-A can be found in `OP-TEE Dispatcher`_
`OP-TEE Dispatcher`_
Issues resolved since last release Issues resolved since last release
---------------------------------- ----------------------------------
@ -789,7 +786,7 @@ Issues resolved since last release
- The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured - The top 16MB of the 2GB DDR-DRAM memory at 0x80000000 is configured
using the TZC-400 controller to be accessible only to the secure world. using the TZC-400 controller to be accessible only to the secure world.
- The ARM GIC driver is used to configure the GIC-400 instead of using a - The Arm GIC driver is used to configure the GIC-400 instead of using a
GIC driver private to the Juno port. GIC driver private to the Juno port.
- PSCI ``CPU_SUSPEND`` calls that target a standby state are now supported. - PSCI ``CPU_SUSPEND`` calls that target a standby state are now supported.
@ -823,7 +820,7 @@ Known issues
the model. the model.
- GICv3 support is experimental. There are known issues with GICv3 - GICv3 support is experimental. There are known issues with GICv3
initialization in the ARM Trusted Firmware. initialization in the TF-A.
- While this version greatly reduces the on-chip RAM requirements, there are - While this version greatly reduces the on-chip RAM requirements, there are
further RAM usage enhancements that could be made. further RAM usage enhancements that could be made.
@ -833,8 +830,8 @@ Known issues
- The Juno-specific firmware design documentation is incomplete. - The Juno-specific firmware design documentation is incomplete.
ARM Trusted Firmware - version 1.0 Trusted Firmware-A - version 1.0
================================== ================================
New features New features
------------ ------------
@ -970,14 +967,14 @@ Issues resolved since last release
- CPU idle now works on the publicized version of the Foundation FVP. - CPU idle now works on the publicized version of the Foundation FVP.
- All known issues relating to the compiler version used have now been - All known issues relating to the compiler version used have now been
resolved. This TF version uses Linaro toolchain 14.07 (based on GCC 4.9). resolved. This TF-A version uses Linaro toolchain 14.07 (based on GCC 4.9).
Known issues Known issues
------------ ------------
- GICv3 support is experimental. The Linux kernel patches to support this are - GICv3 support is experimental. The Linux kernel patches to support this are
not widely available. There are known issues with GICv3 initialization in not widely available. There are known issues with GICv3 initialization in
the ARM Trusted Firmware. the TF-A.
- While this version greatly reduces the on-chip RAM requirements, there are - While this version greatly reduces the on-chip RAM requirements, there are
further RAM usage enhancements that could be made. further RAM usage enhancements that could be made.
@ -1013,8 +1010,8 @@ Known issues
A similar change can be made to the other Cortex-A57-A53 Base FVP variants. A similar change can be made to the other Cortex-A57-A53 Base FVP variants.
ARM Trusted Firmware - version 0.4 Trusted Firmware-A - version 0.4
================================== ================================
New features New features
------------ ------------
@ -1110,41 +1107,41 @@ Issues resolved since last release
14.04) now correctly reports progress in the console. 14.04) now correctly reports progress in the console.
- Improved the Makefile structure to make it easier to separate out parts of - Improved the Makefile structure to make it easier to separate out parts of
the Trusted Firmware for re-use in platform ports. Also, improved target the TF-A for re-use in platform ports. Also, improved target dependency
dependency checking. checking.
Known issues Known issues
------------ ------------
- GICv3 support is experimental. The Linux kernel patches to support this are - GICv3 support is experimental. The Linux kernel patches to support this are
not widely available. There are known issues with GICv3 initialization in not widely available. There are known issues with GICv3 initialization in
the ARM Trusted Firmware. the TF-A.
- Dynamic image loading is not available yet. The current image loader - Dynamic image loading is not available yet. The current image loader
implementation (used to load BL2 and all subsequent images) has some implementation (used to load BL2 and all subsequent images) has some
limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
to loading errors, even if the images should theoretically fit in memory. to loading errors, even if the images should theoretically fit in memory.
- The ARM Trusted Firmware still uses too much on-chip Trusted SRAM. A number - TF-A still uses too much on-chip Trusted SRAM. A number of RAM usage
of RAM usage enhancements have been identified to rectify this situation. enhancements have been identified to rectify this situation.
- CPU idle does not work on the advertised version of the Foundation FVP. - CPU idle does not work on the advertised version of the Foundation FVP.
Some FVP fixes are required that are not available externally at the time Some FVP fixes are required that are not available externally at the time
of writing. This can be worked around by disabling CPU idle in the Linux of writing. This can be worked around by disabling CPU idle in the Linux
kernel. kernel.
- Various bugs in ARM Trusted Firmware, UEFI and the Linux kernel have been - Various bugs in TF-A, UEFI and the Linux kernel have been observed when
observed when using Linaro toolchain versions later than 13.11. Although using Linaro toolchain versions later than 13.11. Although most of these
most of these have been fixed, some remain at the time of writing. These have been fixed, some remain at the time of writing. These mainly seem to
mainly seem to relate to a subtle change in the way the compiler converts relate to a subtle change in the way the compiler converts between 64-bit
between 64-bit and 32-bit values (e.g. during casting operations), which and 32-bit values (e.g. during casting operations), which reveals
reveals previously hidden bugs in client code. previously hidden bugs in client code.
- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and - The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
ARM Trusted Firmware - version 0.3 Trusted Firmware-A - version 0.3
================================== ================================
New features New features
------------ ------------
@ -1170,9 +1167,9 @@ New features
- The PSCI AFFINITY\_INFO api has undergone limited testing on the Base FVPs to - The PSCI AFFINITY\_INFO api has undergone limited testing on the Base FVPs to
allow experimental use. allow experimental use.
- Required C library and runtime header files are now included locally in ARM - Required C library and runtime header files are now included locally in
Trusted Firmware instead of depending on the toolchain standard include TF-A instead of depending on the toolchain standard include paths. The
paths. The local implementation has been cleaned up and reduced in scope. local implementation has been cleaned up and reduced in scope.
- Added I/O abstraction framework, primarily to allow generic code to load - Added I/O abstraction framework, primarily to allow generic code to load
images in a platform-independent way. The existing image loading code has images in a platform-independent way. The existing image loading code has
@ -1232,28 +1229,27 @@ Issues resolved since last release
- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` have now been tested (to - PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` have now been tested (to
a limited extent). a limited extent).
- The ARM Trusted Firmware build artifacts are now placed in the ``./build`` - The TF-A build artifacts are now placed in the ``./build`` directory and
directory and sub-directories instead of being placed in the root of the sub-directories instead of being placed in the root of the project.
project.
- The ARM Trusted Firmware is now free from build warnings. Build warnings - TF-A is now free from build warnings. Build warnings are now treated as
are now treated as errors. errors.
- The ARM Trusted Firmware now provides C library support locally within the - TF-A now provides C library support locally within the project to maintain
project to maintain compatibility between toolchains/systems. compatibility between toolchains/systems.
- The PSCI locking code has been reworked so it no longer takes locks in an - The PSCI locking code has been reworked so it no longer takes locks in an
incorrect sequence. incorrect sequence.
- The RAM-disk method of loading a Linux file-system has been confirmed to - The RAM-disk method of loading a Linux file-system has been confirmed to
work with the ARM Trusted Firmware and Linux kernel version (based on work with the TF-A and Linux kernel version (based on version 3.13) used
version 3.13) used in this release, for both Foundation and Base FVPs. in this release, for both Foundation and Base FVPs.
Known issues Known issues
------------ ------------
The following is a list of issues which are expected to be fixed in the future The following is a list of issues which are expected to be fixed in the future
releases of the ARM Trusted Firmware. releases of TF-A.
- The TrustZone Address Space Controller (TZC-400) is not being programmed - The TrustZone Address Space Controller (TZC-400) is not being programmed
yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported. yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
@ -1262,28 +1258,28 @@ releases of the ARM Trusted Firmware.
- GICv3 support is experimental. The Linux kernel patches to support this are - GICv3 support is experimental. The Linux kernel patches to support this are
not widely available. There are known issues with GICv3 initialization in not widely available. There are known issues with GICv3 initialization in
the ARM Trusted Firmware. TF-A.
- Dynamic image loading is not available yet. The current image loader - Dynamic image loading is not available yet. The current image loader
implementation (used to load BL2 and all subsequent images) has some implementation (used to load BL2 and all subsequent images) has some
limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead limitations. Changing BL2 or BL3-1 load addresses in certain ways can lead
to loading errors, even if the images should theoretically fit in memory. to loading errors, even if the images should theoretically fit in memory.
- The ARM Trusted Firmware uses too much on-chip Trusted SRAM. Currently the - TF-A uses too much on-chip Trusted SRAM. Currently the Test Secure-EL1
Test Secure-EL1 Payload (BL3-2) executes in Trusted DRAM since there is not Payload (BL3-2) executes in Trusted DRAM since there is not enough SRAM.
enough SRAM. A number of RAM usage enhancements have been identified to A number of RAM usage enhancements have been identified to rectify this
rectify this situation. situation.
- CPU idle does not work on the advertised version of the Foundation FVP. - CPU idle does not work on the advertised version of the Foundation FVP.
Some FVP fixes are required that are not available externally at the time Some FVP fixes are required that are not available externally at the time
of writing. of writing.
- Various bugs in ARM Trusted Firmware, UEFI and the Linux kernel have been - Various bugs in TF-A, UEFI and the Linux kernel have been observed when
observed when using Linaro toolchain versions later than 13.11. Although using Linaro toolchain versions later than 13.11. Although most of these
most of these have been fixed, some remain at the time of writing. These have been fixed, some remain at the time of writing. These mainly seem to
mainly seem to relate to a subtle change in the way the compiler converts relate to a subtle change in the way the compiler converts between 64-bit
between 64-bit and 32-bit values (e.g. during casting operations), which and 32-bit values (e.g. during casting operations), which reveals
reveals previously hidden bugs in client code. previously hidden bugs in client code.
- The tested filesystem used for this release (Linaro AArch64 OpenEmbedded - The tested filesystem used for this release (Linaro AArch64 OpenEmbedded
14.01) does not report progress correctly in the console. It only seems to 14.01) does not report progress correctly in the console. It only seems to
@ -1292,15 +1288,14 @@ releases of the ARM Trusted Firmware.
exhibit the problem. exhibit the problem.
- The Makefile structure doesn't make it easy to separate out parts of the - The Makefile structure doesn't make it easy to separate out parts of the
Trusted Firmware for re-use in platform ports, for example if only BL3-1 is TF-A for re-use in platform ports, for example if only BL3-1 is required in
required in a platform port. Also, dependency checking in the Makefile is a platform port. Also, dependency checking in the Makefile is flawed.
flawed.
- The firmware design documentation for the Test Secure-EL1 Payload (TSP) and - The firmware design documentation for the Test Secure-EL1 Payload (TSP) and
its dispatcher (TSPD) is incomplete. Similarly for the PSCI section. its dispatcher (TSPD) is incomplete. Similarly for the PSCI section.
ARM Trusted Firmware - version 0.2 Trusted Firmware-A - version 0.2
================================== ================================
New features New features
------------ ------------
@ -1320,7 +1315,7 @@ Known issues
------------ ------------
The following is a list of issues which are expected to be fixed in the future The following is a list of issues which are expected to be fixed in the future
releases of the ARM Trusted Firmware. releases of TF-A.
- The TrustZone Address Space Controller (TZC-400) is not being programmed - The TrustZone Address Space Controller (TZC-400) is not being programmed
yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported. yet. Use of model parameter ``-C bp.secure_memory=1`` is not supported.
@ -1330,7 +1325,7 @@ releases of the ARM Trusted Firmware.
- GICv3 support is experimental. The Linux kernel patches to support this are - GICv3 support is experimental. The Linux kernel patches to support this are
not widely available. There are known issues with GICv3 initialization in not widely available. There are known issues with GICv3 initialization in
the ARM Trusted Firmware. TF-A.
- Dynamic image loading is not available yet. The current image loader - Dynamic image loading is not available yet. The current image loader
implementation (used to load BL2 and all subsequent images) has some implementation (used to load BL2 and all subsequent images) has some
@ -1340,42 +1335,40 @@ releases of the ARM Trusted Firmware.
- Although support for PSCI ``CPU_SUSPEND`` is present, it is not yet stable - Although support for PSCI ``CPU_SUSPEND`` is present, it is not yet stable
and ready for use. and ready for use.
- PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` are implemented but have not - PSCI API calls ``AFFINITY_INFO`` & ``PSCI_VERSION`` are implemented but have
been tested. not been tested.
- The ARM Trusted Firmware make files result in all build artifacts being - The TF-A make files result in all build artifacts being placed in the root
placed in the root of the project. These should be placed in appropriate of the project. These should be placed in appropriate sub-directories.
sub-directories.
- The compilation of ARM Trusted Firmware is not free from compilation - The compilation of TF-A is not free from compilation warnings. Some of these
warnings. Some of these warnings have not been investigated yet so they warnings have not been investigated yet so they could mask real bugs.
could mask real bugs.
- The ARM Trusted Firmware currently uses toolchain/system include files like - TF-A currently uses toolchain/system include files like stdio.h. It should
stdio.h. It should provide versions of these within the project to maintain provide versions of these within the project to maintain compatibility
compatibility between toolchains/systems. between toolchains/systems.
- The PSCI code takes some locks in an incorrect sequence. This may cause - The PSCI code takes some locks in an incorrect sequence. This may cause
problems with suspend and hotplug in certain conditions. problems with suspend and hotplug in certain conditions.
- The Linux kernel used in this release is based on version 3.12-rc4. Using - The Linux kernel used in this release is based on version 3.12-rc4. Using
this kernel with the ARM Trusted Firmware fails to start the file-system as this kernel with the TF-A fails to start the file-system as a RAM-disk. It
a RAM-disk. It fails to execute user-space ``init`` from the RAM-disk. As an fails to execute user-space ``init`` from the RAM-disk. As an alternative,
alternative, the VirtioBlock mechanism can be used to provide a file-system the VirtioBlock mechanism can be used to provide a file-system to the
to the kernel. kernel.
-------------- --------------
*Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _PSCI Integration Guide: psci-lib-integration-guide.rst .. _PSCI Integration Guide: psci-lib-integration-guide.rst
.. _Developer Certificate of Origin: ../dco.txt .. _Developer Certificate of Origin: ../dco.txt
.. _Contribution Guide: ../contributing.rst .. _Contribution Guide: ../contributing.rst
.. _Authentication framework: auth-framework.rst .. _Authentication framework: auth-framework.rst
.. _Firmware Update: firmware-update.rst .. _Firmware Update: firmware-update.rst
.. _TF Reset Design: reset-design.rst .. _TF-A Reset Design: reset-design.rst
.. _Power Domain Topology Design: psci-pd-tree.rst .. _Power Domain Topology Design: psci-pd-tree.rst
.. _TF wiki on GitHub: https://github.com/ARM-software/arm-trusted-firmware/wiki/ARM-Trusted-Firmware-Image-Terminology .. _TF-A wiki on GitHub: https://github.com/ARM-software/arm-trusted-firmware/wiki/ARM-Trusted-Firmware-Image-Terminology
.. _Authentication Framework: auth-framework.rst .. _Authentication Framework: auth-framework.rst
.. _OP-TEE Dispatcher: optee-dispatcher.rst .. _OP-TEE Dispatcher: optee-dispatcher.rst
.. _tf-issue#501: https://github.com/ARM-software/tf-issues/issues/501 .. _tf-issue#501: https://github.com/ARM-software/tf-issues/issues/501

View File

@ -1,4 +1,4 @@
ARM CPU Specific Build Macros Arm CPU Specific Build Macros
============================= =============================
@ -14,8 +14,8 @@ for a specific CPU on a platform.
Security Vulnerability Workarounds Security Vulnerability Workarounds
---------------------------------- ----------------------------------
ARM Trusted Firmware exports a series of build flags which control which TF-A exports a series of build flags which control which security
security vulnerability workarounds should be applied at runtime. vulnerability workarounds should be applied at runtime.
- ``WORKAROUND_CVE_2017_5715``: Enables the security workaround for - ``WORKAROUND_CVE_2017_5715``: Enables the security workaround for
`CVE-2017-5715`_. Defaults to 1. `CVE-2017-5715`_. Defaults to 1.
@ -23,10 +23,9 @@ security vulnerability workarounds should be applied at runtime.
CPU Errata Workarounds CPU Errata Workarounds
---------------------- ----------------------
ARM Trusted Firmware exports a series of build flags which control the TF-A exports a series of build flags which control the errata workarounds that
errata workarounds that are applied to each CPU by the reset handler. The are applied to each CPU by the reset handler. The errata details can be found
errata details can be found in the CPU specific errata documents published in the CPU specific errata documents published by Arm:
by ARM:
- `Cortex-A53 MPCore Software Developers Errata Notice`_ - `Cortex-A53 MPCore Software Developers Errata Notice`_
- `Cortex-A57 MPCore Software Developers Errata Notice`_ - `Cortex-A57 MPCore Software Developers Errata Notice`_
@ -135,8 +134,8 @@ architecture that can be enabled by the platform as desired.
- ``A53_DISABLE_NON_TEMPORAL_HINT``: This flag disables the cache non-temporal - ``A53_DISABLE_NON_TEMPORAL_HINT``: This flag disables the cache non-temporal
hint. The LDNP/STNP instructions as implemented on Cortex-A53 do not behave hint. The LDNP/STNP instructions as implemented on Cortex-A53 do not behave
in a way most programmers expect, and will most probably result in a in a way most programmers expect, and will most probably result in a
significant speed degradation to any code that employs them. The ARMv8-A significant speed degradation to any code that employs them. The Armv8-A
architecture (see ARM DDI 0487A.h, section D3.4.3) allows cores to ignore architecture (see Arm DDI 0487A.h, section D3.4.3) allows cores to ignore
the non-temporal hint and treat LDNP/STNP as LDP/STP instead. Enabling this the non-temporal hint and treat LDNP/STNP as LDP/STP instead. Enabling this
flag enforces this behaviour. This needs to be enabled only for revisions flag enforces this behaviour. This needs to be enabled only for revisions
<= r0p3 of the CPU and is enabled by default. <= r0p3 of the CPU and is enabled by default.
@ -149,7 +148,7 @@ architecture that can be enabled by the platform as desired.
-------------- --------------
*Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2014-2018, Arm Limited and Contributors. All rights reserved.*
.. _CVE-2017-5715: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5715 .. _CVE-2017-5715: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5715
.. _Cortex-A53 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm048406/Cortex_A53_MPCore_Software_Developers_Errata_Notice.pdf .. _Cortex-A53 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm048406/Cortex_A53_MPCore_Software_Developers_Errata_Notice.pdf

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware Design Trusted Firmware-A design
=========================== =========================
.. section-numbering:: .. section-numbering::
@ -7,30 +7,27 @@ ARM Trusted Firmware Design
.. contents:: .. contents::
The ARM Trusted Firmware implements a subset of the Trusted Board Boot Trusted Firmware-A (TF-A) implements a subset of the Trusted Board Boot
Requirements (TBBR) Platform Design Document (PDD) [1]_ for ARM reference Requirements (TBBR) Platform Design Document (PDD) [1]_ for Arm reference
platforms. The TBB sequence starts when the platform is powered on and runs up platforms. The TBB sequence starts when the platform is powered on and runs up
to the stage where it hands-off control to firmware running in the normal to the stage where it hands-off control to firmware running in the normal
world in DRAM. This is the cold boot path. world in DRAM. This is the cold boot path.
The ARM Trusted Firmware also implements the Power State Coordination Interface TF-A also implements the Power State Coordination Interface PDD [2]_ as a
PDD [2]_ as a runtime service. PSCI is the interface from normal world software runtime service. PSCI is the interface from normal world software to firmware
to firmware implementing power management use-cases (for example, secondary CPU implementing power management use-cases (for example, secondary CPU boot,
boot, hotplug and idle). Normal world software can access ARM Trusted Firmware hotplug and idle). Normal world software can access TF-A runtime services via
runtime services via the ARM SMC (Secure Monitor Call) instruction. The SMC the Arm SMC (Secure Monitor Call) instruction. The SMC instruction must be
instruction must be used as mandated by the SMC Calling Convention [3]_. used as mandated by the SMC Calling Convention [3]_.
The ARM Trusted Firmware implements a framework for configuring and managing TF-A implements a framework for configuring and managing interrupts generated
interrupts generated in either security state. The details of the interrupt in either security state. The details of the interrupt management framework
management framework and its design can be found in ARM Trusted Firmware and its design can be found in TF-A Interrupt Management Design guide [4]_.
Interrupt Management Design guide [4]_.
The ARM Trusted Firmware also implements a library for setting up and managing TF-A also implements a library for setting up and managing the translation
the translation tables. The details of this library can be found in tables. The details of this library can be found in `Xlat_tables design`_.
`Xlat_tables design`_.
The ARM Trusted Firmware can be built to support either AArch64 or AArch32 TF-A can be built to support either AArch64 or AArch32 execution state.
execution state.
Cold boot Cold boot
--------- ---------
@ -46,9 +43,8 @@ the primary CPU has performed enough initialization to boot them.
Refer to the `Reset Design`_ for more information on the effect of the Refer to the `Reset Design`_ for more information on the effect of the
``COLD_BOOT_SINGLE_CPU`` platform build option. ``COLD_BOOT_SINGLE_CPU`` platform build option.
The cold boot path in this implementation of the ARM Trusted Firmware, The cold boot path in this implementation of TF-A depends on the execution
depends on the execution state. state. For AArch64, it is divided into five steps (in order of execution):
For AArch64, it is divided into five steps (in order of execution):
- Boot Loader stage 1 (BL1) *AP Trusted ROM* - Boot Loader stage 1 (BL1) *AP Trusted ROM*
- Boot Loader stage 2 (BL2) *Trusted Boot Firmware* - Boot Loader stage 2 (BL2) *Trusted Boot Firmware*
@ -63,7 +59,7 @@ For AArch32, it is divided into four steps (in order of execution):
- Boot Loader stage 3-2 (BL32) *EL3 Runtime Software* - Boot Loader stage 3-2 (BL32) *EL3 Runtime Software*
- Boot Loader stage 3-3 (BL33) *Non-trusted Firmware* - Boot Loader stage 3-3 (BL33) *Non-trusted Firmware*
ARM development platforms (Fixed Virtual Platforms (FVPs) and Juno) implement a Arm development platforms (Fixed Virtual Platforms (FVPs) and Juno) implement a
combination of the following types of memory regions. Each bootloader stage uses combination of the following types of memory regions. Each bootloader stage uses
one or more of these memory regions. one or more of these memory regions.
@ -135,7 +131,7 @@ This stage begins execution from the platform's reset vector at EL3. The reset
address is platform dependent but it is usually located in a Trusted ROM area. address is platform dependent but it is usually located in a Trusted ROM area.
The BL1 data section is copied to trusted SRAM at runtime. The BL1 data section is copied to trusted SRAM at runtime.
On the ARM development platforms, BL1 code starts execution from the reset On the Arm development platforms, BL1 code starts execution from the reset
vector defined by the constant ``BL1_RO_BASE``. The BL1 data section is copied vector defined by the constant ``BL1_RO_BASE``. The BL1 data section is copied
to the top of trusted SRAM as defined by the constant ``BL1_RW_BASE``. to the top of trusted SRAM as defined by the constant ``BL1_RW_BASE``.
@ -205,7 +201,7 @@ BL1 performs minimal architectural initialization as follows.
0x1b : Undefined mode 0x1b : Undefined mode
0x1f : System mode 0x1f : System mode
The ``plat_report_exception()`` implementation on the ARM FVP port programs The ``plat_report_exception()`` implementation on the Arm FVP port programs
the Versatile Express System LED register in the following format to the Versatile Express System LED register in the following format to
indicate the occurence of an unexpected exception: indicate the occurence of an unexpected exception:
@ -299,7 +295,7 @@ BL1 performs minimal architectural initialization as follows.
Platform initialization Platform initialization
^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
On ARM platforms, BL1 performs the following platform initializations: On Arm platforms, BL1 performs the following platform initializations:
- Enable the Trusted Watchdog. - Enable the Trusted Watchdog.
- Initialize the console. - Initialize the console.
@ -368,18 +364,18 @@ Architectural initialization
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For AArch64, BL2 performs the minimal architectural initialization required For AArch64, BL2 performs the minimal architectural initialization required
for subsequent stages of the ARM Trusted Firmware and normal world software. for subsequent stages of TF-A and normal world software. EL1 and EL0 are given
EL1 and EL0 are given access to Floating Point and Advanced SIMD registers access to Floating Point and Advanced SIMD registers by clearing the
by clearing the ``CPACR.FPEN`` bits. ``CPACR.FPEN`` bits.
For AArch32, the minimal architectural initialization required for subsequent For AArch32, the minimal architectural initialization required for subsequent
stages of the ARM Trusted Firmware and normal world software is taken care of stages of TF-A and normal world software is taken care of in BL1 as both BL1
in BL1 as both BL1 and BL2 execute at PL1. and BL2 execute at PL1.
Platform initialization Platform initialization
^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
On ARM platforms, BL2 performs the following platform initializations: On Arm platforms, BL2 performs the following platform initializations:
- Initialize the console. - Initialize the console.
- Configure any required platform storage to allow loading further bootloader - Configure any required platform storage to allow loading further bootloader
@ -416,7 +412,7 @@ SCP\_BL2 (System Control Processor Firmware) image load
Some systems have a separate System Control Processor (SCP) for power, clock, Some systems have a separate System Control Processor (SCP) for power, clock,
reset and system control. BL2 loads the optional SCP\_BL2 image from platform reset and system control. BL2 loads the optional SCP\_BL2 image from platform
storage into a platform-specific region of secure memory. The subsequent storage into a platform-specific region of secure memory. The subsequent
handling of SCP\_BL2 is platform specific. For example, on the Juno ARM handling of SCP\_BL2 is platform specific. For example, on the Juno Arm
development platform port the image is transferred into SCP's internal memory development platform port the image is transferred into SCP's internal memory
using the Boot Over MHU (BOM) protocol after being loaded in the trusted SRAM using the Boot Over MHU (BOM) protocol after being loaded in the trusted SRAM
memory. The SCP executes SCP\_BL2 and signals to the Application Processor (AP) memory. The SCP executes SCP\_BL2 and signals to the Application Processor (AP)
@ -475,11 +471,11 @@ BL2 execution continues as follows:
Running BL2 at EL3 execution level Running BL2 at EL3 execution level
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some platforms have a non-TF Boot ROM that expects the next boot stage Some platforms have a non-TF-A Boot ROM that expects the next boot stage
to execute at EL3. On these platforms, TF BL1 is a waste of memory to execute at EL3. On these platforms, TF-A BL1 is a waste of memory
as its only purpose is to ensure TF BL2 is entered at S-EL1. To avoid as its only purpose is to ensure TF-A BL2 is entered at S-EL1. To avoid
this waste, a special mode enables BL2 to execute at EL3, which allows this waste, a special mode enables BL2 to execute at EL3, which allows
a non-TF Boot ROM to load and jump directly to BL2. This mode is selected a non-TF-A Boot ROM to load and jump directly to BL2. This mode is selected
when the build flag BL2_AT_EL3 is enabled. The main differences in this when the build flag BL2_AT_EL3 is enabled. The main differences in this
mode are: mode are:
@ -566,7 +562,7 @@ Platform initialization
BL31 performs detailed platform initialization, which enables normal world BL31 performs detailed platform initialization, which enables normal world
software to function correctly. software to function correctly.
On ARM platforms, this consists of the following: On Arm platforms, this consists of the following:
- Initialize the console. - Initialize the console.
- Configure the Interconnect to enable hardware coherency. - Configure the Interconnect to enable hardware coherency.
@ -622,9 +618,9 @@ Using alternative Trusted Boot Firmware in place of BL1 & BL2 (AArch64 only)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some platforms have existing implementations of Trusted Boot Firmware that Some platforms have existing implementations of Trusted Boot Firmware that
would like to use ARM Trusted Firmware BL31 for the EL3 Runtime Software. To would like to use TF-A BL31 for the EL3 Runtime Software. To enable this
enable this firmware architecture it is important to provide a fully documented firmware architecture it is important to provide a fully documented and stable
and stable interface between the Trusted Boot Firmware and BL31. interface between the Trusted Boot Firmware and BL31.
Future changes to the BL31 interface will be done in a backwards compatible Future changes to the BL31 interface will be done in a backwards compatible
way, and this enables these firmware components to be independently enhanced/ way, and this enables these firmware components to be independently enhanced/
@ -650,7 +646,7 @@ platform code in BL31:
:: ::
X0 : Reserved for common Trusted Firmware information X0 : Reserved for common TF-A information
X1 : Platform specific information X1 : Platform specific information
BL31 zero-init sections (e.g. ``.bss``) should not contain valid data on entry, BL31 zero-init sections (e.g. ``.bss``) should not contain valid data on entry,
@ -665,10 +661,10 @@ used by the common BL31 code.
The convention is that ``X0`` conveys information regarding the BL31, BL32 and The convention is that ``X0`` conveys information regarding the BL31, BL32 and
BL33 images from the Trusted Boot firmware and ``X1`` can be used for other BL33 images from the Trusted Boot firmware and ``X1`` can be used for other
platform specific purpose. This convention allows platforms which use ARM platform specific purpose. This convention allows platforms which use TF-A's
Trusted Firmware's BL1 and BL2 images to transfer additional platform specific BL1 and BL2 images to transfer additional platform specific information from
information from Secure Boot without conflicting with future evolution of the Secure Boot without conflicting with future evolution of TF-A using ``X0`` to
Trusted Firmware using ``X0`` to pass a ``bl31_params`` structure. pass a ``bl31_params`` structure.
BL31 common and SPD initialization code depends on image and entrypoint BL31 common and SPD initialization code depends on image and entrypoint
information about BL33 and BL32, which is provided via BL31 platform APIs. information about BL33 and BL32, which is provided via BL31 platform APIs.
@ -680,8 +676,8 @@ Cold boot Initialization parameters. This data may need to be cleaned out of
the CPU caches if it is provided by an earlier boot stage and then accessed by the CPU caches if it is provided by an earlier boot stage and then accessed by
BL31 platform code before the caches are enabled. BL31 platform code before the caches are enabled.
ARM Trusted Firmware's BL2 implementation passes a ``bl31_params`` structure in TF-A's BL2 implementation passes a ``bl31_params`` structure in
``X0`` and the ARM development platforms interpret this in the BL31 platform ``X0`` and the Arm development platforms interpret this in the BL31 platform
code. code.
MMU, Data caches & Coherency MMU, Data caches & Coherency
@ -722,12 +718,11 @@ to simplify this action.
Required CPU state for BL31 Warm boot initialization Required CPU state for BL31 Warm boot initialization
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
When requesting a CPU power-on, or suspending a running CPU, ARM Trusted When requesting a CPU power-on, or suspending a running CPU, TF-A provides
Firmware provides the platform power management code with a Warm boot the platform power management code with a Warm boot initialization
initialization entry-point, to be invoked by the CPU immediately after the entry-point, to be invoked by the CPU immediately after the reset handler.
reset handler. On entry to the Warm boot initialization function the calling On entry to the Warm boot initialization function the calling CPU must be in
CPU must be in AArch64 EL3, little-endian data access and all interrupt sources AArch64 EL3, little-endian data access and all interrupt sources masked:
masked:
:: ::
@ -769,7 +764,7 @@ platform code in AArch32 EL3 Runtime Software:
:: ::
R0 : Reserved for common Trusted Firmware information R0 : Reserved for common TF-A information
R1 : Platform specific information R1 : Platform specific information
Use of the R0 and R1 parameters Use of the R0 and R1 parameters
@ -778,10 +773,9 @@ Use of the R0 and R1 parameters
The parameters are platform specific and the convention is that ``R0`` conveys The parameters are platform specific and the convention is that ``R0`` conveys
information regarding the BL3x images from the Trusted Boot firmware and ``R1`` information regarding the BL3x images from the Trusted Boot firmware and ``R1``
can be used for other platform specific purpose. This convention allows can be used for other platform specific purpose. This convention allows
platforms which use ARM Trusted Firmware's BL1 and BL2 images to transfer platforms which use TF-A's BL1 and BL2 images to transfer additional platform
additional platform specific information from Secure Boot without conflicting specific information from Secure Boot without conflicting with future
with future evolution of the Trusted Firmware using ``R0`` to pass a ``bl_params`` evolution of TF-A using ``R0`` to pass a ``bl_params`` structure.
structure.
The AArch32 EL3 Runtime Software is responsible for entry into BL33. This The AArch32 EL3 Runtime Software is responsible for entry into BL33. This
information can be obtained in a platform defined manner, e.g. compiled into information can be obtained in a platform defined manner, e.g. compiled into
@ -791,7 +785,7 @@ via the Cold boot Initialization parameters. This data may need to be cleaned
out of the CPU caches if it is provided by an earlier boot stage and then out of the CPU caches if it is provided by an earlier boot stage and then
accessed by AArch32 EL3 Runtime Software before the caches are enabled. accessed by AArch32 EL3 Runtime Software before the caches are enabled.
When using AArch32 EL3 Runtime Software, the ARM development platforms pass a When using AArch32 EL3 Runtime Software, the Arm development platforms pass a
``bl_params`` structure in ``R0`` from BL2 to be interpreted by AArch32 EL3 Runtime ``bl_params`` structure in ``R0`` from BL2 to be interpreted by AArch32 EL3 Runtime
Software platform code. Software platform code.
@ -814,9 +808,9 @@ Required CPU state for warm boot initialization
When requesting a CPU power-on, or suspending a running CPU, AArch32 EL3 When requesting a CPU power-on, or suspending a running CPU, AArch32 EL3
Runtime Software must ensure execution of a warm boot initialization entrypoint. Runtime Software must ensure execution of a warm boot initialization entrypoint.
If ARM Trusted Firmware BL1 is used and the PROGRAMMABLE\_RESET\_ADDRESS build If TF-A BL1 is used and the PROGRAMMABLE\_RESET\_ADDRESS build flag is false,
flag is false, then AArch32 EL3 Runtime Software must ensure that BL1 branches then AArch32 EL3 Runtime Software must ensure that BL1 branches to the warm
to the warm boot entrypoint by arranging for the BL1 platform function, boot entrypoint by arranging for the BL1 platform function,
plat\_get\_my\_entrypoint(), to return a non-zero value. plat\_get\_my\_entrypoint(), to return a non-zero value.
In this case, the warm boot entrypoint must be in AArch32 EL3, little-endian In this case, the warm boot entrypoint must be in AArch32 EL3, little-endian
@ -827,7 +821,7 @@ data access and all interrupt sources masked:
PSTATE.AIF = 0x7 PSTATE.AIF = 0x7
SCTLR.EE = 0 SCTLR.EE = 0
The warm boot entrypoint may be implemented by using the ARM Trusted Firmware The warm boot entrypoint may be implemented by using TF-A
``psci_warmboot_entrypoint()`` function. In that case, the platform must fulfil ``psci_warmboot_entrypoint()`` function. In that case, the platform must fulfil
the pre-requisites mentioned in the `PSCI Library integration guide`_. the pre-requisites mentioned in the `PSCI Library integration guide`_.
@ -860,7 +854,7 @@ not all been instantiated in the current implementation.
This service is for management of the entire system. The Power State This service is for management of the entire system. The Power State
Coordination Interface (`PSCI`_) is the first set of standard service calls Coordination Interface (`PSCI`_) is the first set of standard service calls
defined by ARM (see PSCI section later). defined by Arm (see PSCI section later).
#. Secure-EL1 Payload Dispatcher service #. Secure-EL1 Payload Dispatcher service
@ -874,12 +868,12 @@ not all been instantiated in the current implementation.
The interface between the EL3 Runtime Software and the Secure-EL1 Payload is The interface between the EL3 Runtime Software and the Secure-EL1 Payload is
not defined by the `SMCCC`_ or any other standard. As a result, each not defined by the `SMCCC`_ or any other standard. As a result, each
Secure-EL1 Payload requires a specific Secure Monitor that runs as a runtime Secure-EL1 Payload requires a specific Secure Monitor that runs as a runtime
service - within ARM Trusted Firmware this service is referred to as the service - within TF-A this service is referred to as the Secure-EL1 Payload
Secure-EL1 Payload Dispatcher (SPD). Dispatcher (SPD).
ARM Trusted Firmware provides a Test Secure-EL1 Payload (TSP) and its TF-A provides a Test Secure-EL1 Payload (TSP) and its associated Dispatcher
associated Dispatcher (TSPD). Details of SPD design and TSP/TSPD operation (TSPD). Details of SPD design and TSP/TSPD operation are described in the
are described in the "Secure-EL1 Payloads and Dispatchers" section below. "Secure-EL1 Payloads and Dispatchers" section below.
#. CPU implementation service #. CPU implementation service
@ -887,7 +881,7 @@ not all been instantiated in the current implementation.
services for a given platform e.g. access to processor errata workarounds. services for a given platform e.g. access to processor errata workarounds.
This service is currently unimplemented. This service is currently unimplemented.
Additional services for ARM Architecture, SiP and OEM calls can be implemented. Additional services for Arm Architecture, SiP and OEM calls can be implemented.
Each implemented service handles a range of SMC function identifiers as Each implemented service handles a range of SMC function identifiers as
described in the `SMCCC`_. described in the `SMCCC`_.
@ -1060,10 +1054,10 @@ registered with the generic PSCI code to be supported.
\*\*Note : These PSCI APIs require appropriate Secure Payload Dispatcher \*\*Note : These PSCI APIs require appropriate Secure Payload Dispatcher
hooks to be registered with the generic PSCI code to be supported. hooks to be registered with the generic PSCI code to be supported.
The PSCI implementation in ARM Trusted Firmware is a library which can be The PSCI implementation in TF-A is a library which can be integrated with
integrated with AArch64 or AArch32 EL3 Runtime Software for ARMv8-A systems. AArch64 or AArch32 EL3 Runtime Software for Armv8-A systems. A guide to
A guide to integrating PSCI library with AArch32 EL3 Runtime Software integrating PSCI library with AArch32 EL3 Runtime Software can be found
can be found `here`_. `here`_.
Secure-EL1 Payloads and Dispatchers Secure-EL1 Payloads and Dispatchers
----------------------------------- -----------------------------------
@ -1072,20 +1066,20 @@ On a production system that includes a Trusted OS running in Secure-EL1/EL0,
the Trusted OS is coupled with a companion runtime service in the BL31 the Trusted OS is coupled with a companion runtime service in the BL31
firmware. This service is responsible for the initialisation of the Trusted firmware. This service is responsible for the initialisation of the Trusted
OS and all communications with it. The Trusted OS is the BL32 stage of the OS and all communications with it. The Trusted OS is the BL32 stage of the
boot flow in ARM Trusted Firmware. The firmware will attempt to locate, load boot flow in TF-A. The firmware will attempt to locate, load and execute a
and execute a BL32 image. BL32 image.
ARM Trusted Firmware uses a more general term for the BL32 software that runs TF-A uses a more general term for the BL32 software that runs at Secure-EL1 -
at Secure-EL1 - the *Secure-EL1 Payload* - as it is not always a Trusted OS. the *Secure-EL1 Payload* - as it is not always a Trusted OS.
The ARM Trusted Firmware provides a Test Secure-EL1 Payload (TSP) and a Test TF-A provides a Test Secure-EL1 Payload (TSP) and a Test Secure-EL1 Payload
Secure-EL1 Payload Dispatcher (TSPD) service as an example of how a Trusted OS Dispatcher (TSPD) service as an example of how a Trusted OS is supported on a
is supported on a production system using the Runtime Services Framework. On production system using the Runtime Services Framework. On such a system, the
such a system, the Test BL32 image and service are replaced by the Trusted OS Test BL32 image and service are replaced by the Trusted OS and its dispatcher
and its dispatcher service. The ARM Trusted Firmware build system expects that service. The TF-A build system expects that the dispatcher will define the
the dispatcher will define the build flag ``NEED_BL32`` to enable it to include build flag ``NEED_BL32`` to enable it to include the BL32 in the build either
the BL32 in the build either as a binary or to compile from source depending as a binary or to compile from source depending on whether the ``BL32`` build
on whether the ``BL32`` build option is specified or not. option is specified or not.
The TSP runs in Secure-EL1. It is designed to demonstrate synchronous The TSP runs in Secure-EL1. It is designed to demonstrate synchronous
communication with the normal-world software running in EL1/EL2. Communication communication with the normal-world software running in EL1/EL2. Communication
@ -1133,8 +1127,8 @@ prototype:
and is registered using the ``bl31_register_bl32_init()`` function. and is registered using the ``bl31_register_bl32_init()`` function.
Trusted Firmware supports two approaches for the SPD to pass control to BL32 TF-A supports two approaches for the SPD to pass control to BL32 before
before returning through EL3 and running the non-trusted firmware (BL33): returning through EL3 and running the non-trusted firmware (BL33):
#. In the BL32 setup function, use ``bl31_set_next_image_type()`` to #. In the BL32 setup function, use ``bl31_set_next_image_type()`` to
request that the exit from ``bl31_main()`` is to the BL32 entrypoint in request that the exit from ``bl31_main()`` is to the BL32 entrypoint in
@ -1153,8 +1147,8 @@ before returning through EL3 and running the non-trusted firmware (BL33):
``bl31_register_bl32_init()`` which provides a SPD-defined mechanism to ``bl31_register_bl32_init()`` which provides a SPD-defined mechanism to
invoke a 'world-switch synchronous call' to Secure-EL1 to run the BL32 invoke a 'world-switch synchronous call' to Secure-EL1 to run the BL32
entrypoint. entrypoint.
NOTE: The Test SPD service included with the Trusted Firmware provides one NOTE: The Test SPD service included with TF-A provides one implementation
implementation of such a mechanism. of such a mechanism.
On completion BL32 returns control to BL31 via a SMC, and on receipt the On completion BL32 returns control to BL31 via a SMC, and on receipt the
SPD service handler invokes the synchronous call return mechanism to return SPD service handler invokes the synchronous call return mechanism to return
@ -1260,11 +1254,11 @@ The sample crash output is shown below.
Guidelines for Reset Handlers Guidelines for Reset Handlers
----------------------------- -----------------------------
Trusted Firmware implements a framework that allows CPU and platform ports to TF-A implements a framework that allows CPU and platform ports to perform
perform actions very early after a CPU is released from reset in both the cold actions very early after a CPU is released from reset in both the cold and warm
and warm boot paths. This is done by calling the ``reset_handler()`` function in boot paths. This is done by calling the ``reset_handler()`` function in both
both the BL1 and BL31 images. It in turn calls the platform and CPU specific the BL1 and BL31 images. It in turn calls the platform and CPU specific reset
reset handling functions. handling functions.
Details for implementing a CPU specific reset handler can be found in Details for implementing a CPU specific reset handler can be found in
Section 8. Details for implementing a platform specific reset handler can be Section 8. Details for implementing a platform specific reset handler can be
@ -1330,11 +1324,11 @@ There are two ways to specify secure interrupt configuration:
CPU specific operations framework CPU specific operations framework
--------------------------------- ---------------------------------
Certain aspects of the ARMv8 architecture are implementation defined, Certain aspects of the Armv8-A architecture are implementation defined,
that is, certain behaviours are not architecturally defined, but must be defined that is, certain behaviours are not architecturally defined, but must be
and documented by individual processor implementations. The ARM Trusted defined and documented by individual processor implementations. TF-A
Firmware implements a framework which categorises the common implementation implements a framework which categorises the common implementation defined
defined behaviours and allows a processor to export its implementation of that behaviours and allows a processor to export its implementation of that
behaviour. The categories are: behaviour. The categories are:
#. Processor specific reset sequence. #. Processor specific reset sequence.
@ -1437,11 +1431,11 @@ expected by the crash reporting framework.
CPU errata status reporting CPU errata status reporting
~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
Errata workarounds for CPUs supported in ARM Trusted Firmware are applied during Errata workarounds for CPUs supported in TF-A are applied during both cold and
both cold and warm boots, shortly after reset. Individual Errata workarounds are warm boots, shortly after reset. Individual Errata workarounds are enabled as
enabled as build options. Some errata workarounds have potential run-time build options. Some errata workarounds have potential run-time implications;
implications; therefore some are enabled by default, others not. Platform ports therefore some are enabled by default, others not. Platform ports shall
shall override build options to enable or disable errata as appropriate. The CPU override build options to enable or disable errata as appropriate. The CPU
drivers take care of applying errata workarounds that are enabled and applicable drivers take care of applying errata workarounds that are enabled and applicable
to a given CPU. Refer to the section titled *CPU Errata Workarounds* in `CPUBM`_ to a given CPU. Refer to the section titled *CPU Errata Workarounds* in `CPUBM`_
for more information. for more information.
@ -1475,9 +1469,9 @@ macro, the errata reporting function, if it exists, must be named
``cpux_errata_report``. This function will always be called with MMU enabled; it ``cpux_errata_report``. This function will always be called with MMU enabled; it
must follow AAPCS and may use stack. must follow AAPCS and may use stack.
In a debug build of ARM Trusted Firmware, on a CPU that comes out of reset, both In a debug build of TF-A, on a CPU that comes out of reset, both BL1 and the
BL1 and the run time firmware (BL31 in AArch64, and BL32 in AArch32) will invoke runtime firmware (BL31 in AArch64, and BL32 in AArch32) will invoke errata
errata status reporting function, if one exists, for that type of CPU. status reporting function, if one exists, for that type of CPU.
To report the status of each errata workaround, the function shall use the To report the status of each errata workaround, the function shall use the
assembler macro ``report_errata``, passing it: assembler macro ``report_errata``, passing it:
@ -1493,9 +1487,9 @@ assembler macro ``report_errata``, passing it:
The errata status reporting function will be called once per CPU type/errata The errata status reporting function will be called once per CPU type/errata
combination during the software's active life time. combination during the software's active life time.
It's expected that whenever an errata workaround is submitted to ARM Trusted It's expected that whenever an errata workaround is submitted to TF-A, the
Firmware, the errata reporting function is appropriately extended to report its errata reporting function is appropriately extended to report its status as
status as well. well.
Reporting the status of errata workaround is for informational purpose only; it Reporting the status of errata workaround is for informational purpose only; it
has no functional significance. has no functional significance.
@ -1516,22 +1510,22 @@ Each bootloader image can be divided in 2 parts:
In the ELF terminology, they are called ``NOBITS`` sections. In the ELF terminology, they are called ``NOBITS`` sections.
All PROGBITS sections are grouped together at the beginning of the image, All PROGBITS sections are grouped together at the beginning of the image,
followed by all NOBITS sections. This is true for all Trusted Firmware images followed by all NOBITS sections. This is true for all TF-A images and it is
and it is governed by the linker scripts. This ensures that the raw binary governed by the linker scripts. This ensures that the raw binary images are
images are as small as possible. If a NOBITS section was inserted in between as small as possible. If a NOBITS section was inserted in between PROGBITS
PROGBITS sections then the resulting binary file would contain zero bytes in sections then the resulting binary file would contain zero bytes in place of
place of this NOBITS section, making the image unnecessarily bigger. Smaller this NOBITS section, making the image unnecessarily bigger. Smaller images
images allow faster loading from the FIP to the main memory. allow faster loading from the FIP to the main memory.
Linker scripts and symbols Linker scripts and symbols
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
Each bootloader stage image layout is described by its own linker script. The Each bootloader stage image layout is described by its own linker script. The
linker scripts export some symbols into the program symbol table. Their values linker scripts export some symbols into the program symbol table. Their values
correspond to particular addresses. The trusted firmware code can refer to these correspond to particular addresses. TF-A code can refer to these symbols to
symbols to figure out the image memory layout. figure out the image memory layout.
Linker symbols follow the following naming convention in the trusted firmware. Linker symbols follow the following naming convention in TF-A.
- ``__<SECTION>_START__`` - ``__<SECTION>_START__``
@ -1564,10 +1558,10 @@ Linker symbols follow the following naming convention in the trusted firmware.
rounding up due to some alignment constraint. In other words, rounding up due to some alignment constraint. In other words,
``__<SECTION>_UNALIGNED_SIZE__ = __<SECTION>_UNALIGNED_END__ - __<SECTION>_START__``. ``__<SECTION>_UNALIGNED_SIZE__ = __<SECTION>_UNALIGNED_END__ - __<SECTION>_START__``.
Some of the linker symbols are mandatory as the trusted firmware code relies on Some of the linker symbols are mandatory as TF-A code relies on them to be
them to be defined. They are listed in the following subsections. Some of them defined. They are listed in the following subsections. Some of them must be
must be provided for each bootloader stage and some are specific to a given provided for each bootloader stage and some are specific to a given bootloader
bootloader stage. stage.
The linker scripts define some extra, optional symbols. They are not actually The linker scripts define some extra, optional symbols. They are not actually
used by any code but they help in understanding the bootloader images' memory used by any code but they help in understanding the bootloader images' memory
@ -1622,12 +1616,11 @@ The following additional linker symbols are defined for BL1:
How to choose the right base addresses for each bootloader stage image How to choose the right base addresses for each bootloader stage image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There is currently no support for dynamic image loading in the Trusted Firmware. There is currently no support for dynamic image loading in TF-A. This means
This means that all bootloader images need to be linked against their ultimate that all bootloader images need to be linked against their ultimate runtime
runtime locations and the base addresses of each image must be chosen carefully locations and the base addresses of each image must be chosen carefully such
such that images don't overlap each other in an undesired way. As the code that images don't overlap each other in an undesired way. As the code grows,
grows, the base addresses might need adjustments to cope with the new memory the base addresses might need adjustments to cope with the new memory layout.
layout.
The memory layout is completely specific to the platform and so there is no The memory layout is completely specific to the platform and so there is no
general recipe for choosing the right base addresses for each bootloader image. general recipe for choosing the right base addresses for each bootloader image.
@ -1655,13 +1648,13 @@ Additionally, if the platform memory layout implies some image overlaying like
on FVP, BL31 and TSP need to know the limit address that their PROGBITS on FVP, BL31 and TSP need to know the limit address that their PROGBITS
sections must not overstep. The platform code must provide those. sections must not overstep. The platform code must provide those.
When LOAD\_IMAGE\_V2 is disabled, Trusted Firmware provides a mechanism to When LOAD\_IMAGE\_V2 is disabled, TF-A provides a mechanism to verify at boot
verify at boot time that the memory to load a new image is free to prevent time that the memory to load a new image is free to prevent overwriting a
overwriting a previously loaded image. For this mechanism to work, the platform previously loaded image. For this mechanism to work, the platform must specify
must specify the memory available in the system as regions, where each region the memory available in the system as regions, where each region consists of
consists of base address, total size and the free area within it (as defined base address, total size and the free area within it (as defined in the
in the ``meminfo_t`` structure). Trusted Firmware retrieves these memory regions ``meminfo_t`` structure). TF-A retrieves these memory regions by calling the
by calling the corresponding platform API: corresponding platform API:
- ``meminfo_t *bl1_plat_sec_mem_layout(void)`` - ``meminfo_t *bl1_plat_sec_mem_layout(void)``
- ``meminfo_t *bl2_plat_sec_mem_layout(void)`` - ``meminfo_t *bl2_plat_sec_mem_layout(void)``
@ -1685,7 +1678,7 @@ corresponding processor (e.g. the SCP BL2 image).
To reduce fragmentation and simplify the tracking of free memory, all the free To reduce fragmentation and simplify the tracking of free memory, all the free
memory within a region is always located in one single buffer defined by its memory within a region is always located in one single buffer defined by its
base address and size. Trusted Firmware implements a top/bottom load approach: base address and size. TF-A implements a top/bottom load approach:
after a new image is loaded, it checks how much memory remains free above and after a new image is loaded, it checks how much memory remains free above and
below the image. The smallest area is marked as unavailable, while the larger below the image. The smallest area is marked as unavailable, while the larger
area becomes the new free memory buffer. Platforms should take this behaviour area becomes the new free memory buffer. Platforms should take this behaviour
@ -1725,10 +1718,10 @@ And the following diagram is an example of an image loaded in the top part:
| | | |
+----------+ +----------+
When LOAD\_IMAGE\_V2 is enabled, Trusted Firmware does not provide any mechanism When LOAD\_IMAGE\_V2 is enabled, TF-A does not provide any mechanism to verify
to verify at boot time that the memory to load a new image is free to prevent at boot time that the memory to load a new image is free to prevent overwriting
overwriting a previously loaded image. The platform must specify the memory a previously loaded image. The platform must specify the memory available in
available in the system for all the relevant BL images to be loaded. the system for all the relevant BL images to be loaded.
For example, in the case of BL1 loading BL2, ``bl1_plat_sec_mem_layout()`` will For example, in the case of BL1 loading BL2, ``bl1_plat_sec_mem_layout()`` will
return the region defined by the platform where BL1 intends to load BL2. The return the region defined by the platform where BL1 intends to load BL2. The
@ -1736,10 +1729,10 @@ return the region defined by the platform where BL1 intends to load BL2. The
base and maximum image size provided by the platforms. Platforms must take base and maximum image size provided by the platforms. Platforms must take
this behaviour into account when defining the base/size for each of the images. this behaviour into account when defining the base/size for each of the images.
Memory layout on ARM development platforms Memory layout on Arm development platforms
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following list describes the memory layout on the ARM development platforms: The following list describes the memory layout on the Arm development platforms:
- A 4KB page of shared memory is used for communication between Trusted - A 4KB page of shared memory is used for communication between Trusted
Firmware and the platform's power controller. This is located at the base of Firmware and the platform's power controller. This is located at the base of
@ -1799,14 +1792,13 @@ mechanism at boot time are defined as follows (shown per API):
This region is an exact copy of the region defined by This region is an exact copy of the region defined by
``bl2_plat_sec_mem_layout()``. Being a disconnected copy means that all the ``bl2_plat_sec_mem_layout()``. Being a disconnected copy means that all the
changes made to this region by the Trusted Firmware will not be propagated. changes made to this region by the TF-A will not be propagated. This
This approach is valid because the SCP BL2 image is loaded temporarily approach is valid because the SCP BL2 image is loaded temporarily while it
while it is being transferred to the SCP, so this memory is reused is being transferred to the SCP, so this memory is reused afterwards.
afterwards.
- ``void bl2_plat_get_bl32_meminfo(meminfo_t *bl32_meminfo)`` - ``void bl2_plat_get_bl32_meminfo(meminfo_t *bl32_meminfo)``
This region depends on the location of the BL32 image. Currently, ARM This region depends on the location of the BL32 image. Currently, Arm
platforms support three different locations (detailed below): Trusted SRAM, platforms support three different locations (detailed below): Trusted SRAM,
Trusted DRAM and the TZC-Secured DRAM. Trusted DRAM and the TZC-Secured DRAM.
@ -1980,11 +1972,11 @@ Firmware Image Package (FIP)
---------------------------- ----------------------------
Using a Firmware Image Package (FIP) allows for packing bootloader images (and Using a Firmware Image Package (FIP) allows for packing bootloader images (and
potentially other payloads) into a single archive that can be loaded by the ARM potentially other payloads) into a single archive that can be loaded by TF-A
Trusted Firmware from non-volatile platform storage. A driver to load images from non-volatile platform storage. A driver to load images from a FIP has
from a FIP has been added to the storage layer and allows a package to be read been added to the storage layer and allows a package to be read from supported
from supported platform storage. A tool to create Firmware Image Packages is platform storage. A tool to create Firmware Image Packages is also provided
also provided and described below. and described below.
Firmware Image Package layout Firmware Image Package layout
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -2019,7 +2011,7 @@ retrieved.
The ToC header and entry formats are described in the header file The ToC header and entry formats are described in the header file
``include/tools_share/firmware_image_package.h``. This file is used by both the ``include/tools_share/firmware_image_package.h``. This file is used by both the
tool and the ARM Trusted firmware. tool and TF-A.
The ToC header has the following fields: The ToC header has the following fields:
@ -2049,10 +2041,10 @@ A ToC entry has the following fields:
Firmware Image Package creation tool Firmware Image Package creation tool
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The FIP creation tool can be used to pack specified images into a binary package The FIP creation tool can be used to pack specified images into a binary
that can be loaded by the ARM Trusted Firmware from platform storage. The tool package that can be loaded by TF-A from platform storage. The tool currently
currently only supports packing bootloader images. Additional image definitions only supports packing bootloader images. Additional image definitions can be
can be added to the tool as required. added to the tool as required.
The tool can be found in ``tools/fiptool``. The tool can be found in ``tools/fiptool``.
@ -2060,38 +2052,37 @@ Loading from a Firmware Image Package (FIP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Firmware Image Package (FIP) driver can load images from a binary package on The Firmware Image Package (FIP) driver can load images from a binary package on
non-volatile platform storage. For the ARM development platforms, this is non-volatile platform storage. For the Arm development platforms, this is
currently NOR FLASH. currently NOR FLASH.
Bootloader images are loaded according to the platform policy as specified by Bootloader images are loaded according to the platform policy as specified by
the function ``plat_get_image_source()``. For the ARM development platforms, this the function ``plat_get_image_source()``. For the Arm development platforms, this
means the platform will attempt to load images from a Firmware Image Package means the platform will attempt to load images from a Firmware Image Package
located at the start of NOR FLASH0. located at the start of NOR FLASH0.
The ARM development platforms' policy is to only allow loading of a known set of The Arm development platforms' policy is to only allow loading of a known set of
images. The platform policy can be modified to allow additional images. images. The platform policy can be modified to allow additional images.
Use of coherent memory in Trusted Firmware Use of coherent memory in TF-A
------------------------------------------ ------------------------------
There might be loss of coherency when physical memory with mismatched There might be loss of coherency when physical memory with mismatched
shareability, cacheability and memory attributes is accessed by multiple CPUs shareability, cacheability and memory attributes is accessed by multiple CPUs
(refer to section B2.9 of `ARM ARM`_ for more details). This possibility occurs (refer to section B2.9 of `Arm ARM`_ for more details). This possibility occurs
in Trusted Firmware during power up/down sequences when coherency, MMU and in TF-A during power up/down sequences when coherency, MMU and caches are
caches are turned on/off incrementally. turned on/off incrementally.
Trusted Firmware defines coherent memory as a region of memory with Device TF-A defines coherent memory as a region of memory with Device nGnRE attributes
nGnRE attributes in the translation tables. The translation granule size in in the translation tables. The translation granule size in TF-A is 4KB. This
Trusted Firmware is 4KB. This is the smallest possible size of the coherent is the smallest possible size of the coherent memory region.
memory region.
By default, all data structures which are susceptible to accesses with By default, all data structures which are susceptible to accesses with
mismatched attributes from various CPUs are allocated in a coherent memory mismatched attributes from various CPUs are allocated in a coherent memory
region (refer to section 2.1 of `Porting Guide`_). The coherent memory region region (refer to section 2.1 of `Porting Guide`_). The coherent memory region
accesses are Outer Shareable, non-cacheable and they can be accessed accesses are Outer Shareable, non-cacheable and they can be accessed
with the Device nGnRE attributes when the MMU is turned on. Hence, at the with the Device nGnRE attributes when the MMU is turned on. Hence, at the
expense of at least an extra page of memory, Trusted Firmware is able to work expense of at least an extra page of memory, TF-A is able to work around
around coherency issues due to mismatched memory attributes. coherency issues due to mismatched memory attributes.
The alternative to the above approach is to allocate the susceptible data The alternative to the above approach is to allocate the susceptible data
structures in Normal WriteBack WriteAllocate Inner shareable memory. This structures in Normal WriteBack WriteAllocate Inner shareable memory. This
@ -2099,12 +2090,12 @@ approach requires the data structures to be designed so that it is possible to
work around the issue of mismatched memory attributes by performing software work around the issue of mismatched memory attributes by performing software
cache maintenance on them. cache maintenance on them.
Disabling the use of coherent memory in Trusted Firmware Disabling the use of coherent memory in TF-A
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It might be desirable to avoid the cost of allocating coherent memory on It might be desirable to avoid the cost of allocating coherent memory on
platforms which are memory constrained. Trusted Firmware enables inclusion of platforms which are memory constrained. TF-A enables inclusion of coherent
coherent memory in firmware images through the build flag ``USE_COHERENT_MEM``. memory in firmware images through the build flag ``USE_COHERENT_MEM``.
This flag is enabled by default. It can be disabled to choose the second This flag is enabled by default. It can be disabled to choose the second
approach described above. approach described above.
@ -2116,9 +2107,8 @@ Coherent memory usage in PSCI implementation
The ``psci_non_cpu_pd_nodes`` data structure stores the platform's power domain The ``psci_non_cpu_pd_nodes`` data structure stores the platform's power domain
tree information for state management of power domains. By default, this data tree information for state management of power domains. By default, this data
structure is allocated in the coherent memory region in the Trusted Firmware structure is allocated in the coherent memory region in TF-A because it can be
because it can be accessed by multple CPUs, either with caches enabled or accessed by multple CPUs, either with caches enabled or disabled.
disabled.
.. code:: c .. code:: c
@ -2271,7 +2261,7 @@ operation on Lock\_N, the corresponding ``bakery_info_t`` in both CPU0 and CPU1
``bakery_lock`` section need to be fetched and appropriate cache operations need ``bakery_lock`` section need to be fetched and appropriate cache operations need
to be performed for each access. to be performed for each access.
On ARM Platforms, bakery locks are used in psci (``psci_locks``) and power controller On Arm Platforms, bakery locks are used in psci (``psci_locks``) and power controller
driver (``arm_lock``). driver (``arm_lock``).
Non Functional Impact of removing coherent memory Non Functional Impact of removing coherent memory
@ -2292,7 +2282,7 @@ The implementation has been optimized to minimize this additional overhead.
Measurements indicate that when bakery locks are allocated in Normal memory, the Measurements indicate that when bakery locks are allocated in Normal memory, the
minimum latency of acquiring a lock is on an average 3-4 micro seconds whereas minimum latency of acquiring a lock is on an average 3-4 micro seconds whereas
in Device memory the same is 2 micro seconds. The measurements were done on the in Device memory the same is 2 micro seconds. The measurements were done on the
Juno ARM development platform. Juno Arm development platform.
As mentioned earlier, almost a page of memory can be saved by disabling As mentioned earlier, almost a page of memory can be saved by disabling
``USE_COHERENT_MEM``. Each platform needs to consider these trade-offs to decide ``USE_COHERENT_MEM``. Each platform needs to consider these trade-offs to decide
@ -2304,7 +2294,7 @@ optionally define macro ``PLAT_PERCPU_BAKERY_LOCK_SIZE`` (see the
Isolating code and read-only data on separate memory pages Isolating code and read-only data on separate memory pages
---------------------------------------------------------- ----------------------------------------------------------
In the ARMv8 VMSA, translation table entries include fields that define the In the Armv8-A VMSA, translation table entries include fields that define the
properties of the target memory region, such as its access permissions. The properties of the target memory region, such as its access permissions. The
smallest unit of memory that can be addressed by a translation table entry is smallest unit of memory that can be addressed by a translation table entry is
a memory page. Therefore, if software needs to set different permissions on two a memory page. Therefore, if software needs to set different permissions on two
@ -2379,7 +2369,7 @@ With this more condensed memory layout, the separation of read-only data will
add zero or one page to the memory footprint of each BL image. Each platform add zero or one page to the memory footprint of each BL image. Each platform
should consider the trade-off between memory footprint and security. should consider the trade-off between memory footprint and security.
This build flag is disabled by default, minimising memory footprint. On ARM This build flag is disabled by default, minimising memory footprint. On Arm
platforms, it is enabled. platforms, it is enabled.
Publish and Subscribe Framework Publish and Subscribe Framework
@ -2433,11 +2423,10 @@ PE only; it won't cause handlers to execute on a different PE.
Note that publishing an event on a PE blocks until all the subscribed handlers Note that publishing an event on a PE blocks until all the subscribed handlers
finish executing on the PE. finish executing on the PE.
ARM Trusted Firmware generic code publishes and subscribes to some events TF-A generic code publishes and subscribes to some events within. Platform
within. Platform ports are discouraged from subscribing to them. These events ports are discouraged from subscribing to them. These events may be withdrawn,
may be withdrawn, renamed, or have their semantics altered in the future. renamed, or have their semantics altered in the future. Platforms may however
Platforms may however register, publish, and subscribe to platform-specific register, publish, and subscribe to platform-specific events.
events.
Publish and Subscribe Example Publish and Subscribe Example
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -2473,9 +2462,9 @@ Performance Measurement Framework
--------------------------------- ---------------------------------
The Performance Measurement Framework (PMF) facilitates collection of The Performance Measurement Framework (PMF) facilitates collection of
timestamps by registered services and provides interfaces to retrieve timestamps by registered services and provides interfaces to retrieve them
them from within the ARM Trusted Firmware. A platform can choose to from within TF-A. A platform can choose to expose appropriate SMCs to
expose appropriate SMCs to retrieve these collected timestamps. retrieve these collected timestamps.
By default, the global physical counter is used for the timestamp By default, the global physical counter is used for the timestamp
value and is read via ``CNTPCT_EL0``. The framework allows to retrieve value and is read via ``CNTPCT_EL0``. The framework allows to retrieve
@ -2520,9 +2509,8 @@ timestamps in a PMF specific linker section at build time.
Additionally, it defines necessary functions to capture and Additionally, it defines necessary functions to capture and
retrieve a particular timestamp for the given service at runtime. retrieve a particular timestamp for the given service at runtime.
The macro ``PMF_REGISTER_SERVICE()`` only enables capturing PMF The macro ``PMF_REGISTER_SERVICE()`` only enables capturing PMF timestamps
timestamps from within ARM Trusted Firmware. In order to retrieve from within TF-A. In order to retrieve timestamps from outside of TF-A, the
timestamps from outside of ARM Trusted Firmware, the
``PMF_REGISTER_SERVICE_SMC()`` macro must be used instead. This macro ``PMF_REGISTER_SERVICE_SMC()`` macro must be used instead. This macro
accepts the same set of arguments as the ``PMF_REGISTER_SERVICE()`` accepts the same set of arguments as the ``PMF_REGISTER_SERVICE()``
macro but additionally supports retrieving timestamps using SMCs. macro but additionally supports retrieving timestamps using SMCs.
@ -2552,13 +2540,13 @@ and store it at the determined address for later retrieval.
Retrieving a timestamp Retrieving a timestamp
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
From within ARM Trusted Firmware, timestamps for individual CPUs can From within TF-A, timestamps for individual CPUs can be retrieved using either
be retrieved using either ``PMF_GET_TIMESTAMP_BY_MPIDR()`` or ``PMF_GET_TIMESTAMP_BY_MPIDR()`` or ``PMF_GET_TIMESTAMP_BY_INDEX()`` macros.
``PMF_GET_TIMESTAMP_BY_INDEX()`` macros. These macros accept the CPU's MPIDR These macros accept the CPU's MPIDR value, or its ordinal position
value, or its ordinal position, respectively. respectively.
From outside ARM Trusted Firmware, timestamps for individual CPUs can be From outside TF-A, timestamps for individual CPUs can be retrieved by calling
retrieved by calling into ``pmf_smc_handler()``. into ``pmf_smc_handler()``.
.. code:: c .. code:: c
@ -2600,32 +2588,31 @@ PMF code structure
#. ``pmf_helpers.h`` is an internal header used by ``pmf.h``. #. ``pmf_helpers.h`` is an internal header used by ``pmf.h``.
ARMv8 Architecture Extensions Armv8-A Architecture Extensions
----------------------------- -------------------------------
ARM Trusted Firmware makes use of ARMv8 Architecture Extensions where TF-A makes use of Armv8-A Architecture Extensions where applicable. This
applicable. This section lists the usage of Architecture Extensions, and build section lists the usage of Architecture Extensions, and build flags
flags controlling them. controlling them.
In general, and unless individually mentioned, the build options In general, and unless individually mentioned, the build options
``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` selects the Architecture Extension to ``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` selects the Architecture Extension to
target when building ARM Trusted Firmware. Subsequent ARM Architecture target when building TF-A. Subsequent Arm Architecture Extensions are backward
Extensions are backward compatible with previous versions. compatible with previous versions.
The build system only requires that ``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` have a The build system only requires that ``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` have a
valid numeric value. These build options only control whether or not valid numeric value. These build options only control whether or not
Architecture Extension-specific code is included in the build. Otherwise, ARM Architecture Extension-specific code is included in the build. Otherwise, TF-A
Trusted Firmware targets the base ARMv8.0 architecture; i.e. as if targets the base Armv8.0-A architecture; i.e. as if ``ARM_ARCH_MAJOR`` == 8
``ARM_ARCH_MAJOR`` == 8 and ``ARM_ARCH_MINOR`` == 0, which are also their respective and ``ARM_ARCH_MINOR`` == 0, which are also their respective default values.
default values.
See also the *Summary of build options* in `User Guide`_. See also the *Summary of build options* in `User Guide`_.
For details on the Architecture Extension and available features, please refer For details on the Architecture Extension and available features, please refer
to the respective Architecture Extension Supplement. to the respective Architecture Extension Supplement.
ARMv8.1 Armv8.1-A
~~~~~~~ ~~~~~~~~~
This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` >= 8, or when This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` >= 8, or when
``ARM_ARCH_MAJOR`` == 8 and ``ARM_ARCH_MINOR`` >= 1. ``ARM_ARCH_MAJOR`` == 8 and ``ARM_ARCH_MINOR`` >= 1.
@ -2633,8 +2620,8 @@ This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` >= 8, or when
- The Compare and Swap instruction is used to implement spinlocks. Otherwise, - The Compare and Swap instruction is used to implement spinlocks. Otherwise,
the load-/store-exclusive instruction pair is used. the load-/store-exclusive instruction pair is used.
ARMv8.2 Armv8.2-A
~~~~~~~ ~~~~~~~~~
This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` == 8 and This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` == 8 and
``ARM_ARCH_MINOR`` >= 2. ``ARM_ARCH_MINOR`` >= 2.
@ -2644,23 +2631,22 @@ This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` == 8 and
translation table entries for a given stage of translation for a particular translation table entries for a given stage of translation for a particular
translation regime. translation regime.
ARMv7 Armv7-A
~~~~~ ~~~~~~~
This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` == 7. This Architecture Extension is targeted when ``ARM_ARCH_MAJOR`` == 7.
There are several ARMv7 extensions available. Obviously the TrustZone There are several Armv7-A extensions available. Obviously the TrustZone
extension is mandatory to support the ARM Trusted Firmware bootloader extension is mandatory to support the TF-A bootloader and runtime services.
and runtime services.
Platform implementing an ARMv7 system can to define from its target Platform implementing an Armv7-A system can to define from its target
Cortex-A architecture through ``ARM_CORTEX_A<X> = yes`` in their Cortex-A architecture through ``ARM_CORTEX_A<X> = yes`` in their
``plaform.mk`` script. For example ``ARM_CORTEX_A15=yes`` for a ``plaform.mk`` script. For example ``ARM_CORTEX_A15=yes`` for a
Cortex-A15 target. Cortex-A15 target.
Platform can also set ``ARM_WITH_NEON=yes`` to enable neon support. Platform can also set ``ARM_WITH_NEON=yes`` to enable neon support.
Note that using neon at runtime has constraints on non secure wolrd context. Note that using neon at runtime has constraints on non secure wolrd context.
The trusted firmware does not yet provide VFP context management. TF-A does not yet provide VFP context management.
Directive ``ARM_CORTEX_A<x>`` and ``ARM_WITH_NEON`` are used to set Directive ``ARM_CORTEX_A<x>`` and ``ARM_WITH_NEON`` are used to set
the toolchain target architecture directive. the toolchain target architecture directive.
@ -2676,9 +2662,9 @@ I.e:
Code Structure Code Structure
-------------- --------------
Trusted Firmware code is logically divided between the three boot loader TF-A code is logically divided between the three boot loader stages mentioned
stages mentioned in the previous sections. The code is also divided into the in the previous sections. The code is also divided into the following
following categories (present as directories in the source code): categories (present as directories in the source code):
- **Platform specific.** Choice of architecture specific code depends upon - **Platform specific.** Choice of architecture specific code depends upon
the platform. the platform.
@ -2708,8 +2694,8 @@ categories. Based upon the above, the code layout looks like this:
The build system provides a non configurable build option IMAGE\_BLx for each The build system provides a non configurable build option IMAGE\_BLx for each
boot loader stage (where x = BL stage). e.g. for BL1 , IMAGE\_BL1 will be boot loader stage (where x = BL stage). e.g. for BL1 , IMAGE\_BL1 will be
defined by the build system. This enables the Trusted Firmware to compile defined by the build system. This enables TF-A to compile certain code only
certain code only for specific boot loader stages for specific boot loader stages
All assembler files have the ``.S`` extension. The linker source files for each All assembler files have the ``.S`` extension. The linker source files for each
boot stage have the extension ``.ld.S``. These are processed by GCC to create the boot stage have the extension ``.ld.S``. These are processed by GCC to create the
@ -2721,15 +2707,15 @@ kernel at boot time. These can be found in the ``fdts`` directory.
References References
---------- ----------
.. [#] Trusted Board Boot Requirements CLIENT PDD (ARM DEN0006C-1). Available .. [#] Trusted Board Boot Requirements CLIENT PDD (Arm DEN0006C-1). Available
under NDA through your ARM account representative. under NDA through your Arm account representative.
.. [#] `Power State Coordination Interface PDD`_ .. [#] `Power State Coordination Interface PDD`_
.. [#] `SMC Calling Convention PDD`_ .. [#] `SMC Calling Convention PDD`_
.. [#] `ARM Trusted Firmware Interrupt Management Design guide`_. .. [#] `TF-A Interrupt Management Design guide`_.
-------------- --------------
*Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _Reset Design: ./reset-design.rst .. _Reset Design: ./reset-design.rst
.. _Porting Guide: ./porting-guide.rst .. _Porting Guide: ./porting-guide.rst
@ -2743,10 +2729,10 @@ References
.. _here: ./psci-lib-integration-guide.rst .. _here: ./psci-lib-integration-guide.rst
.. _cpu-specific-build-macros.rst: ./cpu-specific-build-macros.rst .. _cpu-specific-build-macros.rst: ./cpu-specific-build-macros.rst
.. _CPUBM: ./cpu-specific-build-macros.rst .. _CPUBM: ./cpu-specific-build-macros.rst
.. _ARM ARM: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0487a.e/index.html .. _Arm ARM: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0487a.e/index.html
.. _User Guide: ./user-guide.rst .. _User Guide: ./user-guide.rst
.. _SMC Calling Convention PDD: http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf .. _SMC Calling Convention PDD: http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf
.. _ARM Trusted Firmware Interrupt Management Design guide: ./interrupt-framework-design.rst .. _TF-A Interrupt Management Design guide: ./interrupt-framework-design.rst
.. _Xlat_tables design: xlat-tables-lib-v2-design.rst .. _Xlat_tables design: xlat-tables-lib-v2-design.rst
.. |Image 1| image:: diagrams/rt-svc-descs-layout.png?raw=true .. |Image 1| image:: diagrams/rt-svc-descs-layout.png?raw=true

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware - Firmware Update Design Guide Trusted Firmware-A - Firmware Update design guide
=================================================== =================================================
.. section-numbering:: .. section-numbering::
@ -21,9 +21,9 @@ is corrupt or missing; it therefore may be used as a recovery mode. It may also
be complemented by other, higher level firmware update software. be complemented by other, higher level firmware update software.
FWU implements a specific part of the Trusted Board Boot Requirements (TBBR) FWU implements a specific part of the Trusted Board Boot Requirements (TBBR)
specification, ARM DEN0006C-1. It should be used in conjunction with the specification, Arm DEN0006C-1. It should be used in conjunction with the
`Trusted Board Boot`_ design document, which describes the image authentication `Trusted Board Boot`_ design document, which describes the image authentication
parts of the Trusted Firmware (TF) TBBR implementation. parts of the Trusted Firmware-A (TF-A) TBBR implementation.
Scope Scope
~~~~~ ~~~~~
@ -63,11 +63,11 @@ The primary requirements of the FWU feature are:
it needs, and to enable platform specific FWU functionality. See the it needs, and to enable platform specific FWU functionality. See the
`Porting Guide`_ for details of this interface. `Porting Guide`_ for details of this interface.
TF uses abbreviated image terminology for FWU images like for other TF images. TF-A uses abbreviated image terminology for FWU images like for other TF-A
An overview of this terminology can be found `here`_. images. An overview of this terminology can be found `here`_.
The following diagram shows the FWU boot flow for ARM development platforms. The following diagram shows the FWU boot flow for Arm development platforms.
ARM CSS platforms like Juno have a System Control Processor (SCP), and these Arm CSS platforms like Juno have a System Control Processor (SCP), and these
use all defined FWU images. Other platforms may use a subset of these. use all defined FWU images. Other platforms may use a subset of these.
|Flow Diagram| |Flow Diagram|
@ -193,8 +193,8 @@ BL1\_SMC\_RUN\_IMAGE
if (ep_info not EL3) synchronous exception if (ep_info not EL3) synchronous exception
This SMC passes execution control to an EL3 image described by the provided This SMC passes execution control to an EL3 image described by the provided
``entry_point_info_t`` structure. In the normal TF boot flow, BL2 invokes this SMC ``entry_point_info_t`` structure. In the normal TF-A boot flow, BL2 invokes
for BL1 to pass execution control to BL31. this SMC for BL1 to pass execution control to BL31.
FWU\_SMC\_IMAGE\_COPY FWU\_SMC\_IMAGE\_COPY
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
@ -400,7 +400,7 @@ This is only allowed if the image is not being executed.
-------------- --------------
*Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.*
.. _Trusted Board Boot: ./trusted-board-boot.rst .. _Trusted Board Boot: ./trusted-board-boot.rst
.. _Porting Guide: ./porting-guide.rst .. _Porting Guide: ./porting-guide.rst

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware Interrupt Management Design guide Trusted Firmware-A interrupt management design guide
====================================================== ====================================================
.. section-numbering:: .. section-numbering::
@ -88,8 +88,8 @@ The framework considers certain routing models for each type of interrupt to be
incorrect as they conflict with the requirements mentioned in Section 1. The incorrect as they conflict with the requirements mentioned in Section 1. The
following sub-sections describe all the possible routing models and specify following sub-sections describe all the possible routing models and specify
which ones are valid or invalid. EL3 interrupts are currently supported only which ones are valid or invalid. EL3 interrupts are currently supported only
for GIC version 3.0 (ARM GICv3) and only the Secure-EL1 and Non-secure interrupt for GIC version 3.0 (Arm GICv3) and only the Secure-EL1 and Non-secure interrupt
types are supported for GIC version 2.0 (ARM GICv2) (See 1.2). The terminology types are supported for GIC version 2.0 (Arm GICv2) (See 1.2). The terminology
used in the following sub-sections is explained below. used in the following sub-sections is explained below.
#. **CSS**. Current Security State. ``0`` when secure and ``1`` when non-secure #. **CSS**. Current Security State. ``0`` when secure and ``1`` when non-secure
@ -111,7 +111,7 @@ Secure-EL1 interrupts
#. **CSS=1, TEL3=0**. Interrupt is routed to the FEL when execution is in #. **CSS=1, TEL3=0**. Interrupt is routed to the FEL when execution is in
non-secure state. This is an invalid routing model as a secure interrupt non-secure state. This is an invalid routing model as a secure interrupt
is not visible to the secure software which violates the motivation behind is not visible to the secure software which violates the motivation behind
the ARM Security Extensions. the Arm Security Extensions.
#. **CSS=1, TEL3=1**. Interrupt is routed to EL3 when execution is in #. **CSS=1, TEL3=1**. Interrupt is routed to EL3 when execution is in
non-secure state. This is a valid routing model as secure software in EL3 non-secure state. This is a valid routing model as secure software in EL3
@ -162,7 +162,7 @@ EL3 interrupts
#. **CSS=1, TEL3=0**. Interrupt is routed to the FEL when execution is in #. **CSS=1, TEL3=0**. Interrupt is routed to the FEL when execution is in
non-secure state. This is an invalid routing model as a secure interrupt non-secure state. This is an invalid routing model as a secure interrupt
is not visible to the secure software which violates the motivation behind is not visible to the secure software which violates the motivation behind
the ARM Security Extensions. the Arm Security Extensions.
#. **CSS=1, TEL3=1**. Interrupt is routed to EL3 when execution is in #. **CSS=1, TEL3=1**. Interrupt is routed to EL3 when execution is in
non-secure state. This is a valid routing model as secure software in EL3 non-secure state. This is a valid routing model as secure software in EL3
@ -179,7 +179,7 @@ uses this information to determine whether the IRQ or the FIQ bit should be
programmed in ``SCR_EL3`` while applying the routing model for a type of programmed in ``SCR_EL3`` while applying the routing model for a type of
interrupt. The platform provides this information through the interrupt. The platform provides this information through the
``plat_interrupt_type_to_line()`` API (described in the ``plat_interrupt_type_to_line()`` API (described in the
`Porting Guide`_). For example, on the FVP port when the platform uses an ARM GICv2 `Porting Guide`_). For example, on the FVP port when the platform uses an Arm GICv2
interrupt controller, Secure-EL1 interrupts are signaled through the FIQ signal interrupt controller, Secure-EL1 interrupts are signaled through the FIQ signal
while Non-secure interrupts are signaled through the IRQ signal. This applies while Non-secure interrupts are signaled through the IRQ signal. This applies
when execution is in either security state. when execution is in either security state.
@ -194,7 +194,7 @@ that security state. This means that all the other interrupt types using the
same interrupt signal will be forced to the same routing model. This should be same interrupt signal will be forced to the same routing model. This should be
borne in mind when choosing the routing model for an interrupt type. borne in mind when choosing the routing model for an interrupt type.
For example, in ARM GICv3, when the execution context is Secure-EL1/ For example, in Arm GICv3, when the execution context is Secure-EL1/
Secure-EL0, both the EL3 and the non secure interrupt types map to the FIQ Secure-EL0, both the EL3 and the non secure interrupt types map to the FIQ
signal. So if either one of the interrupt type sets the routing model so signal. So if either one of the interrupt type sets the routing model so
that **TEL3=1** when **CSS=0**, the FIQ bit in ``SCR_EL3`` will be programmed to that **TEL3=1** when **CSS=0**, the FIQ bit in ``SCR_EL3`` will be programmed to
@ -208,8 +208,8 @@ The framework makes the following assumptions to simplify its implementation.
#. Although the framework has support for 2 types of secure interrupts (EL3 #. Although the framework has support for 2 types of secure interrupts (EL3
and Secure-EL1 interrupt), only interrupt controller architectures and Secure-EL1 interrupt), only interrupt controller architectures
like ARM GICv3 has architectural support for EL3 interrupts in the form of like Arm GICv3 has architectural support for EL3 interrupts in the form of
Group 0 interrupts. In ARM GICv2, all secure interrupts are assumed to be Group 0 interrupts. In Arm GICv2, all secure interrupts are assumed to be
handled in Secure-EL1. They can be delivered to Secure-EL1 via EL3 but they handled in Secure-EL1. They can be delivered to Secure-EL1 via EL3 but they
cannot be handled in EL3. cannot be handled in EL3.
@ -260,7 +260,7 @@ the non-secure interrupts and target them to the primary CPU. It should also
export the interface described in the `Porting Guide`_ to enable export the interface described in the `Porting Guide`_ to enable
handling of interrupts. handling of interrupts.
In the remainder of this document, for the sake of simplicity a ARM GICv2 system In the remainder of this document, for the sake of simplicity a Arm GICv2 system
is considered and it is assumed that the FIQ signal is used to generate Secure-EL1 is considered and it is assumed that the FIQ signal is used to generate Secure-EL1
interrupts and the IRQ signal is used to generate non-secure interrupts in either interrupts and the IRQ signal is used to generate non-secure interrupts in either
security state. EL3 interrupts are not considered. security state. EL3 interrupts are not considered.
@ -272,8 +272,7 @@ Roles and responsibilities for interrupt management are sub-divided between the
following components of software running in EL3 and Secure-EL1. Each component is following components of software running in EL3 and Secure-EL1. Each component is
briefly described below. briefly described below.
#. EL3 Runtime Firmware. This component is common to all ports of the ARM #. EL3 Runtime Firmware. This component is common to all ports of TF-A.
Trusted Firmware.
#. Secure Payload Dispatcher (SPD) service. This service interfaces with the #. Secure Payload Dispatcher (SPD) service. This service interfaces with the
Secure Payload (SP) software which runs in Secure-EL1/Secure-EL0 and is Secure Payload (SP) software which runs in Secure-EL1/Secure-EL0 and is
@ -282,20 +281,20 @@ briefly described below.
exported by the Context management library to implement this functionality. exported by the Context management library to implement this functionality.
Switching execution between the two security states is a requirement for Switching execution between the two security states is a requirement for
interrupt management as well. This results in a significant dependency on interrupt management as well. This results in a significant dependency on
the SPD service. ARM Trusted firmware implements an example Test Secure the SPD service. TF-A implements an example Test Secure Payload Dispatcher
Payload Dispatcher (TSPD) service. (TSPD) service.
An SPD service plugs into the EL3 runtime firmware and could be common to An SPD service plugs into the EL3 runtime firmware and could be common to
some ports of the ARM Trusted Firmware. some ports of TF-A.
#. Secure Payload (SP). On a production system, the Secure Payload corresponds #. Secure Payload (SP). On a production system, the Secure Payload corresponds
to a Secure OS which runs in Secure-EL1/Secure-EL0. It interfaces with the to a Secure OS which runs in Secure-EL1/Secure-EL0. It interfaces with the
SPD service to manage communication with non-secure software. ARM Trusted SPD service to manage communication with non-secure software. TF-A
Firmware implements an example secure payload called Test Secure Payload implements an example secure payload called Test Secure Payload (TSP)
(TSP) which runs only in Secure-EL1. which runs only in Secure-EL1.
A Secure payload implementation could be common to some ports of the ARM A Secure payload implementation could be common to some ports of TF-A,
Trusted Firmware just like the SPD service. just like the SPD service.
Interrupt registration Interrupt registration
---------------------- ----------------------
@ -515,7 +514,7 @@ the interrupt routing model is not known to the SPD service at compile time,
then the SP should pass this information to the SPD service at runtime during then the SP should pass this information to the SPD service at runtime during
its initialisation phase. its initialisation phase.
As mentioned earlier, a ARM GICv2 system is considered and it is assumed that As mentioned earlier, an Arm GICv2 system is considered and it is assumed that
the FIQ signal is used to generate Secure-EL1 interrupts and the IRQ signal the FIQ signal is used to generate Secure-EL1 interrupts and the IRQ signal
is used to generate non-secure interrupts in either security state. is used to generate non-secure interrupts in either security state.
@ -595,7 +594,7 @@ exceptions taken at the same (Secure-EL1) exception level. This table is
referenced through the ``tsp_exceptions`` variable and programmed into the referenced through the ``tsp_exceptions`` variable and programmed into the
VBAR\_EL1. It caters for the asynchronous handling model. VBAR\_EL1. It caters for the asynchronous handling model.
The TSP also programs the Secure Physical Timer in the ARM Generic Timer block The TSP also programs the Secure Physical Timer in the Arm Generic Timer block
to raise a periodic interrupt (every half a second) for the purpose of testing to raise a periodic interrupt (every half a second) for the purpose of testing
interrupt management across all the software components listed in 2.1 interrupt management across all the software components listed in 2.1
@ -999,7 +998,7 @@ TSP by returning ``SMC_UNK`` error.
-------------- --------------
*Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2014-2018, Arm Limited and Contributors. All rights reserved.*
.. _Porting Guide: ./porting-guide.rst .. _Porting Guide: ./porting-guide.rst
.. _SMC calling convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html .. _SMC calling convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html

View File

@ -11,7 +11,7 @@ How to build
Code Locations Code Locations
-------------- --------------
- ARM Trusted Firmware: - Trusted Firmware-A:
`link <https://github.com/ARM-software/arm-trusted-firmware>`__ `link <https://github.com/ARM-software/arm-trusted-firmware>`__
- OP-TEE - OP-TEE
@ -76,13 +76,13 @@ Build Procedure
export UEFI_TOOLS_DIR=${BUILD_PATH}/uefi-tools export UEFI_TOOLS_DIR=${BUILD_PATH}/uefi-tools
export EDK2_DIR=${BUILD_PATH}/edk2 export EDK2_DIR=${BUILD_PATH}/edk2
EDK2_OUTPUT_DIR=${EDK2_DIR}/Build/HiKey/${BUILD_OPTION}_${AARCH64_TOOLCHAIN} EDK2_OUTPUT_DIR=${EDK2_DIR}/Build/HiKey/${BUILD_OPTION}_${AARCH64_TOOLCHAIN}
# Build fastboot for ARM Trust Firmware. It's used for recovery mode. # Build fastboot for Trusted Firmware-A. It's used for recovery mode.
cd ${BUILD_PATH}/atf-fastboot cd ${BUILD_PATH}/atf-fastboot
CROSS_COMPILE=aarch64-linux-gnu- make PLAT=hikey DEBUG=1 CROSS_COMPILE=aarch64-linux-gnu- make PLAT=hikey DEBUG=1
# Convert DEBUG/RELEASE to debug/release # Convert DEBUG/RELEASE to debug/release
FASTBOOT_BUILD_OPTION=$(echo ${BUILD_OPTION} | tr '[A-Z]' '[a-z]') FASTBOOT_BUILD_OPTION=$(echo ${BUILD_OPTION} | tr '[A-Z]' '[a-z]')
cd ${EDK2_DIR} cd ${EDK2_DIR}
# Build UEFI & ARM Trust Firmware # Build UEFI & Trusted Firmware-A
${UEFI_TOOLS_DIR}/uefi-build.sh -b ${BUILD_OPTION} -a ../arm-trusted-firmware -s ../optee_os hikey ${UEFI_TOOLS_DIR}/uefi-build.sh -b ${BUILD_OPTION} -a ../arm-trusted-firmware -s ../optee_os hikey
- Generate l-loader.bin and partition table for aosp. The eMMC capacity is either 8GB or 4GB. Just change "aosp-8g" to "linux-8g" for debian. - Generate l-loader.bin and partition table for aosp. The eMMC capacity is either 8GB or 4GB. Just change "aosp-8g" to "linux-8g" for debian.

View File

@ -11,7 +11,7 @@ How to build
Code Locations Code Locations
-------------- --------------
- ARM Trusted Firmware: - Trusted Firmware-A:
`link <https://github.com/ARM-software/arm-trusted-firmware>`__ `link <https://github.com/ARM-software/arm-trusted-firmware>`__
- OP-TEE: - OP-TEE:
@ -73,7 +73,7 @@ Build Procedure
export EDK2_DIR=${BUILD_PATH}/edk2 export EDK2_DIR=${BUILD_PATH}/edk2
EDK2_OUTPUT_DIR=${EDK2_DIR}/Build/HiKey960/${BUILD_OPTION}_${AARCH64_TOOLCHAIN} EDK2_OUTPUT_DIR=${EDK2_DIR}/Build/HiKey960/${BUILD_OPTION}_${AARCH64_TOOLCHAIN}
cd ${EDK2_DIR} cd ${EDK2_DIR}
# Build UEFI & ARM Trust Firmware # Build UEFI & Trusted Firmware-A
${UEFI_TOOLS_DIR}/uefi-build.sh -b ${BUILD_OPTION} -a ../arm-trusted-firmware -s ../optee_os hikey960 ${UEFI_TOOLS_DIR}/uefi-build.sh -b ${BUILD_OPTION} -a ../arm-trusted-firmware -s ../optee_os hikey960
- Generate l-loader.bin and partition table. - Generate l-loader.bin and partition table.

View File

@ -4,10 +4,10 @@ Tegra SoCs - Overview
- .. rubric:: T210 - .. rubric:: T210
:name: t210 :name: t210
T210 has Quad ARM® Cortex®-A57 cores in a switched configuration with a T210 has Quad Arm® Cortex®-A57 cores in a switched configuration with a
companion set of quad ARM Cortex-A53 cores. The Cortex-A57 and A53 cores companion set of quad Arm Cortex-A53 cores. The Cortex-A57 and A53 cores
support ARMv8, executing both 64-bit Aarch64 code, and 32-bit Aarch32 code support Armv8-A, executing both 64-bit Aarch64 code, and 32-bit Aarch32 code
including legacy ARMv7 applications. The Cortex-A57 processors each have including legacy Armv7-A applications. The Cortex-A57 processors each have
48 KB Instruction and 32 KB Data Level 1 caches; and have a 2 MB shared 48 KB Instruction and 32 KB Data Level 1 caches; and have a 2 MB shared
Level 2 unified cache. The Cortex-A53 processors each have 32 KB Instruction Level 2 unified cache. The Cortex-A53 processors each have 32 KB Instruction
and 32 KB Data Level 1 caches; and have a 512 KB shared Level 2 unified cache. and 32 KB Data Level 1 caches; and have a 512 KB shared Level 2 unified cache.
@ -16,7 +16,7 @@ and 32 KB Data Level 1 caches; and have a 512 KB shared Level 2 unified cache.
:name: t132 :name: t132
Denver is NVIDIA's own custom-designed, 64-bit, dual-core CPU which is Denver is NVIDIA's own custom-designed, 64-bit, dual-core CPU which is
fully ARMv8 architecture compatible. Each of the two Denver cores fully Armv8-A architecture compatible. Each of the two Denver cores
implements a 7-way superscalar microarchitecture (up to 7 concurrent implements a 7-way superscalar microarchitecture (up to 7 concurrent
micro-ops can be executed per clock), and includes a 128KB 4-way L1 micro-ops can be executed per clock), and includes a 128KB 4-way L1
instruction cache, a 64KB 4-way L1 data cache, and a 2MB 16-way L2 instruction cache, a 64KB 4-way L1 data cache, and a 2MB 16-way L2
@ -94,5 +94,5 @@ Tegra configs
============= =============
- 'tegra\_enable\_l2\_ecc\_parity\_prot': This flag enables the L2 ECC and Parity - 'tegra\_enable\_l2\_ecc\_parity\_prot': This flag enables the L2 ECC and Parity
Protection bit, for ARM Cortex-A57 CPUs, during CPU boot. This flag will Protection bit, for Arm Cortex-A57 CPUs, during CPU boot. This flag will
be enabled by Tegrs SoCs during 'Cluster power up' or 'System Suspend' exit. be enabled by Tegrs SoCs during 'Cluster power up' or 'System Suspend' exit.

View File

@ -5,7 +5,7 @@ Poplar is the first development board compliant with the 96Boards Enterprise
Edition TV Platform specification. Edition TV Platform specification.
The board features the Hi3798C V200 with an integrated quad-core 64-bit The board features the Hi3798C V200 with an integrated quad-core 64-bit
ARM Cortex A53 processor and high performance Mali T720 GPU, making it capable Arm Cortex A53 processor and high performance Mali T720 GPU, making it capable
of running any commercial set-top solution based on Linux or Android. of running any commercial set-top solution based on Linux or Android.
It supports a premium user experience with up to H.265 HEVC decoding of 4K It supports a premium user experience with up to H.265 HEVC decoding of 4K
@ -14,7 +14,7 @@ video at 60 frames per second.
:: ::
SOC Hisilicon Hi3798CV200 SOC Hisilicon Hi3798CV200
CPU Quad-core ARM Cortex-A53 64 bit CPU Quad-core Arm Cortex-A53 64 bit
DRAM DDR3/3L/4 SDRAM interface, maximum 32-bit data width 2 GB DRAM DDR3/3L/4 SDRAM interface, maximum 32-bit data width 2 GB
USB Two USB 2.0 ports One USB 3.0 ports USB Two USB 2.0 ports One USB 3.0 ports
CONSOLE USB-micro port for console support CONSOLE USB-micro port for console support
@ -28,11 +28,11 @@ video at 60 frames per second.
At the start of the boot sequence, the bootROM executes the so called l-loader At the start of the boot sequence, the bootROM executes the so called l-loader
binary whose main role is to change the processor state to 64bit mode. This binary whose main role is to change the processor state to 64bit mode. This
must happen prior invoking the arm trusted firmware: must happen prior to invoking Trusted Firmware-A:
:: ::
l-loader --> arm_trusted_firmware --> u-boot l-loader --> Trusted Firmware-A --> u-boot
How to build How to build
============ ============
@ -40,7 +40,7 @@ How to build
Code Locations Code Locations
-------------- --------------
- ARM Trusted Firmware: - Trusted Firmware-A:
`link <https://github.com/ARM-software/arm-trusted-firmware>`__ `link <https://github.com/ARM-software/arm-trusted-firmware>`__
- l-loader: - l-loader:

View File

@ -1,8 +1,8 @@
ARM Trusted Firmware for QEMU virt ARMv8-A Trusted Firmware-A for QEMU virt Armv8-A
========================================== ========================================
ARM Trusted Firmware implements the EL3 firmware layer for QEMU virt Trusted Firmware-A (TF-A) implements the EL3 firmware layer for QEMU virt
ARMv8-A. BL1 is used as the BootROM, supplied with the -bios argument. Armv8-A. BL1 is used as the BootROM, supplied with the -bios argument.
When QEMU starts all CPUs are released simultaneously, BL1 selects a When QEMU starts all CPUs are released simultaneously, BL1 selects a
primary CPU to handle the boot and the secondaries are placed in a polling primary CPU to handle the boot and the secondaries are placed in a polling
loop to be released by normal world via PSCI. loop to be released by normal world via PSCI.
@ -10,7 +10,7 @@ loop to be released by normal world via PSCI.
BL2 edits the Flattened Device Tree, FDT, generated by QEMU at run-time to BL2 edits the Flattened Device Tree, FDT, generated by QEMU at run-time to
add a node describing PSCI and also enable methods for the CPUs. add a node describing PSCI and also enable methods for the CPUs.
An ARM64 defonfig v4.5 Linux kernel is known to boot, FTD doesn't need to be An ARM64 defconfig v4.5 Linux kernel is known to boot, FDT doesn't need to be
provided as it's generated by QEMU. provided as it's generated by QEMU.
Current limitations: Current limitations:

View File

@ -1,5 +1,5 @@
Arm Trusted Firmware for Raspberry Pi 3 Trusted Firmware-A for Raspberry Pi 3
======================================= =====================================
.. section-numbering:: .. section-numbering::
:suffix: . :suffix: .
@ -7,16 +7,16 @@ Arm Trusted Firmware for Raspberry Pi 3
.. contents:: .. contents::
The `Raspberry Pi 3`_ is an inexpensive single-board computer that contains four The `Raspberry Pi 3`_ is an inexpensive single-board computer that contains four
Cortex-A53 cores, which makes it possible to have a port of the Arm Trusted Arm Cortex-A53 cores, which makes it possible to have a port of Trusted
Firmware. Firmware-A (TF-A).
The following instructions explain how to use this port of the Trusted Firmware The following instructions explain how to use this port of the TF-A with the
with the default distribution of `Raspbian`_ because that's the distribution default distribution of `Raspbian`_ because that's the distribution officially
officially supported by the Raspberry Pi Foundation. At the moment of writing supported by the Raspberry Pi Foundation. At the moment of writing this, the
this, the officially supported kernel is a AArch32 kernel. This doesn't mean officially supported kernel is a AArch32 kernel. This doesn't mean that this
that this port of the Trusted Firmware can't boot a AArch64 kernel. The `Linux port of TF-A can't boot a AArch64 kernel. The `Linux tree fork`_ maintained by
tree fork`_ maintained by the Foundation can be compiled for AArch64 by the Foundation can be compiled for AArch64 by following the steps in
following the steps in `AArch64 kernel build instructions`_. `AArch64 kernel build instructions`_.
**IMPORTANT NOTE**: This port isn't secure. All of the memory used is DRAM, **IMPORTANT NOTE**: This port isn't secure. All of the memory used is DRAM,
which is available from both the Non-secure and Secure worlds. This port which is available from both the Non-secure and Secure worlds. This port
@ -46,15 +46,15 @@ The rules are simple:
the cores are powered on at the same time and start at address **0x0**. the cores are powered on at the same time and start at address **0x0**.
This means that we can use the default AArch32 kernel provided in the official This means that we can use the default AArch32 kernel provided in the official
`Raspbian`_ distribution by renaming it to ``kernel8.img``, while the Trusted `Raspbian`_ distribution by renaming it to ``kernel8.img``, while TF-A and
Firmware and anything else we need is in ``armstub8.bin``. This way we can anything else we need is in ``armstub8.bin``. This way we can forget about the
forget about the default bootstrap code. When using a AArch64 kernel, it is only default bootstrap code. When using a AArch64 kernel, it is only needed to make
needed to make sure that the name on the SD card is ``kernel8.img``. sure that the name on the SD card is ``kernel8.img``.
Ideally, we want to load the kernel and have all cores available, which means Ideally, we want to load the kernel and have all cores available, which means
that we need to make the secondary cores work in the way the kernel expects, as that we need to make the secondary cores work in the way the kernel expects, as
explained in `Secondary cores`_. In practice, a small bootstrap is needed explained in `Secondary cores`_. In practice, a small bootstrap is needed
between the Trusted Firmware and the kernel. between TF-A and the kernel.
To get the most out of a AArch32 kernel, we want to boot it in Hypervisor mode To get the most out of a AArch32 kernel, we want to boot it in Hypervisor mode
in AArch32. This means that BL33 can't be in EL2 in AArch64 mode. The in AArch32. This means that BL33 can't be in EL2 in AArch64 mode. The
@ -66,7 +66,7 @@ Placement of images
The file ``armstub8.bin`` contains BL1 and the FIP. It is needed to add padding The file ``armstub8.bin`` contains BL1 and the FIP. It is needed to add padding
between them so that the addresses they are loaded to match the ones specified between them so that the addresses they are loaded to match the ones specified
when compiling the Trusted Firmware. when compiling TF-A.
The device tree block is loaded by the VideoCore loader from an appropriate The device tree block is loaded by the VideoCore loader from an appropriate
file, but we can specify the address it is loaded to in ``config.txt``. file, but we can specify the address it is loaded to in ``config.txt``.
@ -87,8 +87,8 @@ There are no similar restrictions for AArch64 kernels, as specified in the file
``Documentation/arm64/booting.txt``. ``Documentation/arm64/booting.txt``.
This means that we need to avoid the first 128 MiB of RAM when placing the This means that we need to avoid the first 128 MiB of RAM when placing the
Trusted Firmware images (and specially the first 32 MiB, as they are directly TF-A images (and specially the first 32 MiB, as they are directly used to
used to place the uncompressed AArch32 kernel image. This way, both AArch32 and place the uncompressed AArch32 kernel image. This way, both AArch32 and
AArch64 kernels can be placed at the same address. AArch64 kernels can be placed at the same address.
In the end, the images look like the following diagram when placed in memory. In the end, the images look like the following diagram when placed in memory.
@ -143,18 +143,17 @@ different mappings than the Arm cores in which the I/O addresses don't overlap
the DRAM. The memory reserved to be used by the VideoCore is always placed at the DRAM. The memory reserved to be used by the VideoCore is always placed at
the end of the DRAM, so this space isn't wasted. the end of the DRAM, so this space isn't wasted.
Considering the 128 MiB allocated to the GPU and the 16 MiB allocated for the Considering the 128 MiB allocated to the GPU and the 16 MiB allocated for
Trusted Firmware, there are 880 MiB available for Linux. TF-A, there are 880 MiB available for Linux.
Boot sequence Boot sequence
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
The boot sequence of the Trusted Firmware is the usual one except when booting The boot sequence of TF-A is the usual one except when booting an AArch32
a AArch32 kernel. In that case, BL33 is booted in AArch32 Hypervisor mode so kernel. In that case, BL33 is booted in AArch32 Hypervisor mode so that it
that it can jump to the kernel in the same mode and let it take over that can jump to the kernel in the same mode and let it take over that privilege
privilege level. If BL33 was running in EL2 in AArch64 (as in the default level. If BL33 was running in EL2 in AArch64 (as in the default bootflow of
bootflow of the Trusted Firmware) it could only jump to the kernel in AArch32 in TF-A) it could only jump to the kernel in AArch32 in Supervisor mode.
Supervisor mode.
The `Linux kernel tree`_ has instructions on how to jump to the Linux kernel The `Linux kernel tree`_ has instructions on how to jump to the Linux kernel
in ``Documentation/arm/Booting`` and ``Documentation/arm64/booting.txt``. The in ``Documentation/arm/Booting`` and ``Documentation/arm64/booting.txt``. The
@ -168,9 +167,9 @@ use mailboxes to trap the secondary cores until they are ready to jump to the
kernel. This mailbox is located at a different address in the AArch32 default kernel. This mailbox is located at a different address in the AArch32 default
kernel than in the AArch64 kernel. kernel than in the AArch64 kernel.
Also, this port of the Trusted Firmware has another Trusted Mailbox in Shared BL Also, this port of TF-A has another Trusted Mailbox in Shared BL RAM. During
RAM. During cold boot, all secondary cores wait in a loop until they are given cold boot, all secondary cores wait in a loop until they are given given an
given an address to jump to in this Mailbox (``bl31_warm_entrypoint``). address to jump to in this Mailbox (``bl31_warm_entrypoint``).
Once BL31 has finished and the primary core has jumped to the BL33 payload, it Once BL31 has finished and the primary core has jumped to the BL33 payload, it
has to call ``PSCI_CPU_ON`` to release the secondary CPUs from the wait loop. has to call ``PSCI_CPU_ON`` to release the secondary CPUs from the wait loop.
@ -188,11 +187,10 @@ To boot a AArch32 kernel, both AArch64 and AArch32 toolchains are required. The
AArch32 toolchain is needed for the AArch32 bootstrap needed to load a 32-bit AArch32 toolchain is needed for the AArch32 bootstrap needed to load a 32-bit
kernel. kernel.
First, clone and compile `Raspberry Pi 3 Arm Trusted Firmware bootstrap`_. First, clone and compile `Raspberry Pi 3 TF-A bootstrap`_. Choose the one
Choose the one needed for the architecture of your kernel. needed for the architecture of your kernel.
Then compile the Arm Trusted Firmware. For a AArch32 kernel, use the following Then compile TF-A. For a AArch32 kernel, use the following command line:
command line:
.. code:: shell .. code:: shell
@ -219,8 +217,8 @@ by ``debug`` if you set the build option ``DEBUG=1``):
cat bl1.pad.bin build/rpi3/release/fip.bin > armstub8.bin cat bl1.pad.bin build/rpi3/release/fip.bin > armstub8.bin
The resulting file, ``armstub8.bin``, contains BL1 and the FIP in the place they The resulting file, ``armstub8.bin``, contains BL1 and the FIP in the place they
need to be for the Trusted Firmware to boot correctly. Now, follow the need to be for TF-A to boot correctly. Now, follow the instructions in
instructions in `Setup SD card`_. `Setup SD card`_.
The following build options are supported: The following build options are supported:
@ -235,17 +233,17 @@ The following build options are supported:
is reserved by the command line passed to the kernel. is reserved by the command line passed to the kernel.
- ``RPI3_BL33_IN_AARCH32``: This port can load a AArch64 or AArch32 BL33 image. - ``RPI3_BL33_IN_AARCH32``: This port can load a AArch64 or AArch32 BL33 image.
By default this option is 0, which means that the Trusted Firmware will jump By default this option is 0, which means that TF-A will jump to BL33 in EL2
to BL33 in EL2 in AArch64 mode. If set to 1, it will jump to BL33 in in AArch64 mode. If set to 1, it will jump to BL33 in Hypervisor in AArch32
Hypervisor in AArch32 mode. mode.
The following is not currently supported: The following is not currently supported:
- AArch32 for the Trusted Firmware itself. - AArch32 for TF-A itself.
- ``EL3_PAYLOAD_BASE``: The reason is that you can already load anything to any - ``EL3_PAYLOAD_BASE``: The reason is that you can already load anything to any
address by changing the file ``armstub8.bin``, so there's no point in using address by changing the file ``armstub8.bin``, so there's no point in using
the Trusted Firmware in this case. TF-A in this case.
- ``LOAD_IMAGE_V2=0``: Only version 2 is supported. - ``LOAD_IMAGE_V2=0``: Only version 2 is supported.
@ -307,16 +305,16 @@ untouched). They have been tested with the image available in 2017-09-07.
1. Insert the SD card and open the ``boot`` partition. 1. Insert the SD card and open the ``boot`` partition.
2. Rename ``kernel7.img`` to ``kernel8.img``. This tricks the VideoCore 2. Rename ``kernel7.img`` to ``kernel8.img``. This tricks the VideoCore
bootloader into booting the Arm cores in AArch64 mode, like the Trusted bootloader into booting the Arm cores in AArch64 mode, like TF-A needs,
Firmware needs, even though the kernel is not compiled for AArch64. even though the kernel is not compiled for AArch64.
3. Copy ``armstub8.bin`` here. When ``kernel8.img`` is available, The VideoCore 3. Copy ``armstub8.bin`` here. When ``kernel8.img`` is available, The VideoCore
bootloader will look for a file called ``armstub8.bin`` and load it at bootloader will look for a file called ``armstub8.bin`` and load it at
address **0x0** instead of a predefined one. address **0x0** instead of a predefined one.
4. Open ``cmdline.txt`` and add ``memmap=256M$16M`` to prevent the kernel from 4. Open ``cmdline.txt`` and add ``memmap=256M$16M`` to prevent the kernel from
using the memory needed by the Trusted Firmware. If you want to enable the using the memory needed by TF-A. If you want to enable the serial port
serial port "Mini UART", make sure that this file also contains "Mini UART", make sure that this file also contains
``console=serial0,115200 console=tty1``. ``console=serial0,115200 console=tty1``.
Note that the 16 MiB reserved this way won't be available for Linux, the same Note that the 16 MiB reserved this way won't be available for Linux, the same
@ -359,6 +357,6 @@ HDMI output won't show any text during boot.
.. _Linux kernel tree: https://github.com/torvalds/linux .. _Linux kernel tree: https://github.com/torvalds/linux
.. _Linux tree fork: https://github.com/raspberrypi/linux .. _Linux tree fork: https://github.com/raspberrypi/linux
.. _Raspberry Pi 3: https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ .. _Raspberry Pi 3: https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
.. _Raspberry Pi 3 Arm Trusted Firmware bootstrap: https://github.com/AntonioND/rpi3-arm-tf-bootstrap .. _Raspberry Pi 3 TF-A bootstrap: https://github.com/AntonioND/rpi3-arm-tf-bootstrap
.. _Raspberry Pi 3 documentation: https://www.raspberrypi.org/documentation/ .. _Raspberry Pi 3 documentation: https://www.raspberrypi.org/documentation/
.. _Raspbian: https://www.raspberrypi.org/downloads/raspbian/ .. _Raspbian: https://www.raspberrypi.org/downloads/raspbian/

View File

@ -1,19 +1,19 @@
ARM Trusted Firmware for Socionext UniPhier SoCs Trusted Firmware-A for Socionext UniPhier SoCs
================================================ ==============================================
Socionext UniPhier ARMv8-A SoCs use ARM Trusted Firmware as the secure world Socionext UniPhier Armv8-A SoCs use Trusted Firmware-A (TF-A) as the secure
firmware, supporting BL2 and BL31. world firmware, supporting BL2 and BL31.
UniPhier SoC family implements its internal boot ROM, which loads 64KB [1]_ UniPhier SoC family implements its internal boot ROM, which loads 64KB [1]_
image from a non-volatile storage to the on-chip SRAM, and jumps over to it. image from a non-volatile storage to the on-chip SRAM, and jumps over to it.
ARM Trusted Firmware provides a special mode, BL2-AT-EL3, which enables BL2 to TF-A provides a special mode, BL2-AT-EL3, which enables BL2 to execute at EL3.
execute at EL3. It is useful for platforms with non-TF boot ROM, like UniPhier. It is useful for platforms with non-TF-A boot ROM, like UniPhier. Here, a
Here, a problem is BL2 does not fit in the 64KB limit if `Trusted Board Boot`_ problem is BL2 does not fit in the 64KB limit if `Trusted Board Boot`_ (TBB)
(TBB) is enabled. To solve this issue, Socionext provides a first stage loader is enabled. To solve this issue, Socionext provides a first stage loader
called `UniPhier BL`_. This loader runs in the on-chip SRAM, initializes the called `UniPhier BL`_. This loader runs in the on-chip SRAM, initializes the
DRAM, expands BL2 there, and hands the control over to it. Therefore, all images DRAM, expands BL2 there, and hands the control over to it. Therefore, all images
of ARM Trusted Firmware run in DRAM. of TF-A run in DRAM.
The UniPhier platform works with/without TBB. See below for the build process The UniPhier platform works with/without TBB. See below for the build process
of each case. The image authentication for the UniPhier platform fully of each case. The image authentication for the UniPhier platform fully
@ -46,7 +46,7 @@ Boot Flow
This runs in the DRAM. It extracts more images such as BL31, BL33 (optionally This runs in the DRAM. It extracts more images such as BL31, BL33 (optionally
SCP_BL2, BL32 as well) from Firmware Image Package (FIP). If TBB is enabled, SCP_BL2, BL32 as well) from Firmware Image Package (FIP). If TBB is enabled,
they are all authenticated by the standard mechanism of ARM Trusted Firmware. they are all authenticated by the standard mechanism of TF-A.
After loading all the images, it jumps to the BL31 entry. After loading all the images, it jumps to the BL31 entry.
4. BL31, BL32, and BL33 4. BL31, BL32, and BL33

View File

@ -1,12 +1,12 @@
ARM Trusted Firmware for Xilinx Zynq UltraScale+ MPSoC Trusted Firmware-A for Xilinx Zynq UltraScale+ MPSoC
====================================================== ====================================================
ARM Trusted Firmware implements the EL3 firmware layer for Xilinx Zynq Trusted Firmware-A (TF-A) implements the EL3 firmware layer for Xilinx Zynq
UltraScale + MPSoC. UltraScale + MPSoC.
The platform only uses the runtime part of ATF as ZynqMP already has a The platform only uses the runtime part of TF-A as ZynqMP already has a
BootROM (BL1) and FSBL (BL2). BootROM (BL1) and FSBL (BL2).
BL31 is ATF. BL31 is TF-A.
BL32 is an optional Secure Payload. BL32 is an optional Secure Payload.
BL33 is the non-secure world software (U-Boot, Linux etc). BL33 is the non-secure world software (U-Boot, Linux etc).
@ -35,20 +35,20 @@ ZynqMP platform specific build options
- ``cadence``, ``cadence0``: Cadence UART 0 - ``cadence``, ``cadence0``: Cadence UART 0
- ``cadence1`` : Cadence UART 1 - ``cadence1`` : Cadence UART 1
FSBL->ATF Parameter Passing FSBL->TF-A Parameter Passing
=========================== ===========================
The FSBL populates a data structure with image information for the ATF. The ATF The FSBL populates a data structure with image information for TF-A. TF-A uses
uses that data to hand off to the loaded images. The address of the handoff data that data to hand off to the loaded images. The address of the handoff data
structure is passed in the ``PMU_GLOBAL.GLOBAL_GEN_STORAGE6`` register. The structure is passed in the ``PMU_GLOBAL.GLOBAL_GEN_STORAGE6`` register. The
register is free to be used by other software once the ATF is bringing up register is free to be used by other software once TF-A has brought up
further firmware images. further firmware images.
Power Domain Tree Power Domain Tree
================= =================
The following power domain tree represents the power domain model used by the The following power domain tree represents the power domain model used by TF-A
ATF for ZynqMP: for ZynqMP:
:: ::

View File

@ -24,7 +24,7 @@ This API should return the priority of the interrupt the PE is currently
servicing. This must be be called only after an interrupt has already been servicing. This must be be called only after an interrupt has already been
acknowledged via. ``plat_ic_acknowledge_interrupt``. acknowledged via. ``plat_ic_acknowledge_interrupt``.
In the case of ARM standard platforms using GIC, the *Running Priority Register* In the case of Arm standard platforms using GIC, the *Running Priority Register*
is read to determine the priority of the interrupt. is read to determine the priority of the interrupt.
Function: int plat_ic_is_spi(unsigned int id); [optional] Function: int plat_ic_is_spi(unsigned int id); [optional]
@ -77,7 +77,7 @@ Function: unsigned int plat_ic_get_interrupt_active(unsigned int id); [optional]
This API should return the *active* status of the interrupt ID specified by the This API should return the *active* status of the interrupt ID specified by the
first parameter, ``id``. first parameter, ``id``.
In case of ARM standard platforms using GIC, the implementation of the API reads In case of Arm standard platforms using GIC, the implementation of the API reads
the GIC *Set Active Register* to read and return the active status of the the GIC *Set Active Register* to read and return the active status of the
interrupt. interrupt.
@ -92,7 +92,7 @@ Function: void plat_ic_enable_interrupt(unsigned int id); [optional]
This API should enable the interrupt ID specified by the first parameter, This API should enable the interrupt ID specified by the first parameter,
``id``. PEs in the system are expected to receive only enabled interrupts. ``id``. PEs in the system are expected to receive only enabled interrupts.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
inserts barrier to make memory updates visible before enabling interrupt, and inserts barrier to make memory updates visible before enabling interrupt, and
then writes to GIC *Set Enable Register* to enable the interrupt. then writes to GIC *Set Enable Register* to enable the interrupt.
@ -107,7 +107,7 @@ Function: void plat_ic_disable_interrupt(unsigned int id); [optional]
This API should disable the interrupt ID specified by the first parameter, This API should disable the interrupt ID specified by the first parameter,
``id``. PEs in the system are not expected to receive disabled interrupts. ``id``. PEs in the system are not expected to receive disabled interrupts.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
writes to GIC *Clear Enable Register* to disable the interrupt, and inserts writes to GIC *Clear Enable Register* to disable the interrupt, and inserts
barrier to make memory updates visible afterwards. barrier to make memory updates visible afterwards.
@ -123,7 +123,7 @@ Function: void plat_ic_set_interrupt_priority(unsigned int id, unsigned int prio
This API should set the priority of the interrupt specified by first parameter This API should set the priority of the interrupt specified by first parameter
``id`` to the value set by the second parameter ``priority``. ``id`` to the value set by the second parameter ``priority``.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
writes to GIC *Priority Register* set interrupt priority. writes to GIC *Priority Register* set interrupt priority.
Function: int plat_ic_has_interrupt_type(unsigned int type); [optional] Function: int plat_ic_has_interrupt_type(unsigned int type); [optional]
@ -138,10 +138,10 @@ This API should return whether the platform supports a given interrupt type. The
parameter ``type`` shall be one of ``INTR_TYPE_EL3``, ``INTR_TYPE_S_EL1``, or parameter ``type`` shall be one of ``INTR_TYPE_EL3``, ``INTR_TYPE_S_EL1``, or
``INTR_TYPE_NS``. ``INTR_TYPE_NS``.
In case of ARM standard platforms using GICv3, the implementation of the API In case of Arm standard platforms using GICv3, the implementation of the API
returns ``1`` for all interrupt types. returns ``1`` for all interrupt types.
In case of ARM standard platforms using GICv2, the API always return ``1`` for In case of Arm standard platforms using GICv2, the API always return ``1`` for
``INTR_TYPE_NS``. Return value for other types depends on the value of build ``INTR_TYPE_NS``. Return value for other types depends on the value of build
option ``GICV2_G0_FOR_EL3``: option ``GICV2_G0_FOR_EL3``:
@ -180,7 +180,7 @@ one of:
- ``INTR_TYPE_EL3``: interrupt is meant to be consumed by EL3. - ``INTR_TYPE_EL3``: interrupt is meant to be consumed by EL3.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
writes to the GIC *Group Register* and *Group Modifier Register* (only GICv3) to writes to the GIC *Group Register* and *Group Modifier Register* (only GICv3) to
assign the interrupt to the right group. assign the interrupt to the right group.
@ -213,7 +213,7 @@ This API should raise an EL3 SGI. The first parameter, ``sgi_num``, specifies
the ID of the SGI. The second parameter, ``target``, must be the MPIDR of the the ID of the SGI. The second parameter, ``target``, must be the MPIDR of the
target PE. target PE.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
inserts barrier to make memory updates visible before raising SGI, then writes inserts barrier to make memory updates visible before raising SGI, then writes
to appropriate *SGI Register* in order to raise the EL3 SGI. to appropriate *SGI Register* in order to raise the EL3 SGI.
@ -239,7 +239,7 @@ The ``routing_mode`` parameter can be one of:
- ``INTR_ROUTING_MODE_PE`` means the interrupt is routed to the PE whose MPIDR - ``INTR_ROUTING_MODE_PE`` means the interrupt is routed to the PE whose MPIDR
value is specified by the parameter ``mpidr``. value is specified by the parameter ``mpidr``.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
writes to the GIC *Target Register* (GICv2) or *Route Register* (GICv3) to set writes to the GIC *Target Register* (GICv2) or *Route Register* (GICv3) to set
the routing. the routing.
@ -254,7 +254,7 @@ Function: void plat_ic_set_interrupt_pending(unsigned int id); [optional]
This API should set the interrupt specified by first parameter ``id`` to This API should set the interrupt specified by first parameter ``id`` to
*Pending*. *Pending*.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
inserts barrier to make memory updates visible before setting interrupt pending, inserts barrier to make memory updates visible before setting interrupt pending,
and writes to the GIC *Set Pending Register* to set the interrupt pending and writes to the GIC *Set Pending Register* to set the interrupt pending
status. status.
@ -270,7 +270,7 @@ Function: void plat_ic_clear_interrupt_pending(unsigned int id); [optional]
This API should clear the *Pending* status of the interrupt specified by first This API should clear the *Pending* status of the interrupt specified by first
parameter ``id``. parameter ``id``.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
writes to the GIC *Clear Pending Register* to clear the interrupt pending writes to the GIC *Clear Pending Register* to clear the interrupt pending
status, and inserts barrier to make memory updates visible afterwards. status, and inserts barrier to make memory updates visible afterwards.
@ -287,7 +287,7 @@ controller such that only interrupts of higher priority than the supplied one
may be signalled to the PE. The API should return the current priority value may be signalled to the PE. The API should return the current priority value
that it's overwriting. that it's overwriting.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
inserts to order memory updates before updating mask, then writes to the GIC inserts to order memory updates before updating mask, then writes to the GIC
*Priority Mask Register*, and make sure memory updates are visible before *Priority Mask Register*, and make sure memory updates are visible before
potential trigger due to mask update. potential trigger due to mask update.
@ -305,9 +305,9 @@ obtained by the acknowledging the interrupt (read using
``plat_ic_acknowledge_interrupt()``). If the interrupt ID is invalid, this API ``plat_ic_acknowledge_interrupt()``). If the interrupt ID is invalid, this API
should return ``INTR_ID_UNAVAILABLE``. should return ``INTR_ID_UNAVAILABLE``.
In case of ARM standard platforms using GIC, the implementation of the API In case of Arm standard platforms using GIC, the implementation of the API
masks out the interrupt ID field from the acknowledged value from GIC. masks out the interrupt ID field from the acknowledged value from GIC.
---- ----
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*

View File

@ -12,8 +12,8 @@ Guide to migrate to new Platform porting interface
Introduction Introduction
------------ ------------
The PSCI implementation in Trusted Firmware has undergone a redesign because of The PSCI implementation in TF-A has undergone a redesign because of three
three requirements that the PSCI 1.0 specification introduced : requirements that the PSCI 1.0 specification introduced :
- Removing the framework assumption about the structure of the MPIDR, and - Removing the framework assumption about the structure of the MPIDR, and
its relation to the power topology enables support for deeper and more its relation to the power topology enables support for deeper and more
@ -217,7 +217,7 @@ layer and the platform layer.
Refer `plat/arm/board/fvp/fvp\_pm.c`_ for the implementation details of Refer `plat/arm/board/fvp/fvp\_pm.c`_ for the implementation details of
these handlers for the FVP. The commit `38dce70f51fb83b27958ba3e2ad15f5635cb1061`_ these handlers for the FVP. The commit `38dce70f51fb83b27958ba3e2ad15f5635cb1061`_
demonstrates the migration of ARM reference platforms to the new platform API. demonstrates the migration of Arm reference platforms to the new platform API.
Miscellaneous modifications Miscellaneous modifications
--------------------------- ---------------------------
@ -271,7 +271,7 @@ within its domain. It does so by storing the core index of first core
within it and number of core indexes following it. This means that core within it and number of core indexes following it. This means that core
indices returned by ``platform_get_core_pos()`` for cores within a particular indices returned by ``platform_get_core_pos()`` for cores within a particular
power domain must be consecutive. We expect that this is the case for most power domain must be consecutive. We expect that this is the case for most
platform ports including ARM reference platforms. platform ports including Arm reference platforms.
The old PSCI helpers like ``psci_get_suspend_powerstate()``, The old PSCI helpers like ``psci_get_suspend_powerstate()``,
``psci_get_suspend_stateid()``, ``psci_get_suspend_stateid_by_mpidr()``, ``psci_get_suspend_stateid()``, ``psci_get_suspend_stateid_by_mpidr()``,
@ -298,7 +298,7 @@ The mandatory macros to be defined by the platform port in ``platform_def.h``
- **#define : PLATFORM\_MAX\_AFFLVL** - **#define : PLATFORM\_MAX\_AFFLVL**
Defines the maximum affinity level that the power management operations Defines the maximum affinity level that the power management operations
should apply to. ARMv8-A has support for four affinity levels. It is likely should apply to. Armv8-A has support for four affinity levels. It is likely
that hardware will implement fewer affinity levels. This macro allows the that hardware will implement fewer affinity levels. This macro allows the
PSCI implementation to consider only those affinity levels in the system PSCI implementation to consider only those affinity levels in the system
that the platform implements. For example, the Base AEM FVP implements two that the platform implements. For example, the Base AEM FVP implements two
@ -329,7 +329,7 @@ to handle the condition where the core has been warm reset but there is no
entrypoint to jump to. entrypoint to jump to.
This function does not follow the Procedure Call Standard used by the This function does not follow the Procedure Call Standard used by the
Application Binary Interface for the ARM 64-bit architecture. The caller should Application Binary Interface for the Arm 64-bit architecture. The caller should
not assume that callee saved registers are preserved across a call to this not assume that callee saved registers are preserved across a call to this
function. function.
@ -410,7 +410,7 @@ Modifications for Power State Coordination Interface (in BL31)
-------------------------------------------------------------- --------------------------------------------------------------
The following functions must be implemented to initialize PSCI functionality in The following functions must be implemented to initialize PSCI functionality in
the ARM Trusted Firmware. TF-A.
Function : plat\_get\_aff\_count() [mandatory] Function : plat\_get\_aff\_count() [mandatory]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -595,7 +595,7 @@ PSCI specification for the CPU\_SUSPEND API.
-------------- --------------
*Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.*
.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf .. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
.. _Porting Guide: porting-guide.rst#user-content-function--plat_my_core_pos .. _Porting Guide: porting-guide.rst#user-content-function--plat_my_core_pos

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware Porting Guide Trusted Firmware-A Porting Guide
================================== ================================
.. section-numbering:: .. section-numbering::
@ -16,7 +16,7 @@ Please note that this document has been updated for the new platform API
as required by the PSCI v1.0 implementation. Please refer to the as required by the PSCI v1.0 implementation. Please refer to the
`Migration Guide`_ for the previous platform API. `Migration Guide`_ for the previous platform API.
Porting the ARM Trusted Firmware to a new platform involves making some Porting Trusted Firmware-A (TF-A) to a new platform involves making some
mandatory and optional modifications for both the cold and warm boot paths. mandatory and optional modifications for both the cold and warm boot paths.
Modifications consist of: Modifications consist of:
@ -31,20 +31,19 @@ implementations are all weakly defined; they are provided to ease the porting
effort. Each platform port can override them with its own implementation if the effort. Each platform port can override them with its own implementation if the
default implementation is inadequate. default implementation is inadequate.
Platform ports that want to be aligned with standard ARM platforms (for example Platform ports that want to be aligned with standard Arm platforms (for example
FVP and Juno) may also use `include/plat/arm/common/plat\_arm.h`_ and the FVP and Juno) may also use `include/plat/arm/common/plat\_arm.h`_ and the
corresponding source files in ``plat/arm/common/``. These provide standard corresponding source files in ``plat/arm/common/``. These provide standard
implementations for some of the required platform porting functions. However, implementations for some of the required platform porting functions. However,
using these functions requires the platform port to implement additional using these functions requires the platform port to implement additional
ARM standard platform porting functions. These additional functions are not Arm standard platform porting functions. These additional functions are not
documented here. documented here.
Some modifications are common to all Boot Loader (BL) stages. Section 2 Some modifications are common to all Boot Loader (BL) stages. Section 2
discusses these in detail. The subsequent sections discuss the remaining discusses these in detail. The subsequent sections discuss the remaining
modifications for each BL stage in detail. modifications for each BL stage in detail.
This document should be read in conjunction with the ARM Trusted Firmware This document should be read in conjunction with the TF-A `User Guide`_.
`User Guide`_.
Common modifications Common modifications
-------------------- --------------------
@ -67,11 +66,11 @@ only for re-mapping peripheral physical addresses and allows platforms with high
I/O addresses to reduce their virtual address space. All other addresses I/O addresses to reduce their virtual address space. All other addresses
corresponding to code and data must currently use an identity mapping. corresponding to code and data must currently use an identity mapping.
Also, the only translation granule size supported in Trusted Firmware is 4KB, as Also, the only translation granule size supported in TF-A is 4KB, as various
various parts of the code assume that is the case. It is not possible to switch parts of the code assume that is the case. It is not possible to switch to
to 16 KB or 64 KB granule sizes at the moment. 16 KB or 64 KB granule sizes at the moment.
In ARM standard platforms, each BL stage configures the MMU in the In Arm standard platforms, each BL stage configures the MMU in the
platform-specific architecture setup function, ``blX_plat_arch_setup()``, and uses platform-specific architecture setup function, ``blX_plat_arch_setup()``, and uses
an identity mapping for all addresses. an identity mapping for all addresses.
@ -106,14 +105,14 @@ File : platform\_def.h [mandatory]
Each platform must ensure that a header file of this name is in the system Each platform must ensure that a header file of this name is in the system
include path with the following constants defined. This may require updating the include path with the following constants defined. This may require updating the
list of ``PLAT_INCLUDES`` in the ``platform.mk`` file. In the ARM development list of ``PLAT_INCLUDES`` in the ``platform.mk`` file. In the Arm development
platforms, this file is found in ``plat/arm/board/<plat_name>/include/``. platforms, this file is found in ``plat/arm/board/<plat_name>/include/``.
Platform ports may optionally use the file `include/plat/common/common\_def.h`_, Platform ports may optionally use the file `include/plat/common/common\_def.h`_,
which provides typical values for some of the constants below. These values are which provides typical values for some of the constants below. These values are
likely to be suitable for all platform ports. likely to be suitable for all platform ports.
Platform ports that want to be aligned with standard ARM platforms (for example Platform ports that want to be aligned with standard Arm platforms (for example
FVP and Juno) may also use `include/plat/arm/common/arm\_def.h`_, which provides FVP and Juno) may also use `include/plat/arm/common/arm\_def.h`_, which provides
standard values for some of the constants below. However, this requires the standard values for some of the constants below. However, this requires the
platform port to define additional platform porting constants in platform port to define additional platform porting constants in
@ -293,9 +292,9 @@ also be defined:
- **#define : PLAT\_CRYPTOCELL\_BASE** - **#define : PLAT\_CRYPTOCELL\_BASE**
This defines the base address of ARM® TrustZone® CryptoCell and must be This defines the base address of Arm® TrustZone® CryptoCell and must be
defined if CryptoCell crypto driver is used for Trusted Board Boot. For defined if CryptoCell crypto driver is used for Trusted Board Boot. For
capable ARM platforms, this driver is used if ``ARM_CRYPTOCELL_INTEG`` is capable Arm platforms, this driver is used if ``ARM_CRYPTOCELL_INTEG`` is
set. set.
If the AP Firmware Updater Configuration image, BL2U is used, the following If the AP Firmware Updater Configuration image, BL2U is used, the following
@ -322,7 +321,7 @@ must also be defined:
SCP\_BL2U image identifier, used by BL1 to fetch an image descriptor SCP\_BL2U image identifier, used by BL1 to fetch an image descriptor
corresponding to SCP\_BL2U. corresponding to SCP\_BL2U.
NOTE: TF does not provide source code for this image. NOTE: TF-A does not provide source code for this image.
If the Non-Secure Firmware Updater ROM, NS\_BL1U is used, the following must If the Non-Secure Firmware Updater ROM, NS\_BL1U is used, the following must
also be defined: also be defined:
@ -331,7 +330,7 @@ also be defined:
Defines the base address in non-secure ROM where NS\_BL1U executes. Defines the base address in non-secure ROM where NS\_BL1U executes.
Must be aligned on a page-size boundary. Must be aligned on a page-size boundary.
NOTE: TF does not provide source code for this image. NOTE: TF-A does not provide source code for this image.
- **#define : NS\_BL1U\_IMAGE\_ID** - **#define : NS\_BL1U\_IMAGE\_ID**
@ -345,7 +344,7 @@ be defined:
Defines the base address in non-secure memory where NS\_BL2U executes. Defines the base address in non-secure memory where NS\_BL2U executes.
Must be aligned on a page-size boundary. Must be aligned on a page-size boundary.
NOTE: TF does not provide source code for this image. NOTE: TF-A does not provide source code for this image.
- **#define : NS\_BL2U\_IMAGE\_ID** - **#define : NS\_BL2U\_IMAGE\_ID**
@ -507,7 +506,7 @@ required memory within the the per-cpu data to minimize wastage.
structure for use by the platform layer. structure for use by the platform layer.
The following constants are optional. They should be defined when the platform The following constants are optional. They should be defined when the platform
memory layout implies some image overlaying like in ARM standard platforms. memory layout implies some image overlaying like in Arm standard platforms.
- **#define : BL31\_PROGBITS\_LIMIT** - **#define : BL31\_PROGBITS\_LIMIT**
@ -569,7 +568,7 @@ File : plat\_macros.S [mandatory]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Each platform must ensure a file of this name is in the system include path with Each platform must ensure a file of this name is in the system include path with
the following macro defined. In the ARM development platforms, this file is the following macro defined. In the Arm development platforms, this file is
found in ``plat/arm/board/<plat_name>/include/plat_macros.S``. found in ``plat/arm/board/<plat_name>/include/plat_macros.S``.
- **Macro : plat\_crash\_print\_regs** - **Macro : plat\_crash\_print\_regs**
@ -620,7 +619,7 @@ reset entrypoint point provided to ``plat_setup_psci_ops()`` during
BL31 initialization. If it's a cold reset then this function must return zero. BL31 initialization. If it's a cold reset then this function must return zero.
This function does not follow the Procedure Call Standard used by the This function does not follow the Procedure Call Standard used by the
Application Binary Interface for the ARM 64-bit architecture. The caller should Application Binary Interface for the Arm 64-bit architecture. The caller should
not assume that callee saved registers are preserved across a call to this not assume that callee saved registers are preserved across a call to this
function. function.
@ -644,7 +643,7 @@ for placing the executing secondary CPU in a platform-specific state until the
primary CPU performs the necessary actions to bring it out of that state and primary CPU performs the necessary actions to bring it out of that state and
allow entry into the OS. This function must not return. allow entry into the OS. This function must not return.
In the ARM FVP port, when using the normal boot flow, each secondary CPU powers In the Arm FVP port, when using the normal boot flow, each secondary CPU powers
itself off. The primary CPU is responsible for powering up the secondary CPUs itself off. The primary CPU is responsible for powering up the secondary CPUs
when normal world software requires them. When booting an EL3 payload instead, when normal world software requires them. When booting an EL3 payload instead,
they stay powered on and are put in a holding pen until their mailbox gets they stay powered on and are put in a holding pen until their mailbox gets
@ -827,9 +826,9 @@ This function validates the ``MPIDR`` of a CPU and converts it to an index,
which can be used as a CPU-specific linear index into blocks of memory. In which can be used as a CPU-specific linear index into blocks of memory. In
case the ``MPIDR`` is invalid, this function returns -1. This function will only case the ``MPIDR`` is invalid, this function returns -1. This function will only
be invoked by BL31 after the power domain topology is initialized and can be invoked by BL31 after the power domain topology is initialized and can
utilize the C runtime environment. For further details about how ARM Trusted utilize the C runtime environment. For further details about how TF-A
Firmware represents the power domain topology and how this relates to the represents the power domain topology and how this relates to the linear CPU
linear CPU index, please refer `Power Domain Topology Design`_. index, please refer `Power Domain Topology Design`_.
Common optional modifications Common optional modifications
----------------------------- -----------------------------
@ -896,8 +895,7 @@ about the way the platform displays its status information.
For AArch64, this function receives the exception type as its argument. For AArch64, this function receives the exception type as its argument.
Possible values for exceptions types are listed in the Possible values for exceptions types are listed in the
`include/common/bl\_common.h`_ header file. Note that these constants are not `include/common/bl\_common.h`_ header file. Note that these constants are not
related to any architectural exception code; they are just an ARM Trusted related to any architectural exception code; they are just a TF-A convention.
Firmware convention.
For AArch32, this function receives the exception mode as its argument. For AArch32, this function receives the exception mode as its argument.
Possible values for exception modes are listed in the Possible values for exception modes are listed in the
@ -954,8 +952,8 @@ Possible errors reported by the generic code are:
Board Boot is enabled) Board Boot is enabled)
- ``-ENOENT``: the requested image or certificate could not be found or an IO - ``-ENOENT``: the requested image or certificate could not be found or an IO
error was detected error was detected
- ``-ENOMEM``: resources exhausted. Trusted Firmware does not use dynamic - ``-ENOMEM``: resources exhausted. TF-A does not use dynamic memory, so this
memory, so this error is usually an indication of an incorrect array size error is usually an indication of an incorrect array size
The default implementation simply spins. The default implementation simply spins.
@ -996,9 +994,9 @@ Function : plat\_get\_next\_bl\_params()
Return : bl_params_t * Return : bl_params_t *
This function returns a pointer to the shared memory that the platform has This function returns a pointer to the shared memory that the platform has
kept aside to pass trusted firmware related information that next BL image kept aside to pass TF-A related information that next BL image needs. This
needs. This function is currently invoked in BL2 to pass this information to function is currently invoked in BL2 to pass this information to the next BL
the next BL image, when LOAD\_IMAGE\_V2 is enabled. image, when LOAD\_IMAGE\_V2 is enabled.
Function : plat\_get\_stack\_protector\_canary() Function : plat\_get\_stack\_protector\_canary()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1039,11 +1037,11 @@ Function : plat\_log\_get\_prefix()
Return : const char * Return : const char *
This function defines the prefix string corresponding to the `log_level` to be This function defines the prefix string corresponding to the `log_level` to be
prepended to all the log output from ARM Trusted Firmware. The `log_level` prepended to all the log output from TF-A. The `log_level` (argument) will
(argument) will correspond to one of the standard log levels defined in correspond to one of the standard log levels defined in debug.h. The platform
debug.h. The platform can override the common implementation to define a can override the common implementation to define a different prefix string for
different prefix string for the log output. The implementation should be the log output. The implementation should be robust to future changes that
robust to future changes that increase the number of log levels. increase the number of log levels.
Modifications specific to a Boot Loader stage Modifications specific to a Boot Loader stage
--------------------------------------------- ---------------------------------------------
@ -1101,7 +1099,7 @@ Function : bl1\_early\_platform\_setup() [mandatory]
This function executes with the MMU and data caches disabled. It is only called This function executes with the MMU and data caches disabled. It is only called
by the primary CPU. by the primary CPU.
On ARM standard platforms, this function: On Arm standard platforms, this function:
- Enables a secure instance of SP805 to act as the Trusted Watchdog. - Enables a secure instance of SP805 to act as the Trusted Watchdog.
@ -1124,7 +1122,7 @@ This function performs any platform-specific and architectural setup that the
platform requires. Platform-specific setup might include configuration of platform requires. Platform-specific setup might include configuration of
memory controllers and the interconnect. memory controllers and the interconnect.
In ARM standard platforms, this function enables the MMU. In Arm standard platforms, this function enables the MMU.
This function helps fulfill requirement 2 above. This function helps fulfill requirement 2 above.
@ -1143,7 +1141,7 @@ MMU and data cache have been enabled.
if support for multiple boot sources is required, it initializes the boot if support for multiple boot sources is required, it initializes the boot
sequence used by plat\_try\_next\_boot\_source(). sequence used by plat\_try\_next\_boot\_source().
In ARM standard platforms, this function initializes the storage abstraction In Arm standard platforms, this function initializes the storage abstraction
layer used to load the next bootloader image. layer used to load the next bootloader image.
This function helps fulfill requirement 4 above. This function helps fulfill requirement 4 above.
@ -1216,7 +1214,7 @@ loaded and executed. If the platform returns ``BL2_IMAGE_ID`` then BL1 proceeds
with the normal boot sequence, which loads and executes BL2. If the platform with the normal boot sequence, which loads and executes BL2. If the platform
returns a different image id, BL1 assumes that Firmware Update is required. returns a different image id, BL1 assumes that Firmware Update is required.
The default implementation always returns ``BL2_IMAGE_ID``. The ARM development The default implementation always returns ``BL2_IMAGE_ID``. The Arm development
platforms override this function to detect if firmware update is required, and platforms override this function to detect if firmware update is required, and
if so, return the first image in the firmware update process. if so, return the first image in the firmware update process.
@ -1231,7 +1229,7 @@ Function : bl1\_plat\_get\_image\_desc() [optional]
BL1 calls this function to get the image descriptor information ``image_desc_t`` BL1 calls this function to get the image descriptor information ``image_desc_t``
for the provided ``image_id`` from the platform. for the provided ``image_id`` from the platform.
The default implementation always returns a common BL2 image descriptor. ARM The default implementation always returns a common BL2 image descriptor. Arm
standard platforms return an image descriptor corresponding to BL2 or one of standard platforms return an image descriptor corresponding to BL2 or one of
the firmware update images defined in the Trusted Board Boot Requirements the firmware update images defined in the Trusted Board Boot Requirements
specification. specification.
@ -1371,7 +1369,7 @@ variable as the original memory may be subsequently overwritten by BL2. The
copied structure is made available to all BL2 code through the copied structure is made available to all BL2 code through the
``bl2_plat_sec_mem_layout()`` function. ``bl2_plat_sec_mem_layout()`` function.
On ARM standard platforms, this function also: On Arm standard platforms, this function also:
- Initializes a UART (PL011 console), which enables access to the ``printf`` - Initializes a UART (PL011 console), which enables access to the ``printf``
family of functions in BL2. family of functions in BL2.
@ -1394,7 +1392,7 @@ by the primary CPU.
The purpose of this function is to perform any architectural initialization The purpose of this function is to perform any architectural initialization
that varies across platforms. that varies across platforms.
On ARM standard platforms, this function enables the MMU. On Arm standard platforms, this function enables the MMU.
Function : bl2\_platform\_setup() [mandatory] Function : bl2\_platform\_setup() [mandatory]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1411,7 +1409,7 @@ called by the primary CPU.
The purpose of this function is to perform any platform initialization The purpose of this function is to perform any platform initialization
specific to BL2. specific to BL2.
In ARM standard platforms, this function performs security setup, including In Arm standard platforms, this function performs security setup, including
configuration of the TrustZone controller to allow non-secure masters access configuration of the TrustZone controller to allow non-secure masters access
to most of DRAM. Part of DRAM is reserved for secure world use. to most of DRAM. Part of DRAM is reserved for secure world use.
@ -1526,7 +1524,7 @@ BL2 platform code returns a pointer which is used to populate the entry point
information for BL31 entry point. The location pointed by it should be information for BL31 entry point. The location pointed by it should be
accessible from BL1 while processing the synchronous exception to run to BL31. accessible from BL1 while processing the synchronous exception to run to BL31.
In ARM standard platforms this is allocated inside a bl2\_to\_bl31\_params\_mem In Arm standard platforms this is allocated inside a bl2\_to\_bl31\_params\_mem
structure in BL2 memory. structure in BL2 memory.
Function : bl2\_plat\_set\_bl31\_ep\_info() [mandatory] Function : bl2\_plat\_set\_bl31\_ep\_info() [mandatory]
@ -1664,8 +1662,8 @@ of this always returns 0.
Boot Loader Stage 2 (BL2) at EL3 Boot Loader Stage 2 (BL2) at EL3
-------------------------------- --------------------------------
When the platform has a non-TF Boot ROM it is desirable to jump When the platform has a non-TF-A Boot ROM it is desirable to jump
directly to BL2 instead of TF BL1. In this case BL2 is expected to directly to BL2 instead of TF-A BL1. In this case BL2 is expected to
execute at EL3 instead of executing at EL1. Refer to the `Firmware execute at EL3 instead of executing at EL1. Refer to the `Firmware
Design`_ for more information. Design`_ for more information.
@ -1687,7 +1685,7 @@ This function executes with the MMU and data caches disabled. It is only called
by the primary CPU. This function receives four parameters which can be used by the primary CPU. This function receives four parameters which can be used
by the platform to pass any needed information from the Boot ROM to BL2. by the platform to pass any needed information from the Boot ROM to BL2.
On ARM standard platforms, this function does the following: On Arm standard platforms, this function does the following:
- Initializes a UART (PL011 console), which enables access to the ``printf`` - Initializes a UART (PL011 console), which enables access to the ``printf``
family of functions in BL2. family of functions in BL2.
@ -1711,7 +1709,7 @@ by the primary CPU.
The purpose of this function is to perform any architectural initialization The purpose of this function is to perform any architectural initialization
that varies across platforms. that varies across platforms.
On ARM standard platforms, this function enables the MMU. On Arm standard platforms, this function enables the MMU.
Function : bl2\_el3\_plat\_prepare\_exit() [optional] Function : bl2\_el3\_plat\_prepare\_exit() [optional]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1740,7 +1738,7 @@ process and is executed only by the primary CPU. BL1 passes control to BL2U at
If ``SCP_BL2U_BASE`` is not defined then this step is not performed. If ``SCP_BL2U_BASE`` is not defined then this step is not performed.
#. Any platform specific setup required to perform the FWU process. For #. Any platform specific setup required to perform the FWU process. For
example, ARM standard platforms initialize the TZC controller so that the example, Arm standard platforms initialize the TZC controller so that the
normal world can access DDR memory. normal world can access DDR memory.
The following functions must be implemented by the platform port to enable The following functions must be implemented by the platform port to enable
@ -1761,7 +1759,7 @@ of the ``meminfo`` structure and platform specific info provided by BL1.
The platform may copy the contents of the ``mem_info`` and ``plat_info`` into The platform may copy the contents of the ``mem_info`` and ``plat_info`` into
private storage as the original memory may be subsequently overwritten by BL2U. private storage as the original memory may be subsequently overwritten by BL2U.
On ARM CSS platforms ``plat_info`` is interpreted as an ``image_info_t`` structure, On Arm CSS platforms ``plat_info`` is interpreted as an ``image_info_t`` structure,
to extract SCP\_BL2U image information, which is then copied into a private to extract SCP\_BL2U image information, which is then copied into a private
variable. variable.
@ -1795,7 +1793,7 @@ called by the primary CPU.
The purpose of this function is to perform any platform initialization The purpose of this function is to perform any platform initialization
specific to BL2U. specific to BL2U.
In ARM standard platforms, this function performs security setup, including In Arm standard platforms, this function performs security setup, including
configuration of the TrustZone controller to allow non-secure masters access configuration of the TrustZone controller to allow non-secure masters access
to most of DRAM. Part of DRAM is reserved for secure world use. to most of DRAM. Part of DRAM is reserved for secure world use.
@ -1868,7 +1866,7 @@ sub-structures into private variables if the original memory may be
subsequently overwritten by BL31 and similarly the ``void *`` pointing subsequently overwritten by BL31 and similarly the ``void *`` pointing
to the platform data also needs to be saved. to the platform data also needs to be saved.
In ARM standard platforms, BL2 passes a pointer to a ``bl31_params`` structure In Arm standard platforms, BL2 passes a pointer to a ``bl31_params`` structure
in BL2 memory. BL31 copies the information in this pointer to internal data in BL2 memory. BL31 copies the information in this pointer to internal data
structures. It also performs the following: structures. It also performs the following:
@ -1893,7 +1891,7 @@ by the primary CPU.
The purpose of this function is to perform any architectural initialization The purpose of this function is to perform any architectural initialization
that varies across platforms. that varies across platforms.
On ARM standard platforms, this function enables the MMU. On Arm standard platforms, this function enables the MMU.
Function : bl31\_platform\_setup() [mandatory] Function : bl31\_platform\_setup() [mandatory]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1910,7 +1908,7 @@ called by the primary CPU.
The purpose of this function is to complete platform initialization so that both The purpose of this function is to complete platform initialization so that both
BL31 runtime services and normal world software can function correctly. BL31 runtime services and normal world software can function correctly.
On ARM standard platforms, this function does the following: On Arm standard platforms, this function does the following:
- Initialize the generic interrupt controller. - Initialize the generic interrupt controller.
@ -1978,7 +1976,7 @@ Function : plat\_get\_syscnt\_freq2() [mandatory]
This function is used by the architecture setup code to retrieve the counter This function is used by the architecture setup code to retrieve the counter
frequency for the CPU's generic timer. This value will be programmed into the frequency for the CPU's generic timer. This value will be programmed into the
``CNTFRQ_EL0`` register. In ARM standard platforms, it returns the base frequency ``CNTFRQ_EL0`` register. In Arm standard platforms, it returns the base frequency
of the system counter, which is retrieved from the first entry in the frequency of the system counter, which is retrieved from the first entry in the frequency
modes table. modes table.
@ -2045,7 +2043,7 @@ argument, which is the address of the handler the SDEI client requested to
register. The function must return ``0`` for successful validation, or ``-1`` register. The function must return ``0`` for successful validation, or ``-1``
upon failure. upon failure.
The default implementation always returns ``0``. On ARM platforms, this function The default implementation always returns ``0``. On Arm platforms, this function
is implemented to translate the entry point to physical address, and further to is implemented to translate the entry point to physical address, and further to
ensure that the address is located in Non-secure DRAM. ensure that the address is located in Non-secure DRAM.
@ -2072,18 +2070,18 @@ The default implementation only prints out a warning message.
Power State Coordination Interface (in BL31) Power State Coordination Interface (in BL31)
-------------------------------------------- --------------------------------------------
The ARM Trusted Firmware's implementation of the PSCI API is based around the The TF-A implementation of the PSCI API is based around the concept of a
concept of a *power domain*. A *power domain* is a CPU or a logical group of *power domain*. A *power domain* is a CPU or a logical group of CPUs which
CPUs which share some state on which power management operations can be share some state on which power management operations can be performed as
performed as specified by `PSCI`_. Each CPU in the system is assigned a cpu specified by `PSCI`_. Each CPU in the system is assigned a cpu index which is
index which is a unique number between ``0`` and ``PLATFORM_CORE_COUNT - 1``. a unique number between ``0`` and ``PLATFORM_CORE_COUNT - 1``. The
The *power domains* are arranged in a hierarchical tree structure and *power domains* are arranged in a hierarchical tree structure and each
each *power domain* can be identified in a system by the cpu index of any CPU *power domain* can be identified in a system by the cpu index of any CPU that
that is part of that domain and a *power domain level*. A processing element is part of that domain and a *power domain level*. A processing element (for
(for example, a CPU) is at level 0. If the *power domain* node above a CPU is example, a CPU) is at level 0. If the *power domain* node above a CPU is a
a logical grouping of CPUs that share some state, then level 1 is that group logical grouping of CPUs that share some state, then level 1 is that group of
of CPUs (for example, a cluster), and level 2 is a group of clusters CPUs (for example, a cluster), and level 2 is a group of clusters (for
(for example, the system). More details on the power domain topology and its example, the system). More details on the power domain topology and its
organization can be found in `Power Domain Topology Design`_. organization can be found in `Power Domain Topology Design`_.
BL31's platform initialization code exports a pointer to the platform-specific BL31's platform initialization code exports a pointer to the platform-specific
@ -2223,12 +2221,12 @@ platform-specific psci power management actions by populating the passed
pointer with a pointer to BL31's private ``plat_psci_ops`` structure. pointer with a pointer to BL31's private ``plat_psci_ops`` structure.
A description of each member of this structure is given below. Please refer to A description of each member of this structure is given below. Please refer to
the ARM FVP specific implementation of these handlers in the Arm FVP specific implementation of these handlers in
`plat/arm/board/fvp/fvp\_pm.c`_ as an example. For each PSCI function that the `plat/arm/board/fvp/fvp\_pm.c`_ as an example. For each PSCI function that the
platform wants to support, the associated operation or operations in this platform wants to support, the associated operation or operations in this
structure must be provided and implemented (Refer section 4 of structure must be provided and implemented (Refer section 4 of
`Firmware Design`_ for the PSCI API supported in Trusted Firmware). To disable `Firmware Design`_ for the PSCI API supported in TF-A). To disable a PSCI
a PSCI function in a platform port, the operation should be removed from this function in a platform port, the operation should be removed from this
structure instead of providing an empty implementation. structure instead of providing an empty implementation.
plat\_psci\_ops.cpu\_standby() plat\_psci\_ops.cpu\_standby()
@ -2511,14 +2509,14 @@ state or EL3/S-EL1 in the secure state. The design of this framework is
described in the `IMF Design Guide`_ described in the `IMF Design Guide`_
A platform should export the following APIs to support the IMF. The following A platform should export the following APIs to support the IMF. The following
text briefly describes each api and its implementation in ARM standard text briefly describes each api and its implementation in Arm standard
platforms. The API implementation depends upon the type of interrupt controller platforms. The API implementation depends upon the type of interrupt controller
present in the platform. ARM standard platform layer supports both present in the platform. Arm standard platform layer supports both
`ARM Generic Interrupt Controller version 2.0 (GICv2)`_ `Arm Generic Interrupt Controller version 2.0 (GICv2)`_
and `3.0 (GICv3)`_. Juno builds the ARM and `3.0 (GICv3)`_. Juno builds the Arm platform layer to use GICv2 and the
Standard layer to use GICv2 and the FVP can be configured to use either GICv2 or FVP can be configured to use either GICv2 or GICv3 depending on the build flag
GICv3 depending on the build flag ``FVP_USE_GIC_DRIVER`` (See FVP platform ``FVP_USE_GIC_DRIVER`` (See FVP platform specific build options in
specific build options in `User Guide`_ for more details). `User Guide`_ for more details).
See also: `Interrupt Controller Abstraction APIs`__. See also: `Interrupt Controller Abstraction APIs`__.
@ -2532,7 +2530,7 @@ Function : plat\_interrupt\_type\_to\_line() [mandatory]
Argument : uint32_t, uint32_t Argument : uint32_t, uint32_t
Return : uint32_t Return : uint32_t
The ARM processor signals an interrupt exception either through the IRQ or FIQ The Arm processor signals an interrupt exception either through the IRQ or FIQ
interrupt line. The specific line that is signaled depends on how the interrupt interrupt line. The specific line that is signaled depends on how the interrupt
controller (IC) reports different interrupt types from an execution context in controller (IC) reports different interrupt types from an execution context in
either security state. The IMF uses this API to determine which interrupt line either security state. The IMF uses this API to determine which interrupt line
@ -2545,11 +2543,11 @@ security state of the originating execution context. The return result is the
bit position in the ``SCR_EL3`` register of the respective interrupt trap: IRQ=1, bit position in the ``SCR_EL3`` register of the respective interrupt trap: IRQ=1,
FIQ=2. FIQ=2.
In the case of ARM standard platforms using GICv2, S-EL1 interrupts are In the case of Arm standard platforms using GICv2, S-EL1 interrupts are
configured as FIQs and Non-secure interrupts as IRQs from either security configured as FIQs and Non-secure interrupts as IRQs from either security
state. state.
In the case of ARM standard platforms using GICv3, the interrupt line to be In the case of Arm standard platforms using GICv3, the interrupt line to be
configured depends on the security state of the execution context when the configured depends on the security state of the execution context when the
interrupt is signalled and are as follows: interrupt is signalled and are as follows:
@ -2574,7 +2572,7 @@ handler function. ``INTR_TYPE_INVAL`` is returned when there is no interrupt
pending. The valid interrupt types that can be returned are ``INTR_TYPE_EL3``, pending. The valid interrupt types that can be returned are ``INTR_TYPE_EL3``,
``INTR_TYPE_S_EL1`` and ``INTR_TYPE_NS``. This API must be invoked at EL3. ``INTR_TYPE_S_EL1`` and ``INTR_TYPE_NS``. This API must be invoked at EL3.
In the case of ARM standard platforms using GICv2, the *Highest Priority In the case of Arm standard platforms using GICv2, the *Highest Priority
Pending Interrupt Register* (``GICC_HPPIR``) is read to determine the id of Pending Interrupt Register* (``GICC_HPPIR``) is read to determine the id of
the pending interrupt. The type of interrupt depends upon the id value as the pending interrupt. The type of interrupt depends upon the id value as
follows. follows.
@ -2583,7 +2581,7 @@ follows.
#. id = 1022 is reported as a Non-secure interrupt. #. id = 1022 is reported as a Non-secure interrupt.
#. id = 1023 is reported as an invalid interrupt type. #. id = 1023 is reported as an invalid interrupt type.
In the case of ARM standard platforms using GICv3, the system register In the case of Arm standard platforms using GICv3, the system register
``ICC_HPPIR0_EL1``, *Highest Priority Pending group 0 Interrupt Register*, ``ICC_HPPIR0_EL1``, *Highest Priority Pending group 0 Interrupt Register*,
is read to determine the id of the pending interrupt. The type of interrupt is read to determine the id of the pending interrupt. The type of interrupt
depends upon the id value as follows. depends upon the id value as follows.
@ -2605,7 +2603,7 @@ This API returns the id of the highest priority pending interrupt at the
platform IC. ``INTR_ID_UNAVAILABLE`` is returned when there is no interrupt platform IC. ``INTR_ID_UNAVAILABLE`` is returned when there is no interrupt
pending. pending.
In the case of ARM standard platforms using GICv2, the *Highest Priority In the case of Arm standard platforms using GICv2, the *Highest Priority
Pending Interrupt Register* (``GICC_HPPIR``) is read to determine the id of the Pending Interrupt Register* (``GICC_HPPIR``) is read to determine the id of the
pending interrupt. The id that is returned by API depends upon the value of pending interrupt. The id that is returned by API depends upon the value of
the id read from the interrupt controller as follows. the id read from the interrupt controller as follows.
@ -2616,7 +2614,7 @@ the id read from the interrupt controller as follows.
This id is returned by the API. This id is returned by the API.
#. id = 1023. ``INTR_ID_UNAVAILABLE`` is returned. #. id = 1023. ``INTR_ID_UNAVAILABLE`` is returned.
In the case of ARM standard platforms using GICv3, if the API is invoked from In the case of Arm standard platforms using GICv3, if the API is invoked from
EL3, the system register ``ICC_HPPIR0_EL1``, *Highest Priority Pending Interrupt EL3, the system register ``ICC_HPPIR0_EL1``, *Highest Priority Pending Interrupt
group 0 Register*, is read to determine the id of the pending interrupt. The id group 0 Register*, is read to determine the id of the pending interrupt. The id
that is returned by API depends upon the value of the id read from the that is returned by API depends upon the value of the id read from the
@ -2651,12 +2649,12 @@ The actual interrupt number shall be extracted from this raw value using the API
.. __: platform-interrupt-controller-API.rst#function-unsigned-int-plat-ic-get-interrupt-id-unsigned-int-raw-optional .. __: platform-interrupt-controller-API.rst#function-unsigned-int-plat-ic-get-interrupt-id-unsigned-int-raw-optional
This function in ARM standard platforms using GICv2, reads the *Interrupt This function in Arm standard platforms using GICv2, reads the *Interrupt
Acknowledge Register* (``GICC_IAR``). This changes the state of the highest Acknowledge Register* (``GICC_IAR``). This changes the state of the highest
priority pending interrupt from pending to active in the interrupt controller. priority pending interrupt from pending to active in the interrupt controller.
It returns the value read from the ``GICC_IAR``, unmodified. It returns the value read from the ``GICC_IAR``, unmodified.
In the case of ARM standard platforms using GICv3, if the API is invoked In the case of Arm standard platforms using GICv3, if the API is invoked
from EL3, the function reads the system register ``ICC_IAR0_EL1``, *Interrupt from EL3, the function reads the system register ``ICC_IAR0_EL1``, *Interrupt
Acknowledge Register group 0*. If the API is invoked from S-EL1, the function Acknowledge Register group 0*. If the API is invoked from S-EL1, the function
reads the system register ``ICC_IAR1_EL1``, *Interrupt Acknowledge Register reads the system register ``ICC_IAR1_EL1``, *Interrupt Acknowledge Register
@ -2680,7 +2678,7 @@ the interrupt corresponding to the id (passed as the parameter) has
finished. The id should be the same as the id returned by the finished. The id should be the same as the id returned by the
``plat_ic_acknowledge_interrupt()`` API. ``plat_ic_acknowledge_interrupt()`` API.
ARM standard platforms write the id to the *End of Interrupt Register* Arm standard platforms write the id to the *End of Interrupt Register*
(``GICC_EOIR``) in case of GICv2, and to ``ICC_EOIR0_EL1`` or ``ICC_EOIR1_EL1`` (``GICC_EOIR``) in case of GICv2, and to ``ICC_EOIR0_EL1`` or ``ICC_EOIR1_EL1``
system register in case of GICv3 depending on where the API is invoked from, system register in case of GICv3 depending on where the API is invoked from,
EL3 or S-EL1. This deactivates the corresponding interrupt in the interrupt EL3 or S-EL1. This deactivates the corresponding interrupt in the interrupt
@ -2703,12 +2701,12 @@ interrupt type (one of ``INTR_TYPE_EL3``, ``INTR_TYPE_S_EL1`` and ``INTR_TYPE_NS
returned depending upon how the interrupt has been configured by the platform returned depending upon how the interrupt has been configured by the platform
IC. This API must be invoked at EL3. IC. This API must be invoked at EL3.
ARM standard platforms using GICv2 configures S-EL1 interrupts as Group0 interrupts Arm standard platforms using GICv2 configures S-EL1 interrupts as Group0 interrupts
and Non-secure interrupts as Group1 interrupts. It reads the group value and Non-secure interrupts as Group1 interrupts. It reads the group value
corresponding to the interrupt id from the relevant *Interrupt Group Register* corresponding to the interrupt id from the relevant *Interrupt Group Register*
(``GICD_IGROUPRn``). It uses the group value to determine the type of interrupt. (``GICD_IGROUPRn``). It uses the group value to determine the type of interrupt.
In the case of ARM standard platforms using GICv3, both the *Interrupt Group In the case of Arm standard platforms using GICv3, both the *Interrupt Group
Register* (``GICD_IGROUPRn``) and *Interrupt Group Modifier Register* Register* (``GICD_IGROUPRn``) and *Interrupt Group Modifier Register*
(``GICD_IGRPMODRn``) is read to figure out whether the interrupt is configured (``GICD_IGRPMODRn``) is read to figure out whether the interrupt is configured
as Group 0 secure interrupt, Group 1 secure interrupt or Group 1 NS interrupt. as Group 0 secure interrupt, Group 1 secure interrupt or Group 1 NS interrupt.
@ -2829,10 +2827,10 @@ C Library
To avoid subtle toolchain behavioral dependencies, the header files provided To avoid subtle toolchain behavioral dependencies, the header files provided
by the compiler are not used. The software is built with the ``-nostdinc`` flag by the compiler are not used. The software is built with the ``-nostdinc`` flag
to ensure no headers are included from the toolchain inadvertently. Instead the to ensure no headers are included from the toolchain inadvertently. Instead the
required headers are included in the ARM Trusted Firmware source tree. The required headers are included in the TF-A source tree. The library only
library only contains those C library definitions required by the local contains those C library definitions required by the local implementation. If
implementation. If more functionality is required, the needed library functions more functionality is required, the needed library functions will need to be
will need to be added to the local implementation. added to the local implementation.
Versions of `FreeBSD`_ headers can be found in ``include/lib/stdlib``. Some of Versions of `FreeBSD`_ headers can be found in ``include/lib/stdlib``. Some of
these headers have been cut down in order to simplify the implementation. In these headers have been cut down in order to simplify the implementation. In
@ -2873,7 +2871,7 @@ required in their respective ``blx_platform_setup()`` functions. Currently
storage access is only required by BL1 and BL2 phases. The ``load_image()`` storage access is only required by BL1 and BL2 phases. The ``load_image()``
function uses the storage layer to access non-volatile platform storage. function uses the storage layer to access non-volatile platform storage.
It is mandatory to implement at least one storage driver. For the ARM It is mandatory to implement at least one storage driver. For the Arm
development platforms the Firmware Image Package (FIP) driver is provided as development platforms the Firmware Image Package (FIP) driver is provided as
the default means to load data from storage (see the "Firmware Image Package" the default means to load data from storage (see the "Firmware Image Package"
section in the `User Guide`_). The storage layer is described in the header file section in the `User Guide`_). The storage layer is described in the header file
@ -2913,7 +2911,7 @@ amount of open resources per driver.
-------------- --------------
*Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _Migration Guide: platform-migration-guide.rst .. _Migration Guide: platform-migration-guide.rst
.. _include/plat/common/platform.h: ../include/plat/common/platform.h .. _include/plat/common/platform.h: ../include/plat/common/platform.h
@ -2931,6 +2929,6 @@ amount of open resources per driver.
.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf .. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
.. _plat/arm/board/fvp/fvp\_pm.c: ../plat/arm/board/fvp/fvp_pm.c .. _plat/arm/board/fvp/fvp\_pm.c: ../plat/arm/board/fvp/fvp_pm.c
.. _IMF Design Guide: interrupt-framework-design.rst .. _IMF Design Guide: interrupt-framework-design.rst
.. _ARM Generic Interrupt Controller version 2.0 (GICv2): http://infocenter.arm.com/help/topic/com.arm.doc.ihi0048b/index.html .. _Arm Generic Interrupt Controller version 2.0 (GICv2): http://infocenter.arm.com/help/topic/com.arm.doc.ihi0048b/index.html
.. _3.0 (GICv3): http://infocenter.arm.com/help/topic/com.arm.doc.ihi0069b/index.html .. _3.0 (GICv3): http://infocenter.arm.com/help/topic/com.arm.doc.ihi0069b/index.html
.. _FreeBSD: http://www.freebsd.org .. _FreeBSD: http://www.freebsd.org

View File

@ -1,4 +1,4 @@
PSCI Library Integration guide for ARMv8-A AArch32 systems PSCI Library Integration guide for Armv8-A AArch32 systems
========================================================== ==========================================================
@ -8,7 +8,7 @@ PSCI Library Integration guide for ARMv8-A AArch32 systems
.. contents:: .. contents::
This document describes the PSCI library interface with a focus on how to This document describes the PSCI library interface with a focus on how to
integrate with a suitable Trusted OS for an ARMv8-A AArch32 system. The PSCI integrate with a suitable Trusted OS for an Armv8-A AArch32 system. The PSCI
Library implements the PSCI Standard as described in `PSCI spec`_ and is meant Library implements the PSCI Standard as described in `PSCI spec`_ and is meant
to be integrated with EL3 Runtime Software which invokes the PSCI Library to be integrated with EL3 Runtime Software which invokes the PSCI Library
interface appropriately. **EL3 Runtime Software** refers to software executing interface appropriately. **EL3 Runtime Software** refers to software executing
@ -17,9 +17,10 @@ Monitor mode in AArch32, and provides runtime services to the non-secure world.
The runtime service request is made via SMC (Secure Monitor Call) and the call The runtime service request is made via SMC (Secure Monitor Call) and the call
must adhere to `SMCCC`_. In AArch32, EL3 Runtime Software may additionally must adhere to `SMCCC`_. In AArch32, EL3 Runtime Software may additionally
include Trusted OS functionality. A minimal AArch32 Secure Payload, SP-MIN, is include Trusted OS functionality. A minimal AArch32 Secure Payload, SP-MIN, is
provided in ARM Trusted Firmware to illustrate the usage and integration of the provided in Trusted Firmware-A (TF-A) to illustrate the usage and integration
PSCI library. The description of PSCI library interface and its integration of the PSCI library. The description of PSCI library interface and its
with EL3 Runtime Software in this document is targeted towards AArch32 systems. integration with EL3 Runtime Software in this document is targeted towards
AArch32 systems.
Generic call sequence for PSCI Library interface (AArch32) Generic call sequence for PSCI Library interface (AArch32)
---------------------------------------------------------- ----------------------------------------------------------
@ -315,7 +316,7 @@ Software must provide an SMC handling framework capable of MP adhering to
The EL3 Runtime Software must also export cache maintenance primitives The EL3 Runtime Software must also export cache maintenance primitives
and some helper utilities for assert, print and memory operations as listed and some helper utilities for assert, print and memory operations as listed
below. The ARM Trusted Firmware source tree provides implementations for all below. The TF-A source tree provides implementations for all
these functions but the EL3 Runtime Software may use its own implementation. these functions but the EL3 Runtime Software may use its own implementation.
**Functions : assert(), memcpy(), memset** **Functions : assert(), memcpy(), memset**
@ -355,10 +356,10 @@ failure that cannot be recovered from. This function **must not** return.
**Function : tf\_printf()** **Function : tf\_printf()**
This is printf-compatible function, but unlike printf, it does not return any This is printf-compatible function, but unlike printf, it does not return any
value. The ARM Trusted Firmware source tree provides an implementation which value. The TF-A source tree provides an implementation which
is optimized for stack usage and supports only a subset of format specifiers. is optimized for stack usage and supports only a subset of format specifiers.
The details of the format specifiers supported can be found in the The details of the format specifiers supported can be found in the
``tf_printf.c`` file in ARM Trusted Firmware source tree. ``tf_printf.c`` file in the TF-A source tree.
CPU Context management API CPU Context management API
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -537,7 +538,8 @@ CPU operations
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
The CPU operations (cpu\_ops) framework implement power down sequence specific The CPU operations (cpu\_ops) framework implement power down sequence specific
to the CPU and the details of which can be found in the ``CPU specific operations framework`` section of `Firmware Design`_. The ARM Trusted Firmware to the CPU and the details of which can be found in the
``CPU specific operations framework`` section of `Firmware Design`_. The TF-A
tree implements the ``cpu_ops`` for various supported CPUs and the EL3 Runtime tree implements the ``cpu_ops`` for various supported CPUs and the EL3 Runtime
Software needs to include the required ``cpu_ops`` in its build. The start and Software needs to include the required ``cpu_ops`` in its build. The start and
end of the ``cpu_ops`` descriptors must be exported by the EL3 Runtime Software end of the ``cpu_ops`` descriptors must be exported by the EL3 Runtime Software
@ -550,7 +552,7 @@ workarounds.
-------------- --------------
*Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2016-2018, Arm Limited and Contributors. All rights reserved.*
.. _PSCI spec: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf .. _PSCI spec: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
.. _SMCCC: https://silver.arm.com/download/ARM_and_AMBA_Architecture/AR570-DA-80002-r0p0-00rel0/ARM_DEN0028A_SMC_Calling_Convention.pdf .. _SMCCC: https://silver.arm.com/download/ARM_and_AMBA_Architecture/AR570-DA-80002-r0p0-00rel0/ARM_DEN0028A_SMC_Calling_Convention.pdf

View File

@ -1,4 +1,4 @@
PSCI Library Integration guide for ARMv8-A AArch32 systems PSCI Library Integration guide for Armv8-A AArch32 systems
========================================================== ==========================================================
@ -309,4 +309,4 @@ domain nodes do not need to be identified.
-------------- --------------
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware Reset Design Trusted Firmware-A reset design
================================= ===============================
.. section-numbering:: .. section-numbering::
@ -8,9 +8,9 @@ ARM Trusted Firmware Reset Design
.. contents:: .. contents::
This document describes the high-level design of the framework to handle CPU This document describes the high-level design of the framework to handle CPU
resets in ARM Trusted Firmware. It also describes how the platform integrator resets in Trusted Firmware-A (TF-A). It also describes how the platform
can tailor this code to the system configuration to some extent, resulting in a integrator can tailor this code to the system configuration to some extent,
simplified and more optimised boot flow. resulting in a simplified and more optimised boot flow.
This document should be used in conjunction with the `Firmware Design`_, which This document should be used in conjunction with the `Firmware Design`_, which
provides greater implementation details around the reset code, specifically provides greater implementation details around the reset code, specifically
@ -19,8 +19,8 @@ for the cold boot path.
General reset code flow General reset code flow
----------------------- -----------------------
The ARM Trusted Firmware (TF) reset code is implemented in BL1 by default. The The TF-A reset code is implemented in BL1 by default. The following high-level
following high-level diagram illustrates this: diagram illustrates this:
|Default reset code flow| |Default reset code flow|
@ -29,15 +29,15 @@ configuration, some of these steps might be unnecessary. The following sections
guide the platform integrator by indicating which build options exclude which guide the platform integrator by indicating which build options exclude which
steps, depending on the capability of the platform. steps, depending on the capability of the platform.
Note: If BL31 is used as the Trusted Firmware entry point instead of BL1, the Note: If BL31 is used as the TF-A entry point instead of BL1, the diagram
diagram above is still relevant, as all these operations will occur in BL31 in above is still relevant, as all these operations will occur in BL31 in
this case. Please refer to section 6 "Using BL31 entrypoint as the reset this case. Please refer to section 6 "Using BL31 entrypoint as the reset
address" for more information. address" for more information.
Programmable CPU reset address Programmable CPU reset address
------------------------------ ------------------------------
By default, the TF assumes that the CPU reset address is not programmable. By default, TF-A assumes that the CPU reset address is not programmable.
Therefore, all CPUs start at the same address (typically address 0) whenever Therefore, all CPUs start at the same address (typically address 0) whenever
they reset. Further logic is then required to identify whether it is a cold or they reset. Further logic is then required to identify whether it is a cold or
warm boot to direct CPUs to the right execution path. warm boot to direct CPUs to the right execution path.
@ -49,8 +49,8 @@ detection can be skipped, resulting in the following boot flow:
|Reset code flow with programmable reset address| |Reset code flow with programmable reset address|
To enable this boot flow, compile the TF with ``PROGRAMMABLE_RESET_ADDRESS=1``. To enable this boot flow, compile TF-A with ``PROGRAMMABLE_RESET_ADDRESS=1``.
This option only affects the TF reset image, which is BL1 by default or BL31 if This option only affects the TF-A reset image, which is BL1 by default or BL31 if
``RESET_TO_BL31=1``. ``RESET_TO_BL31=1``.
On both the FVP and Juno platforms, the reset vector address is not programmable On both the FVP and Juno platforms, the reset vector address is not programmable
@ -59,7 +59,7 @@ so both ports use ``PROGRAMMABLE_RESET_ADDRESS=0``.
Cold boot on a single CPU Cold boot on a single CPU
------------------------- -------------------------
By default, the TF assumes that several CPUs may be released out of reset. By default, TF-A assumes that several CPUs may be released out of reset.
Therefore, the cold boot code has to arbitrate access to hardware resources Therefore, the cold boot code has to arbitrate access to hardware resources
shared amongst CPUs. This is done by nominating one of the CPUs as the primary, shared amongst CPUs. This is done by nominating one of the CPUs as the primary,
which is responsible for initialising shared hardware and coordinating the boot which is responsible for initialising shared hardware and coordinating the boot
@ -71,8 +71,8 @@ applies. This results in the following boot flow:
|Reset code flow with single CPU released out of reset| |Reset code flow with single CPU released out of reset|
To enable this boot flow, compile the TF with ``COLD_BOOT_SINGLE_CPU=1``. This To enable this boot flow, compile TF-A with ``COLD_BOOT_SINGLE_CPU=1``. This
option only affects the TF reset image, which is BL1 by default or BL31 if option only affects the TF-A reset image, which is BL1 by default or BL31 if
``RESET_TO_BL31=1``. ``RESET_TO_BL31=1``.
On both the FVP and Juno platforms, although only one core is powered up by On both the FVP and Juno platforms, although only one core is powered up by
@ -89,8 +89,8 @@ This results in the following boot flow:
|Reset code flow with programmable reset address and single CPU released out of reset| |Reset code flow with programmable reset address and single CPU released out of reset|
To enable this boot flow, compile the TF with both ``COLD_BOOT_SINGLE_CPU=1`` To enable this boot flow, compile TF-A with both ``COLD_BOOT_SINGLE_CPU=1``
and ``PROGRAMMABLE_RESET_ADDRESS=1``. These options only affect the TF reset and ``PROGRAMMABLE_RESET_ADDRESS=1``. These options only affect the TF-A reset
image, which is BL1 by default or BL31 if ``RESET_TO_BL31=1``. image, which is BL1 by default or BL31 if ``RESET_TO_BL31=1``.
Using BL31 entrypoint as the reset address Using BL31 entrypoint as the reset address
@ -102,7 +102,7 @@ on the SoC, rather than by BL1 and BL2 running on the primary application
processor. For this type of SoC it is desirable for the application processor processor. For this type of SoC it is desirable for the application processor
to always reset to BL31 which eliminates the need for BL1 and BL2. to always reset to BL31 which eliminates the need for BL1 and BL2.
TF provides a build-time option ``RESET_TO_BL31`` that includes some additional TF-A provides a build-time option ``RESET_TO_BL31`` that includes some additional
logic in the BL31 entry point to support this use case. logic in the BL31 entry point to support this use case.
In this configuration, the platform's Trusted Boot Firmware must ensure that In this configuration, the platform's Trusted Boot Firmware must ensure that
@ -112,10 +112,10 @@ Additionally, platform software is responsible for loading the other BL3x images
required and providing entry point information for them to BL31. Loading these required and providing entry point information for them to BL31. Loading these
images might be done by the Trusted Boot Firmware or by platform code in BL31. images might be done by the Trusted Boot Firmware or by platform code in BL31.
Although the ARM FVP platform does not support programming the reset base Although the Arm FVP platform does not support programming the reset base
address dynamically at run-time, it is possible to set the initial value of the address dynamically at run-time, it is possible to set the initial value of the
``RVBAR_EL3`` register at start-up. This feature is provided on the Base FVP only. ``RVBAR_EL3`` register at start-up. This feature is provided on the Base FVP only.
It allows the ARM FVP port to support the ``RESET_TO_BL31`` configuration, in It allows the Arm FVP port to support the ``RESET_TO_BL31`` configuration, in
which case the ``bl31.bin`` image must be loaded to its run address in Trusted which case the ``bl31.bin`` image must be loaded to its run address in Trusted
SRAM and all CPU reset vectors be changed from the default ``0x0`` to this run SRAM and all CPU reset vectors be changed from the default ``0x0`` to this run
address. See the `User Guide`_ for details of running the FVP models in this way. address. See the `User Guide`_ for details of running the FVP models in this way.
@ -155,7 +155,7 @@ This might be done by the Trusted Boot Firmware or by platform code in BL31.
-------------- --------------
*Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.*
.. _Firmware Design: firmware-design.rst .. _Firmware Design: firmware-design.rst
.. _User Guide: user-guide.rst .. _User Guide: user-guide.rst

View File

@ -1,5 +1,5 @@
EL3 Runtime Service Writers Guide for ARM Trusted Firmware Trusted Firmware-A EL3 runtime service writer's guide
========================================================== =====================================================
.. section-numbering:: .. section-numbering::
@ -13,7 +13,7 @@ Introduction
------------ ------------
This document describes how to add a runtime service to the EL3 Runtime This document describes how to add a runtime service to the EL3 Runtime
Firmware component of ARM Trusted Firmware (BL31). Firmware component of Trusted Firmware-A (TF-A), BL31.
Software executing in the normal world and in the trusted world at exception Software executing in the normal world and in the trusted world at exception
levels lower than EL3 will request runtime services using the Secure Monitor levels lower than EL3 will request runtime services using the Secure Monitor
@ -27,7 +27,7 @@ example a subset of the Function IDs are designated as "OEM Calls" (see `SMCCC`_
for full details). The EL3 runtime services framework in BL31 enables the for full details). The EL3 runtime services framework in BL31 enables the
independent implementation of services for each group, which are then compiled independent implementation of services for each group, which are then compiled
into the BL31 image. This simplifies the integration of common software from into the BL31 image. This simplifies the integration of common software from
ARM to support `PSCI`_, Secure Monitor for a Trusted OS and SoC specific Arm to support `PSCI`_, Secure Monitor for a Trusted OS and SoC specific
software. The common runtime services framework ensures that SMC Functions are software. The common runtime services framework ensures that SMC Functions are
dispatched to their respective service implementation - the `Firmware Design`_ dispatched to their respective service implementation - the `Firmware Design`_
provides details of how this is achieved. provides details of how this is achieved.
@ -53,7 +53,7 @@ legacy 32-bit software that predates the `SMCCC`_.
:: ::
Type OEN Service Type OEN Service
Fast 0 ARM Architecture calls Fast 0 Arm Architecture calls
Fast 1 CPU Service calls Fast 1 CPU Service calls
Fast 2 SiP Service calls Fast 2 SiP Service calls
Fast 3 OEM Service calls Fast 3 OEM Service calls
@ -62,7 +62,7 @@ legacy 32-bit software that predates the `SMCCC`_.
Fast 48-49 Trusted Application calls Fast 48-49 Trusted Application calls
Fast 50-63 Trusted OS calls Fast 50-63 Trusted OS calls
Yielding 0- 1 Reserved for existing ARMv7 calls Yielding 0- 1 Reserved for existing Armv7-A calls
Yielding 2-63 Trusted OS Standard Calls Yielding 2-63 Trusted OS Standard Calls
*Table 1: Service types and their corresponding Owning Entity Numbers* *Table 1: Service types and their corresponding Owning Entity Numbers*
@ -72,7 +72,7 @@ range as they need - it is not necessary to coordinate with other entities of
the same type. For example, two SoC providers can use the same Function ID the same type. For example, two SoC providers can use the same Function ID
within the SiP Service calls OEN range to mean different things - as these within the SiP Service calls OEN range to mean different things - as these
calls should be specific to the SoC. The Standard Runtime Calls OEN is used for calls should be specific to the SoC. The Standard Runtime Calls OEN is used for
services defined by ARM standards, such as `PSCI`_. services defined by Arm standards, such as `PSCI`_.
The SMC Function ID also indicates whether the call has followed the SMC32 The SMC Function ID also indicates whether the call has followed the SMC32
calling convention, where all parameters are 32-bit, or the SMC64 calling calling convention, where all parameters are 32-bit, or the SMC64 calling
@ -87,7 +87,7 @@ handler will be responsible for all SMC Functions within a given service type.
Getting started Getting started
--------------- ---------------
ARM Trusted Firmware has a `services`_ directory in the source tree under which TF-A has a `services`_ directory in the source tree under which
each owning entity can place the implementation of its runtime service. The each owning entity can place the implementation of its runtime service. The
`PSCI`_ implementation is located here in the `lib/psci`_ directory. `PSCI`_ implementation is located here in the `lib/psci`_ directory.
@ -250,8 +250,7 @@ The handler is responsible for:
UID and Revision Details for each service documented in section 6 of the UID and Revision Details for each service documented in section 6 of the
`SMCCC`_. `SMCCC`_.
The ARM Trusted Firmware expects owning entities to follow this TF-A expects owning entities to follow this recommendation.
recommendation.
#. Returning the result to the caller. The `SMCCC`_ allows for up to 256 bits #. Returning the result to the caller. The `SMCCC`_ allows for up to 256 bits
of return value in SMC64 using X0-X3 and 128 bits in SMC32 using W0-W3. The of return value in SMC64 using X0-X3 and 128 bits in SMC32 using W0-W3. The
@ -286,8 +285,8 @@ service which perform independent functions.
In this situation it may be valuable to introduce a second level framework to In this situation it may be valuable to introduce a second level framework to
enable independent implementation of sub-services. Such a framework might look enable independent implementation of sub-services. Such a framework might look
very similar to the current runtime services framework, but using a different very similar to the current runtime services framework, but using a different
part of the SMC Function ID to identify the sub-service. Trusted Firmware does part of the SMC Function ID to identify the sub-service. TF-A does not provide
not provide such a framework at present. such a framework at present.
Secure-EL1 Payload Dispatcher service (SPD) Secure-EL1 Payload Dispatcher service (SPD)
------------------------------------------- -------------------------------------------
@ -304,7 +303,7 @@ provide this information....
-------------- --------------
*Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2014-2018, Arm Limited and Contributors. All rights reserved.*
.. _SMCCC: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html .. _SMCCC: http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html
.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf .. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf

View File

@ -8,13 +8,13 @@ Software Delegated Exception Interface
.. contents:: .. contents::
:depth: 2 :depth: 2
This document provides an overview of the SDEI dispatcher implementation in ARM This document provides an overview of the SDEI dispatcher implementation in
Trusted Firmware. Trusted Firmware-A (TF-A).
Introduction Introduction
------------ ------------
`Software Delegated Exception Interface`_ (SDEI) is an ARM specification for `Software Delegated Exception Interface`_ (SDEI) is an Arm specification for
Non-secure world to register handlers with firmware to receive notifications Non-secure world to register handlers with firmware to receive notifications
about system events. Firmware will first receive the system events by way of about system events. Firmware will first receive the system events by way of
asynchronous exceptions and, in response, arranges for the registered handler to asynchronous exceptions and, in response, arranges for the registered handler to
@ -52,8 +52,8 @@ SDEI events can be explicitly dispatched in response to other asynchronous
exceptions. See `Explicit dispatch of events`_. exceptions. See `Explicit dispatch of events`_.
The remainder of this document only discusses the design and implementation of The remainder of this document only discusses the design and implementation of
SDEI dispatcher in ARM Trusted Firmware, and assumes that the reader is familiar SDEI dispatcher in TF-A, and assumes that the reader is familiar with the SDEI
with the SDEI specification, the interfaces, and their requirements. specification, the interfaces, and their requirements.
.. [#std-event] Except event 0, which is defined by the SDEI specification as a .. [#std-event] Except event 0, which is defined by the SDEI specification as a
standard event. standard event.
@ -314,7 +314,7 @@ Note on writing SDEI event handlers
----------------------------------- -----------------------------------
*This section pertains to SDEI event handlers in general, not just when using *This section pertains to SDEI event handlers in general, not just when using
ARM Trusted Firmware SDEI dispatcher.* the TF-A SDEI dispatcher.*
The SDEI specification requires that event handlers preserve the contents of all The SDEI specification requires that event handlers preserve the contents of all
registers except ``x0`` to ``x17``. This has significance if event handler is registers except ``x0`` to ``x17``. This has significance if event handler is
@ -364,7 +364,7 @@ implemented in assembly, following a similar pattern as below:
---- ----
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*
.. _SDEI specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf .. _SDEI specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf
.. _SDEI porting requirements: porting-guide.rst#sdei-porting-requirements .. _SDEI porting requirements: porting-guide.rst#sdei-porting-requirements

View File

@ -18,8 +18,8 @@ used by Non-secure world applications to access these services. A Trusted OS
fulfils the requirements of a security service as described above. fulfils the requirements of a security service as described above.
Management services are typically implemented at the highest level of privilege Management services are typically implemented at the highest level of privilege
in the system (i.e. EL3 in Arm Trusted Firmware). The service requirements are in the system, i.e. EL3 in Trusted Firmware-A (TF-A). The service requirements are
fulfilled by the execution environment provided by Arm Trusted Firmware. fulfilled by the execution environment provided by TF-A.
The following diagram illustrates the corresponding software stack: The following diagram illustrates the corresponding software stack:
@ -41,10 +41,10 @@ Introduction
A **Secure Partition** is a software execution environment instantiated in A **Secure Partition** is a software execution environment instantiated in
S-EL0 that can be used to implement simple management and security services. S-EL0 that can be used to implement simple management and security services.
Since S-EL0 is an unprivileged Exception Level, a Secure Partition relies on Since S-EL0 is an unprivileged Exception Level, a Secure Partition relies on
privileged firmware (i.e. Arm Trusted Firmware) to be granted access to system privileged firmware (i.e. TF-A) to be granted access to system and processor
and processor resources. Essentially, it is a software sandbox in the Secure resources. Essentially, it is a software sandbox in the Secure world that runs
world that runs under the control of privileged software, provides one or more under the control of privileged software, provides one or more services and
services and accesses the following system resources: accesses the following system resources:
- Memory and device regions in the system address map. - Memory and device regions in the system address map.
@ -52,25 +52,24 @@ services and accesses the following system resources:
- A range of synchronous exceptions (e.g. SMC function identifiers). - A range of synchronous exceptions (e.g. SMC function identifiers).
Note that currently the Arm Trusted Firmware only supports handling one Secure Note that currently TF-A only supports handling one Secure Partition.
Partition.
A Secure Partition enables Arm Trusted Firmware to implement only the essential A Secure Partition enables TF-A to implement only the essential secure
secure services in EL3 and instantiate the rest in a partition in S-EL0. services in EL3 and instantiate the rest in a partition in S-EL0.
Furthermore, multiple Secure Partitions can be used to isolate unrelated Furthermore, multiple Secure Partitions can be used to isolate unrelated
services from each other. services from each other.
The following diagram illustrates the place of a Secure Partition in a typical The following diagram illustrates the place of a Secure Partition in a typical
ARMv8-A software stack. A single or multiple Secure Partitions provide secure Armv8-A software stack. A single or multiple Secure Partitions provide secure
services to software components in the Non-secure world and other Secure services to software components in the Non-secure world and other Secure
Partitions. Partitions.
|Image 2| |Image 2|
The Arm Trusted Firmware build system is responsible for including the Secure The TF-A build system is responsible for including the Secure Partition image
Partition image in the FIP. During boot, BL2 includes support to authenticate in the FIP. During boot, BL2 includes support to authenticate and load the
and load the Secure Partition image. A BL31 component called **Secure Partition Secure Partition image. A BL31 component called **Secure Partition Manager
Manager (SPM)** is responsible for managing the partition. This is semantically (SPM)** is responsible for managing the partition. This is semantically
similar to a hypervisor managing a virtual machine. similar to a hypervisor managing a virtual machine.
The SPM is responsible for the following actions during boot: The SPM is responsible for the following actions during boot:
@ -105,8 +104,8 @@ made in the current implementation of this software architecture. Subsequent
revisions of the implementation will include a richer set of features that revisions of the implementation will include a richer set of features that
enable a more flexible architecture. enable a more flexible architecture.
Building Arm Trusted Firmware with Secure Partition support Building TF-A with Secure Partition support
----------------------------------------------------------- -------------------------------------------
SPM is supported on the Arm FVP exclusively at the moment. The current SPM is supported on the Arm FVP exclusively at the moment. The current
implementation supports inclusion of only a single Secure Partition in which a implementation supports inclusion of only a single Secure Partition in which a
@ -125,7 +124,7 @@ the UEFI specification (see the PI v1.6 Volume 4: Management Mode Core
Interface). This will be referred to as the *Standalone MM Secure Partition* in Interface). This will be referred to as the *Standalone MM Secure Partition* in
the rest of this document. the rest of this document.
To enable SPM support in the TF, the source code must be compiled with the build To enable SPM support in TF-A, the source code must be compiled with the build
flag ``ENABLE_SPM=1``. On Arm platforms the build option ``ARM_BL31_IN_DRAM`` flag ``ENABLE_SPM=1``. On Arm platforms the build option ``ARM_BL31_IN_DRAM``
can be used to select the location of BL31, both SRAM and DRAM are supported. can be used to select the location of BL31, both SRAM and DRAM are supported.
Also, the location of the binary that contains the BL32 image Also, the location of the binary that contains the BL32 image
@ -134,7 +133,7 @@ Also, the location of the binary that contains the BL32 image
First, build the Standalone MM Secure Partition. To build it, refer to the First, build the Standalone MM Secure Partition. To build it, refer to the
`instructions in the EDK2 repository`_. `instructions in the EDK2 repository`_.
Then build TF with SPM support and include the Standalone MM Secure Partition Then build TF-A with SPM support and include the Standalone MM Secure Partition
image in the FIP: image in the FIP:
:: ::
@ -145,10 +144,10 @@ image in the FIP:
Describing Secure Partition resources Describing Secure Partition resources
------------------------------------- -------------------------------------
Arm Trusted Firmware exports a porting interface that enables a platform to TF-A exports a porting interface that enables a platform to specify the system
specify the system resources required by the Secure Partition. Some instructions resources required by the Secure Partition. Some instructions are given below.
are given below. However, this interface is under development and it may change However, this interface is under development and it may change as new features
as new features are implemented. are implemented.
- A Secure Partition is considered a BL32 image, so the same defines that apply - A Secure Partition is considered a BL32 image, so the same defines that apply
to BL32 images apply to a Secure Partition: ``BL32_BASE`` and ``BL32_LIMIT``. to BL32 images apply to a Secure Partition: ``BL32_BASE`` and ``BL32_LIMIT``.
@ -176,9 +175,9 @@ For an example of all the changes in context, you may refer to commit
Accessing Secure Partition services Accessing Secure Partition services
----------------------------------- -----------------------------------
The `SMC Calling Convention`_ (*ARM DEN 0028B*) describes SMCs as a conduit for The `SMC Calling Convention`_ (*Arm DEN 0028B*) describes SMCs as a conduit for
accessing services implemented in the Secure world. The ``MM_COMMUNICATE`` accessing services implemented in the Secure world. The ``MM_COMMUNICATE``
interface defined in the `Management Mode Interface Specification`_ (*ARM DEN interface defined in the `Management Mode Interface Specification`_ (*Arm DEN
0060A*) is used to invoke a Secure Partition service as a Fast Call. 0060A*) is used to invoke a Secure Partition service as a Fast Call.
The mechanism used to identify a service within the partition depends on the The mechanism used to identify a service within the partition depends on the
@ -208,11 +207,11 @@ e.g. ACPI table or device tree. It is possible for the Non-secure world to
exchange data with a partition only if it has been populated in this shared exchange data with a partition only if it has been populated in this shared
memory area. The shared memory area is implemented as per the guidelines memory area. The shared memory area is implemented as per the guidelines
specified in Section 3.2.3 of the `Management Mode Interface Specification`_ specified in Section 3.2.3 of the `Management Mode Interface Specification`_
(*ARM DEN 0060A*). (*Arm DEN 0060A*).
The format of data structures used to encapsulate data in the shared memory is The format of data structures used to encapsulate data in the shared memory is
agreed between the Non-secure world and the Secure Partition. For example, in agreed between the Non-secure world and the Secure Partition. For example, in
the `Management Mode Interface specification`_ (*ARM DEN 0060A*), Section 4 the `Management Mode Interface specification`_ (*Arm DEN 0060A*), Section 4
describes that the communication buffer shared between the Non-secure world and describes that the communication buffer shared between the Non-secure world and
the Management Mode (MM) in the Secure world must be of the type the Management Mode (MM) in the Secure world must be of the type
``EFI_MM_COMMUNICATE_HEADER``. This data structure is defined in *Volume 4: ``EFI_MM_COMMUNICATE_HEADER``. This data structure is defined in *Volume 4:
@ -246,7 +245,7 @@ interfaces are not accessible from the Non-secure world.
Conduit Conduit
^^^^^^^ ^^^^^^^
The `SMC Calling Convention`_ (*ARM DEN 0028B*) specification describes the SMC The `SMC Calling Convention`_ (*Arm DEN 0028B*) specification describes the SMC
and HVC conduits for accessing firmware services and their availability and HVC conduits for accessing firmware services and their availability
depending on the implemented Exception levels. In S-EL0, the Supervisor Call depending on the implemented Exception levels. In S-EL0, the Supervisor Call
exception (SVC) is the only architectural mechanism available for unprivileged exception (SVC) is the only architectural mechanism available for unprivileged
@ -254,16 +253,16 @@ software to make a request for an operation implemented in privileged software.
Hence, the SVC conduit must be used by the Secure Partition to access interfaces Hence, the SVC conduit must be used by the Secure Partition to access interfaces
implemented by the SPM. implemented by the SPM.
A SVC causes an exception to be taken to S-EL1. Arm Trusted Firmware assumes A SVC causes an exception to be taken to S-EL1. TF-A assumes ownership of S-EL1
ownership of S-EL1 and installs a simple exception vector table in S-EL1 that and installs a simple exception vector table in S-EL1 that relays a SVC request
relays a SVC request from a Secure Partition as a SMC request to the SPM in EL3. from a Secure Partition as a SMC request to the SPM in EL3. Upon servicing the
Upon servicing the SMC request, Arm Trusted Firmware returns control directly to SMC request, Arm Trusted Firmware returns control directly to S-EL0 through an
S-EL0 through an ERET instruction. ERET instruction.
Calling conventions Calling conventions
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
The `SMC Calling Convention`_ (*ARM DEN 0028B*) specification describes the The `SMC Calling Convention`_ (*Arm DEN 0028B*) specification describes the
32-bit and 64-bit calling conventions for the SMC and HVC conduits. The SVC 32-bit and 64-bit calling conventions for the SMC and HVC conduits. The SVC
conduit introduces the concept of SVC32 and SVC64 calling conventions. The SVC32 conduit introduces the concept of SVC32 and SVC64 calling conventions. The SVC32
and SVC64 calling conventions are equivalent to the 32-bit (SMC32) and the and SVC64 calling conventions are equivalent to the 32-bit (SMC32) and the
@ -285,8 +284,8 @@ Communication initiated by Secure Partition
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A request is initiated from the Secure Partition by executing a SVC instruction. A request is initiated from the Secure Partition by executing a SVC instruction.
An ERET instruction is used by Arm Trusted Firmware to return to S-EL0 with the An ERET instruction is used by TF-A to return to S-EL0 with the result of the
result of the request. request.
For instance, a request to perform privileged operations on behalf of a For instance, a request to perform privileged operations on behalf of a
partition (e.g. management of memory attributes in the translation tables for partition (e.g. management of memory attributes in the translation tables for
@ -296,7 +295,7 @@ Interfaces
^^^^^^^^^^ ^^^^^^^^^^
The current implementation reserves function IDs for Fast Calls in the Standard The current implementation reserves function IDs for Fast Calls in the Standard
Secure Service calls range (see `SMC Calling Convention`_ (*ARM DEN 0028B*) Secure Service calls range (see `SMC Calling Convention`_ (*Arm DEN 0028B*)
specification) for each API exported by the SPM. This section defines the specification) for each API exported by the SPM. This section defines the
function prototypes for each function ID. The function IDs specify whether one function prototypes for each function ID. The function IDs specify whether one
or both of the SVC32 and SVC64 calling conventions can be used to invoke the or both of the SVC32 and SVC64 calling conventions can be used to invoke the
@ -461,7 +460,7 @@ This transition into S-EL0 is special since it is not in response to a previous
request through a SVC instruction. This is the first entry into S-EL0. The request through a SVC instruction. This is the first entry into S-EL0. The
general purpose register usage at the time of entry will be as specified in the general purpose register usage at the time of entry will be as specified in the
"Return State" column of Table 3-1 in Section 3.1 "Register use in AArch64 SMC "Return State" column of Table 3-1 in Section 3.1 "Register use in AArch64 SMC
calls" of the `SMC Calling Convention`_ (*ARM DEN 0028B*) specification. In calls" of the `SMC Calling Convention`_ (*Arm DEN 0028B*) specification. In
addition, certain other restrictions will be applied as described below. addition, certain other restrictions will be applied as described below.
1. ``SP_EL0`` 1. ``SP_EL0``
@ -601,7 +600,7 @@ address map from a Secure Partition. This is done by mapping these regions in
the Secure EL1&0 Translation regime with appropriate memory attributes. the Secure EL1&0 Translation regime with appropriate memory attributes.
Attributes refer to memory type, permission, cacheability and shareability Attributes refer to memory type, permission, cacheability and shareability
attributes used in the Translation tables. The definitions of these attributes attributes used in the Translation tables. The definitions of these attributes
and their usage can be found in the `ARMv8 ARM`_ (*ARM DDI 0487*). and their usage can be found in the `Armv8-A ARM`_ (*Arm DDI 0487*).
All memory required by the Secure Partition is allocated upfront in the SPM, All memory required by the Secure Partition is allocated upfront in the SPM,
even before handing over to the Secure Partition for the first time. The initial even before handing over to the Secure Partition for the first time. The initial
@ -813,9 +812,9 @@ Error Codes
-------------- --------------
*Copyright (c) 2017, Arm Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*
.. _ARMv8 ARM: https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile .. _Armv8-A ARM: https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile
.. _instructions in the EDK2 repository: https://github.com/tianocore/edk2-staging/blob/AArch64StandaloneMm/HowtoBuild.MD .. _instructions in the EDK2 repository: https://github.com/tianocore/edk2-staging/blob/AArch64StandaloneMm/HowtoBuild.MD
.. _Management Mode Interface Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0060a/DEN0060A_ARM_MM_Interface_Specification.pdf .. _Management Mode Interface Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0060a/DEN0060A_ARM_MM_Interface_Specification.pdf
.. _SDEI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf .. _SDEI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf

View File

@ -8,7 +8,7 @@ To build and execute OP-TEE follow the instructions at
-------------- --------------
*Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2014-2018, Arm Limited and Contributors. All rights reserved.*
.. _OP-TEE OS: https://github.com/OP-TEE/build .. _OP-TEE OS: https://github.com/OP-TEE/build
.. _OP-TEE build.git: https://github.com/OP-TEE/build .. _OP-TEE build.git: https://github.com/OP-TEE/build

View File

@ -1,10 +1,10 @@
Trusted Little Kernel (TLK) Dispatcher Trusted Little Kernel (TLK) Dispatcher
====================================== ======================================
TLK dispatcher adds support for NVIDIA's Trusted Little Kernel (TLK) to work TLK dispatcher (TLK-D) adds support for NVIDIA's Trusted Little Kernel (TLK)
with the Trusted Firmware. TLK-D can be compiled by including it in the to work with Trusted Firmware-A (TF-A). TLK-D can be compiled by including it
platform's makefile. TLK is primarily meant to work with Tegra SoCs, so until in the platform's makefile. TLK is primarily meant to work with Tegra SoCs,
Trusted Firmware starts supporting Tegra, the dispatcher code can only be so while TF-A only supports TLK on Tegra, the dispatcher code can only be
compiled for other platforms. compiled for other platforms.
In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD
@ -20,7 +20,7 @@ Trusted Little Kernel (TLK)
TLK is a Trusted OS running as Secure EL1. It is a Free Open Source Software TLK is a Trusted OS running as Secure EL1. It is a Free Open Source Software
(FOSS) release of the NVIDIA® Trusted Little Kernel (TLK) technology, which (FOSS) release of the NVIDIA® Trusted Little Kernel (TLK) technology, which
extends technology made available with the development of the Little Kernel (LK). extends technology made available with the development of the Little Kernel (LK).
You can download the LK modular embedded preemptive kernel for use on ARM, You can download the LK modular embedded preemptive kernel for use on Arm,
x86, and AVR32 systems from https://github.com/travisg/lk x86, and AVR32 systems from https://github.com/travisg/lk
NVIDIA implemented its Trusted Little Kernel (TLK) technology, designed as a NVIDIA implemented its Trusted Little Kernel (TLK) technology, designed as a
@ -72,5 +72,5 @@ Example:
:: ::
bl32_ep_info->args.arg0 = TZDRAM size available for BL32 bl32_ep_info->args.arg0 = TZDRAM size available for BL32
bl32_ep_info->args.arg1 = unused (used only on ARMv7) bl32_ep_info->args.arg1 = unused (used only on Armv7-A)
bl32_ep_info->args.arg2 = pointer to boot args bl32_ep_info->args.arg2 = pointer to boot args

View File

@ -28,5 +28,5 @@ should then be set to the size of that block.
Supported platforms Supported platforms
=================== ===================
Out of all the platforms supported by the ARM Trusted Firmware, Trusty is Out of all the platforms supported by Trusted Firmware-A, Trusty is only
verified and supported by NVIDIA's Tegra SoCs. verified and supported by NVIDIA's Tegra SoCs.

View File

@ -12,16 +12,16 @@ the platform by authenticating all firmware images up to and including the
normal world bootloader. It does this by establishing a Chain of Trust using normal world bootloader. It does this by establishing a Chain of Trust using
Public-Key-Cryptography Standards (PKCS). Public-Key-Cryptography Standards (PKCS).
This document describes the design of ARM Trusted Firmware TBB, which is an This document describes the design of Trusted Firmware-A (TF-A) TBB, which is
implementation of the Trusted Board Boot Requirements (TBBR) specification, an implementation of the Trusted Board Boot Requirements (TBBR) specification,
ARM DEN0006C-1. It should be used in conjunction with the `Firmware Update`_ Arm DEN0006C-1. It should be used in conjunction with the `Firmware Update`_
design document, which implements a specific aspect of the TBBR. design document, which implements a specific aspect of the TBBR.
Chain of Trust Chain of Trust
-------------- --------------
A Chain of Trust (CoT) starts with a set of implicitly trusted components. On A Chain of Trust (CoT) starts with a set of implicitly trusted components. On
the ARM development platforms, these components are: the Arm development platforms, these components are:
- A SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the - A SHA-256 hash of the Root of Trust Public Key (ROTPK). It is stored in the
trusted root-key storage registers. trusted root-key storage registers.
@ -39,7 +39,7 @@ Certificate Authority (CA) because the CoT is not established by verifying the
validity of a certificate's issuer but by the content of the certificate validity of a certificate's issuer but by the content of the certificate
extensions. To sign the certificates, the PKCS#1 SHA-256 with RSA Encryption extensions. To sign the certificates, the PKCS#1 SHA-256 with RSA Encryption
signature scheme is used with a RSA key length of 2048 bits. Future version of signature scheme is used with a RSA key length of 2048 bits. Future version of
Trusted Firmware will support additional cryptographic algorithms. TF-A will support additional cryptographic algorithms.
The certificates are categorised as "Key" and "Content" certificates. Key The certificates are categorised as "Key" and "Content" certificates. Key
certificates are used to verify public keys which have been used to sign content certificates are used to verify public keys which have been used to sign content
@ -148,7 +148,7 @@ if any of the steps fail.
registers. If they match, the BL2 hash is read from the certificate. registers. If they match, the BL2 hash is read from the certificate.
Note: the matching operation is platform specific and is currently Note: the matching operation is platform specific and is currently
unimplemented on the ARM development platforms. unimplemented on the Arm development platforms.
- BL1 loads the BL2 image. Its hash is calculated and compared with the hash - BL1 loads the BL2 image. Its hash is calculated and compared with the hash
read from the certificate. Control is transferred to the BL2 image if all read from the certificate. Control is transferred to the BL2 image if all
@ -196,7 +196,7 @@ enabled through use of specific build flags as described in the `User Guide`_.
On the host machine, a tool generates the certificates, which are included in On the host machine, a tool generates the certificates, which are included in
the FIP along with the boot loader images. These certificates are loaded in the FIP along with the boot loader images. These certificates are loaded in
Trusted SRAM using the IO storage framework. They are then verified by an Trusted SRAM using the IO storage framework. They are then verified by an
Authentication module included in the Trusted Firmware. Authentication module included in TF-A.
The mechanism used for generating the FIP and the Authentication module are The mechanism used for generating the FIP and the Authentication module are
described in the following sections. described in the following sections.
@ -204,9 +204,9 @@ described in the following sections.
Authentication Framework Authentication Framework
------------------------ ------------------------
The authentication framework included in the Trusted Firmware provides support The authentication framework included in TF-A provides support to implement
to implement the desired trusted boot sequence. ARM platforms use this framework the desired trusted boot sequence. Arm platforms use this framework to
to implement the boot requirements specified in the TBBR-client document. implement the boot requirements specified in the TBBR-client document.
More information about the authentication framework can be found in the More information about the authentication framework can be found in the
`Auth Framework`_ document. `Auth Framework`_ document.
@ -215,8 +215,8 @@ Certificate Generation Tool
--------------------------- ---------------------------
The ``cert_create`` tool is built and runs on the host machine as part of the The ``cert_create`` tool is built and runs on the host machine as part of the
Trusted Firmware build process when ``GENERATE_COT=1``. It takes the boot loader TF-A build process when ``GENERATE_COT=1``. It takes the boot loader images
images and keys as inputs (keys must be in PEM format) and generates the and keys as inputs (keys must be in PEM format) and generates the
certificates (in DER format) required to establish the CoT. New keys can be certificates (in DER format) required to establish the CoT. New keys can be
generated by the tool in case they are not provided. The certificates are then generated by the tool in case they are not provided. The certificates are then
passed as inputs to the ``fiptool`` utility for creating the FIP. passed as inputs to the ``fiptool`` utility for creating the FIP.
@ -230,7 +230,7 @@ for building and using the tool can be found in the `User Guide`_.
-------------- --------------
*Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.*
.. _Firmware Update: firmware-update.rst .. _Firmware Update: firmware-update.rst
.. _X.509 v3: http://www.ietf.org/rfc/rfc5280.txt .. _X.509 v3: http://www.ietf.org/rfc/rfc5280.txt

View File

@ -1,5 +1,5 @@
ARM Trusted Firmware User Guide Trusted Firmware-A User Guide
=============================== =============================
.. section-numbering:: .. section-numbering::
@ -7,9 +7,9 @@ ARM Trusted Firmware User Guide
.. contents:: .. contents::
This document describes how to build ARM Trusted Firmware (TF) and run it with a This document describes how to build Trusted Firmware-A (TF-A) and run it with a
tested set of other software components using defined configurations on the Juno tested set of other software components using defined configurations on the Juno
ARM development platform and ARM Fixed Virtual Platform (FVP) models. It is Arm development platform and Arm Fixed Virtual Platform (FVP) models. It is
possible to use other software components, configurations and platforms but that possible to use other software components, configurations and platforms but that
is outside the scope of this document. is outside the scope of this document.
@ -48,14 +48,13 @@ Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain.
Tools Tools
----- -----
Install the required packages to build Trusted Firmware with the following Install the required packages to build TF-A with the following command:
command:
:: ::
sudo apt-get install build-essential gcc make git libssl-dev sudo apt-get install build-essential gcc make git libssl-dev
ARM TF has been tested with `Linaro Release 17.10`_. TF-A has been tested with `Linaro Release 17.10`_.
Download and install the AArch32 or AArch64 little-endian GCC cross compiler. Download and install the AArch32 or AArch64 little-endian GCC cross compiler.
The `Linaro Release Notes`_ documents which version of the compiler to use for a The `Linaro Release Notes`_ documents which version of the compiler to use for a
@ -63,7 +62,7 @@ given Linaro Release. Also, these `Linaro instructions`_ provide further
guidance and a script, which can be used to download Linaro deliverables guidance and a script, which can be used to download Linaro deliverables
automatically. automatically.
Optionally, Trusted Firmware can be built using clang or ARM Compiler 6. Optionally, TF-A can be built using clang or Arm Compiler 6.
See instructions below on how to switch the default compiler. See instructions below on how to switch the default compiler.
In addition, the following optional packages and tools may be needed: In addition, the following optional packages and tools may be needed:
@ -71,26 +70,26 @@ In addition, the following optional packages and tools may be needed:
- ``device-tree-compiler`` package if you need to rebuild the Flattened Device - ``device-tree-compiler`` package if you need to rebuild the Flattened Device
Tree (FDT) source files (``.dts`` files) provided with this software. Tree (FDT) source files (``.dts`` files) provided with this software.
- For debugging, ARM `Development Studio 5 (DS-5)`_. - For debugging, Arm `Development Studio 5 (DS-5)`_.
- To create and modify the diagram files included in the documentation, `Dia`_. - To create and modify the diagram files included in the documentation, `Dia`_.
This tool can be found in most Linux distributions. Inkscape is needed to This tool can be found in most Linux distributions. Inkscape is needed to
generate the actual *.png files. generate the actual *.png files.
Getting the Trusted Firmware source code Getting the TF-A source code
---------------------------------------- ----------------------------
Download the Trusted Firmware source code from Github: Download the TF-A source code from Github:
:: ::
git clone https://github.com/ARM-software/arm-trusted-firmware.git git clone https://github.com/ARM-software/arm-trusted-firmware.git
Building the Trusted Firmware Building TF-A
----------------------------- -------------
- Before building Trusted Firmware, the environment variable ``CROSS_COMPILE`` - Before building TF-A, the environment variable ``CROSS_COMPILE`` must point
must point to the Linaro cross compiler. to the Linaro cross compiler.
For AArch64: For AArch64:
@ -104,15 +103,15 @@ Building the Trusted Firmware
export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf- export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
It is possible to build Trusted Firmware using clang or ARM Compiler 6. It is possible to build TF-A using clang or Arm Compiler 6. To do so
To do so ``CC`` needs to point to the clang or armclang binary. Only the ``CC`` needs to point to the clang or armclang binary. Only the compiler
compiler is switched; the assembler and linker need to be provided by is switched; the assembler and linker need to be provided by the GNU
the GNU toolchain, thus ``CROSS_COMPILE`` should be set as described above. toolchain, thus ``CROSS_COMPILE`` should be set as described above.
ARM Compiler 6 will be selected when the base name of the path assigned Arm Compiler 6 will be selected when the base name of the path assigned
to ``CC`` matches the string 'armclang'. to ``CC`` matches the string 'armclang'.
For AArch64 using ARM Compiler 6: For AArch64 using Arm Compiler 6:
:: ::
@ -130,7 +129,7 @@ Building the Trusted Firmware
export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu- export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
make CC=<path-to-clang>/bin/clang PLAT=<platform> all make CC=<path-to-clang>/bin/clang PLAT=<platform> all
- Change to the root directory of the Trusted Firmware source tree and build. - Change to the root directory of the TF-A source tree and build.
For AArch64: For AArch64:
@ -154,11 +153,11 @@ Building the Trusted Firmware
- (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it - (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it
corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp\_min, is corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp\_min, is
provided by ARM Trusted Firmware to demonstrate how PSCI Library can provided by TF-A to demonstrate how PSCI Library can be integrated with
be integrated with an AArch32 EL3 Runtime Software. Some AArch32 EL3 an AArch32 EL3 Runtime Software. Some AArch32 EL3 Runtime Software may
Runtime Software may include other runtime services, for example include other runtime services, for example Trusted OS services. A guide
Trusted OS services. A guide to integrate PSCI library with AArch32 to integrate PSCI library with AArch32 EL3 Runtime Software can be found
EL3 Runtime Software can be found `here`_. `here`_.
- (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32 - (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32
image, is not compiled in by default. Refer to the image, is not compiled in by default. Refer to the
@ -198,11 +197,11 @@ Building the Trusted Firmware
Summary of build options Summary of build options
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
ARM Trusted Firmware build system supports the following build options. Unless The TF-A build system supports the following build options. Unless mentioned
mentioned otherwise, these options are expected to be specified at the build otherwise, these options are expected to be specified at the build command
command line and are not to be modified in any component makefiles. Note that line and are not to be modified in any component makefiles. Note that the
the build system doesn't track dependency for build options. Therefore, if any build system doesn't track dependency for build options. Therefore, if any of
of the build options are changed from a previous build, a clean build must be the build options are changed from a previous build, a clean build must be
performed. performed.
Common build options Common build options
@ -213,52 +212,51 @@ Common build options
directory containing the SP source, relative to the ``bl32/``; the directory directory containing the SP source, relative to the ``bl32/``; the directory
is expected to contain a makefile called ``<aarch32_sp-value>.mk``. is expected to contain a makefile called ``<aarch32_sp-value>.mk``.
- ``ARCH`` : Choose the target build architecture for ARM Trusted Firmware. - ``ARCH`` : Choose the target build architecture for TF-A. It can take either
It can take either ``aarch64`` or ``aarch32`` as values. By default, it is ``aarch64`` or ``aarch32`` as values. By default, it is defined to
defined to ``aarch64``. ``aarch64``.
- ``ARM_ARCH_MAJOR``: The major version of ARM Architecture to target when - ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when
compiling ARM Trusted Firmware. Its value must be numeric, and defaults to compiling TF-A. Its value must be numeric, and defaults to 8 . See also,
8 . See also, *ARMv8 Architecture Extensions* and *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in
*ARMv7 Architecture Extensions* in `Firmware Design`_. `Firmware Design`_.
- ``ARM_ARCH_MINOR``: The minor version of ARM Architecture to target when - ``ARM_ARCH_MINOR``: The minor version of Arm Architecture to target when
compiling ARM Trusted Firmware. Its value must be a numeric, and defaults compiling TF-A. Its value must be a numeric, and defaults to 0. See also,
to 0. See also, *ARMv8 Architecture Extensions* in `Firmware Design`_. *Armv8 Architecture Extensions* in `Firmware Design`_.
- ``ARM_GIC_ARCH``: Choice of ARM GIC architecture version used by the ARM - ``ARM_GIC_ARCH``: Choice of Arm GIC architecture version used by the Arm
Legacy GIC driver for implementing the platform GIC API. This API is used Legacy GIC driver for implementing the platform GIC API. This API is used
by the interrupt management framework. Default is 2 (that is, version 2.0). by the interrupt management framework. Default is 2 (that is, version 2.0).
This build option is deprecated. This build option is deprecated.
- ``ARM_PLAT_MT``: This flag determines whether the ARM platform layer has to - ``ARM_PLAT_MT``: This flag determines whether the Arm platform layer has to
cater for the multi-threading ``MT`` bit when accessing MPIDR. When this flag cater for the multi-threading ``MT`` bit when accessing MPIDR. When this flag
is set, the functions which deal with MPIDR assume that the ``MT`` bit in is set, the functions which deal with MPIDR assume that the ``MT`` bit in
MPIDR is set and access the bit-fields in MPIDR accordingly. Default value of MPIDR is set and access the bit-fields in MPIDR accordingly. Default value of
this flag is 0. Note that this option is not used on FVP platforms. this flag is 0. Note that this option is not used on FVP platforms.
- ``BL2``: This is an optional build option which specifies the path to BL2 - ``BL2``: This is an optional build option which specifies the path to BL2
image for the ``fip`` target. In this case, the BL2 in the ARM Trusted image for the ``fip`` target. In this case, the BL2 in the TF-A will not be
Firmware will not be built. built.
- ``BL2U``: This is an optional build option which specifies the path to - ``BL2U``: This is an optional build option which specifies the path to
BL2U image. In this case, the BL2U in the ARM Trusted Firmware will not BL2U image. In this case, the BL2U in TF-A will not be built.
be built.
- ``BL2_AT_EL3``: This is an optional build option that enables the use of - ``BL2_AT_EL3``: This is an optional build option that enables the use of
BL2 at EL3 execution level. BL2 at EL3 execution level.
- ``BL31``: This is an optional build option which specifies the path to - ``BL31``: This is an optional build option which specifies the path to
BL31 image for the ``fip`` target. In this case, the BL31 in the ARM BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
Trusted Firmware will not be built. be built.
- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the - ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``, file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``,
this file name will be used to save the key. this file name will be used to save the key.
- ``BL32``: This is an optional build option which specifies the path to - ``BL32``: This is an optional build option which specifies the path to
BL32 image for the ``fip`` target. In this case, the BL32 in the ARM BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
Trusted Firmware will not be built. be built.
- ``BL32_EXTRA1``: This is an optional build option which specifies the path to - ``BL32_EXTRA1``: This is an optional build option which specifies the path to
Trusted OS Extra1 image for the ``fip`` target. Trusted OS Extra1 image for the ``fip`` target.
@ -271,7 +269,7 @@ Common build options
this file name will be used to save the key. this file name will be used to save the key.
- ``BL33``: Path to BL33 image in the host file system. This is mandatory for - ``BL33``: Path to BL33 image in the host file system. This is mandatory for
``fip`` target in case the BL2 from ARM Trusted Firmware is used. ``fip`` target in case TF-A BL2 is used.
- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the - ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``, file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``,
@ -282,8 +280,8 @@ Common build options
where applicable). Defaults to a string that contains the time and date of where applicable). Defaults to a string that contains the time and date of
the compilation. the compilation.
- ``BUILD_STRING``: Input string for VERSION\_STRING, which allows the TF build - ``BUILD_STRING``: Input string for VERSION\_STRING, which allows the TF-A
to be uniquely identified. Defaults to the current git commit id. build to be uniquely identified. Defaults to the current git commit id.
- ``CFLAGS``: Extra user options appended on the compiler's command line in - ``CFLAGS``: Extra user options appended on the compiler's command line in
addition to the options set by the build system. addition to the options set by the build system.
@ -347,10 +345,10 @@ Common build options
software. software.
- ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime - ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime
instrumentation which injects timestamp collection points into instrumentation which injects timestamp collection points into TF-A to
Trusted Firmware to allow runtime performance to be measured. allow runtime performance to be measured. Currently, only PSCI is
Currently, only PSCI is instrumented. Enabling this option enables instrumented. Enabling this option enables the ``ENABLE_PMF`` build option
the ``ENABLE_PMF`` build option as well. Default is 0. as well. Default is 0.
- ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling - ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling
extensions. This is an optional architectural feature for AArch64. extensions. This is an optional architectural feature for AArch64.
@ -427,15 +425,15 @@ Common build options
- ``HANDLE_EA_EL3_FIRST``: When defined External Aborts and SError Interrupts - ``HANDLE_EA_EL3_FIRST``: When defined External Aborts and SError Interrupts
will be always trapped in EL3 i.e. in BL31 at runtime. will be always trapped in EL3 i.e. in BL31 at runtime.
- ``HW_ASSISTED_COHERENCY``: On most ARM systems to-date, platform-specific - ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific
software operations are required for CPUs to enter and exit coherency. software operations are required for CPUs to enter and exit coherency.
However, there exists newer systems where CPUs' entry to and exit from However, there exists newer systems where CPUs' entry to and exit from
coherency is managed in hardware. Such systems require software to only coherency is managed in hardware. Such systems require software to only
initiate the operations, and the rest is managed in hardware, minimizing initiate the operations, and the rest is managed in hardware, minimizing
active software management. In such systems, this boolean option enables ARM active software management. In such systems, this boolean option enables
Trusted Firmware to carry out build and run-time optimizations during boot TF-A to carry out build and run-time optimizations during boot and power
and power management operations. This option defaults to 0 and if it is management operations. This option defaults to 0 and if it is enabled,
enabled, then it implies ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled. then it implies ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled.
- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3 - ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
runtime software in AArch32 mode, which is required to run AArch32 on Juno. runtime software in AArch32 mode, which is required to run AArch32 on Juno.
@ -497,10 +495,10 @@ Common build options
any register that is not part of the SBSA generic UART specification. any register that is not part of the SBSA generic UART specification.
Default value is 0 (a full PL011 compliant UART is present). Default value is 0 (a full PL011 compliant UART is present).
- ``PLAT``: Choose a platform to build ARM Trusted Firmware for. The chosen - ``PLAT``: Choose a platform to build TF-A for. The chosen platform name
platform name must be subdirectory of any depth under ``plat/``, and must must be subdirectory of any depth under ``plat/``, and must contain a
contain a platform makefile named ``platform.mk``. For example to build ARM platform makefile named ``platform.mk``. For example, to build TF-A for the
Trusted Firmware for ARM Juno board select PLAT=juno. Arm Juno board, select PLAT=juno.
- ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image - ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image
instead of the normal boot flow. When defined, it must specify the entry instead of the normal boot flow. When defined, it must specify the entry
@ -524,7 +522,7 @@ Common build options
means by default the original power-state format is used by the PSCI means by default the original power-state format is used by the PSCI
implementation. This flag should be specified by the platform makefile implementation. This flag should be specified by the platform makefile
and it governs the return value of PSCI\_FEATURES API for CPU\_SUSPEND and it governs the return value of PSCI\_FEATURES API for CPU\_SUSPEND
smc function id. When this option is enabled on ARM platforms, the smc function id. When this option is enabled on Arm platforms, the
option ``ARM_RECOM_STATE_ID_ENC`` needs to be set to 1 as well. option ``ARM_RECOM_STATE_ID_ENC`` needs to be set to 1 as well.
- ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead - ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead
@ -532,11 +530,10 @@ Common build options
entrypoint) or 1 (CPU reset to BL31 entrypoint). entrypoint) or 1 (CPU reset to BL31 entrypoint).
The default value is 0. The default value is 0.
- ``RESET_TO_SP_MIN``: SP\_MIN is the minimal AArch32 Secure Payload provided in - ``RESET_TO_SP_MIN``: SP\_MIN is the minimal AArch32 Secure Payload provided
ARM Trusted Firmware. This flag configures SP\_MIN entrypoint as the CPU in TF-A. This flag configures SP\_MIN entrypoint as the CPU reset vector
reset vector instead of the BL1 entrypoint. It can take the value 0 (CPU instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
reset to BL1 entrypoint) or 1 (CPU reset to SP\_MIN entrypoint). The default entrypoint) or 1 (CPU reset to SP\_MIN entrypoint). The default value is 0.
value is 0.
- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the - ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
file that contains the ROT private key in PEM format. If ``SAVE_KEYS=1``, this file that contains the ROT private key in PEM format. If ``SAVE_KEYS=1``, this
@ -570,11 +567,11 @@ Common build options
pages" section in `Firmware Design`_. This flag is disabled by default and pages" section in `Firmware Design`_. This flag is disabled by default and
affects all BL images. affects all BL images.
- ``SPD``: Choose a Secure Payload Dispatcher component to be built into the - ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
Trusted Firmware. This build option is only valid if ``ARCH=aarch64``. The This build option is only valid if ``ARCH=aarch64``. The value should be
value should be the path to the directory containing the SPD source, the path to the directory containing the SPD source, relative to
relative to ``services/spd/``; the directory is expected to ``services/spd/``; the directory is expected to contain a makefile called
contain a makefile called ``<spd-value>.mk``. ``<spd-value>.mk``.
- ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can - ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can
take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops
@ -622,16 +619,16 @@ Common build options
- ``USE_COHERENT_MEM``: This flag determines whether to include the coherent - ``USE_COHERENT_MEM``: This flag determines whether to include the coherent
memory region in the BL memory map or not (see "Use of Coherent memory in memory region in the BL memory map or not (see "Use of Coherent memory in
Trusted Firmware" section in `Firmware Design`_). It can take the value 1 TF-A" section in `Firmware Design`_). It can take the value 1
(Coherent memory region is included) or 0 (Coherent memory region is (Coherent memory region is included) or 0 (Coherent memory region is
excluded). Default is 1. excluded). Default is 1.
- ``V``: Verbose build. If assigned anything other than 0, the build commands - ``V``: Verbose build. If assigned anything other than 0, the build commands
are printed. Default is 0. are printed. Default is 0.
- ``VERSION_STRING``: String used in the log output for each TF image. Defaults - ``VERSION_STRING``: String used in the log output for each TF-A image.
to a string formed by concatenating the version number, build type and build Defaults to a string formed by concatenating the version number, build type
string. and build string.
- ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on - ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
the CPU after warm boot. This is applicable for platforms which do not the CPU after warm boot. This is applicable for platforms which do not
@ -639,7 +636,7 @@ Common build options
cluster platforms). If this option is enabled, then warm boot path cluster platforms). If this option is enabled, then warm boot path
enables D-caches immediately after enabling MMU. This option defaults to 0. enables D-caches immediately after enabling MMU. This option defaults to 0.
ARM development platform specific build options Arm development platform specific build options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``ARM_BL31_IN_DRAM``: Boolean option to select loading of BL31 in TZC secured - ``ARM_BL31_IN_DRAM``: Boolean option to select loading of BL31 in TZC secured
@ -652,7 +649,7 @@ ARM development platform specific build options
of the memory reserved for each image. This affects the maximum size of each of the memory reserved for each image. This affects the maximum size of each
BL image as well as the number of allocated memory regions and translation BL image as well as the number of allocated memory regions and translation
tables. By default this flag is 0, which means it uses the default tables. By default this flag is 0, which means it uses the default
unoptimised values for these macros. ARM development platforms that wish to unoptimised values for these macros. Arm development platforms that wish to
optimise memory usage need to set this flag to 1 and must override the optimise memory usage need to set this flag to 1 and must override the
related macros. related macros.
@ -663,7 +660,7 @@ ARM development platform specific build options
Default is true (access to the frame is allowed). Default is true (access to the frame is allowed).
- ``ARM_DISABLE_TRUSTED_WDOG``: boolean option to disable the Trusted Watchdog. - ``ARM_DISABLE_TRUSTED_WDOG``: boolean option to disable the Trusted Watchdog.
By default, ARM platforms use a watchdog to trigger a system reset in case By default, Arm platforms use a watchdog to trigger a system reset in case
an error is encountered during the boot process (for example, when an image an error is encountered during the boot process (for example, when an image
could not be loaded or authenticated). The watchdog is enabled in the early could not be loaded or authenticated). The watchdog is enabled in the early
platform setup hook at BL1 and disabled in the BL1 prepare exit hook. The platform setup hook at BL1 and disabled in the BL1 prepare exit hook. The
@ -680,7 +677,7 @@ ARM development platform specific build options
- ``ARM_ROTPK_LOCATION``: used when ``TRUSTED_BOARD_BOOT=1``. It specifies the - ``ARM_ROTPK_LOCATION``: used when ``TRUSTED_BOARD_BOOT=1``. It specifies the
location of the ROTPK hash returned by the function ``plat_get_rotpk_info()`` location of the ROTPK hash returned by the function ``plat_get_rotpk_info()``
for ARM platforms. Depending on the selected option, the proper private key for Arm platforms. Depending on the selected option, the proper private key
must be specified using the ``ROT_KEY`` option when building the Trusted must be specified using the ``ROT_KEY`` option when building the Trusted
Firmware. This private key will be used by the certificate generation tool Firmware. This private key will be used by the certificate generation tool
to sign the BL2 and Trusted Key certificates. Available options for to sign the BL2 and Trusted Key certificates. Available options for
@ -707,27 +704,26 @@ ARM development platform specific build options
- ``dram`` : Secure region in DRAM (default option when TBB is enabled, - ``dram`` : Secure region in DRAM (default option when TBB is enabled,
configured by the TrustZone controller) configured by the TrustZone controller)
- ``ARM_XLAT_TABLES_LIB_V1``: boolean option to compile the Trusted Firmware - ``ARM_XLAT_TABLES_LIB_V1``: boolean option to compile TF-A with version 1
with version 1 of the translation tables library instead of version 2. It is of the translation tables library instead of version 2. It is set to 0 by
set to 0 by default, which selects version 2. default, which selects version 2.
- ``ARM_CRYPTOCELL_INTEG`` : bool option to enable Trusted Firmware to invoke - ``ARM_CRYPTOCELL_INTEG`` : bool option to enable TF-A to invoke Arm®
ARM® TrustZone® CryptoCell functionality for Trusted Board Boot on capable TrustZone® CryptoCell functionality for Trusted Board Boot on capable Arm
ARM platforms. If this option is specified, then the path to the CryptoCell platforms. If this option is specified, then the path to the CryptoCell
SBROM library must be specified via ``CCSBROM_LIB_PATH`` flag. SBROM library must be specified via ``CCSBROM_LIB_PATH`` flag.
For a better understanding of these options, the ARM development platform memory For a better understanding of these options, the Arm development platform memory
map is explained in the `Firmware Design`_. map is explained in the `Firmware Design`_.
ARM CSS platform specific build options Arm CSS platform specific build options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``CSS_DETECT_PRE_1_7_0_SCP``: Boolean flag to detect SCP version - ``CSS_DETECT_PRE_1_7_0_SCP``: Boolean flag to detect SCP version
incompatibility. Version 1.7.0 of the SCP firmware made a non-backwards incompatibility. Version 1.7.0 of the SCP firmware made a non-backwards
compatible change to the MTL protocol, used for AP/SCP communication. compatible change to the MTL protocol, used for AP/SCP communication.
Trusted Firmware no longer supports earlier SCP versions. If this option is TF-A no longer supports earlier SCP versions. If this option is set to 1
set to 1 then Trusted Firmware will detect if an earlier version is in use. then TF-A will detect if an earlier version is in use. Default is 1.
Default is 1.
- ``CSS_LOAD_SCP_IMAGES``: Boolean flag, which when set, adds SCP\_BL2 and - ``CSS_LOAD_SCP_IMAGES``: Boolean flag, which when set, adds SCP\_BL2 and
SCP\_BL2U to the FIP and FWU\_FIP respectively, and enables them to be loaded SCP\_BL2U to the FIP and FWU\_FIP respectively, and enables them to be loaded
@ -738,13 +734,12 @@ ARM CSS platform specific build options
management operations and for SCP RAM Firmware transfer. If this option management operations and for SCP RAM Firmware transfer. If this option
is set to 1, then SCMI/SDS drivers will be used. Default is 0. is set to 1, then SCMI/SDS drivers will be used. Default is 0.
ARM FVP platform specific build options Arm FVP platform specific build options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``FVP_CLUSTER_COUNT`` : Configures the cluster count to be used to - ``FVP_CLUSTER_COUNT`` : Configures the cluster count to be used to
build the topology tree within Trusted Firmware. By default the build the topology tree within TF-A. By default TF-A is configured for dual
Trusted Firmware is configured for dual cluster topology and this option cluster topology and this option can be used to override the default value.
can be used to override the default value.
- ``FVP_INTERCONNECT_DRIVER``: Selects the interconnect driver to be built. The - ``FVP_INTERCONNECT_DRIVER``: Selects the interconnect driver to be built. The
default interconnect driver depends on the value of ``FVP_CLUSTER_COUNT`` as default interconnect driver depends on the value of ``FVP_CLUSTER_COUNT`` as
@ -768,9 +763,8 @@ ARM FVP platform specific build options
- ``FVP_GICV2`` : The GICv2 only driver is selected - ``FVP_GICV2`` : The GICv2 only driver is selected
- ``FVP_GICV3`` : The GICv3 only driver is selected (default option) - ``FVP_GICV3`` : The GICv3 only driver is selected (default option)
- ``FVP_GICV3_LEGACY``: The Legacy GICv3 driver is selected (deprecated) - ``FVP_GICV3_LEGACY``: The Legacy GICv3 driver is selected (deprecated)
Note: If Trusted Firmware is compiled with this option on FVPs with Note: If TF-A is compiled with this option on FVPs with GICv3 hardware,
GICv3 hardware, then it configures the hardware to run in GICv2 then it configures the hardware to run in GICv2 emulation mode
emulation mode
- ``FVP_USE_SP804_TIMER`` : Use the SP804 timer instead of the Generic Timer - ``FVP_USE_SP804_TIMER`` : Use the SP804 timer instead of the Generic Timer
for functions that wait for an arbitrary time length (udelay and mdelay). for functions that wait for an arbitrary time length (udelay and mdelay).
@ -808,7 +802,7 @@ When debugging logic problems it might also be useful to disable all compiler
optimizations by using ``-O0``. optimizations by using ``-O0``.
NOTE: Using ``-O0`` could cause output images to be larger and base addresses NOTE: Using ``-O0`` could cause output images to be larger and base addresses
might need to be recalculated (see the **Memory layout on ARM development might need to be recalculated (see the **Memory layout on Arm development
platforms** section in the `Firmware Design`_). platforms** section in the `Firmware Design`_).
Extra debug options can be passed to the build system by setting ``CFLAGS`` or Extra debug options can be passed to the build system by setting ``CFLAGS`` or
@ -823,8 +817,8 @@ Note that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be
ignored as the linker is called directly. ignored as the linker is called directly.
It is also possible to introduce an infinite loop to help in debugging the It is also possible to introduce an infinite loop to help in debugging the
post-BL2 phase of the Trusted Firmware. This can be done by rebuilding BL1 with post-BL2 phase of TF-A. This can be done by rebuilding BL1 with the
the ``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the `Summary of build options`_ ``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the `Summary of build options`_
section. In this case, the developer may take control of the target using a section. In this case, the developer may take control of the target using a
debugger when indicated by the console output. When using DS-5, the following debugger when indicated by the console output. When using DS-5, the following
commands can be used: commands can be used:
@ -852,8 +846,8 @@ called the TSPD. Therefore, if you intend to use the TSP, the BL31 image
must be recompiled as well. For more information on SPs and SPDs, see the must be recompiled as well. For more information on SPs and SPDs, see the
`Secure-EL1 Payloads and Dispatchers`_ section in the `Firmware Design`_. `Secure-EL1 Payloads and Dispatchers`_ section in the `Firmware Design`_.
First clean the Trusted Firmware build directory to get rid of any previous First clean the TF-A build directory to get rid of any previous BL31 binary.
BL31 binary. Then to build the TSP image use: Then to build the TSP image use:
:: ::
@ -895,17 +889,17 @@ is set to ``origin/master``.
Building and using the FIP tool Building and using the FIP tool
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Firmware Image Package (FIP) is a packaging format used by the Trusted Firmware Firmware Image Package (FIP) is a packaging format used by TF-A to package
project to package firmware images in a single binary. The number and type of firmware images in a single binary. The number and type of images that should
images that should be packed in a FIP is platform specific and may include TF be packed in a FIP is platform specific and may include TF-A images and other
images and other firmware images required by the platform. For example, most firmware images required by the platform. For example, most platforms require
platforms require a BL33 image which corresponds to the normal world bootloader a BL33 image which corresponds to the normal world bootloader (e.g. UEFI or
(e.g. UEFI or U-Boot). U-Boot).
The TF build system provides the make target ``fip`` to create a FIP file for the The TF-A build system provides the make target ``fip`` to create a FIP file
specified platform using the FIP creation tool included in the TF project. for the specified platform using the FIP creation tool included in the TF-A
Examples below show how to build a FIP file for FVP, packaging TF images and a project. Examples below show how to build a FIP file for FVP, packaging TF-A
BL33 image. and BL33 images.
For AArch64: For AArch64:
@ -1026,9 +1020,10 @@ images with support for these features:
#. Fulfill the dependencies of the ``mbedtls`` cryptographic and image parser #. Fulfill the dependencies of the ``mbedtls`` cryptographic and image parser
modules by checking out a recent version of the `mbed TLS Repository`_. It modules by checking out a recent version of the `mbed TLS Repository`_. It
is important to use a version that is compatible with TF and fixes any is important to use a version that is compatible with TF-A and fixes any
known security vulnerabilities. See `mbed TLS Security Center`_ for more known security vulnerabilities. See `mbed TLS Security Center`_ for more
information. The latest version of TF is tested with tag ``mbedtls-2.6.0``. information. The latest version of TF-A is tested with tag
``mbedtls-2.6.0``.
The ``drivers/auth/mbedtls/mbedtls_*.mk`` files contain the list of mbed TLS The ``drivers/auth/mbedtls/mbedtls_*.mk`` files contain the list of mbed TLS
source files the modules depend upon. source files the modules depend upon.
@ -1036,17 +1031,17 @@ images with support for these features:
options required to build the mbed TLS sources. options required to build the mbed TLS sources.
Note that the mbed TLS library is licensed under the Apache version 2.0 Note that the mbed TLS library is licensed under the Apache version 2.0
license. Using mbed TLS source code will affect the licensing of license. Using mbed TLS source code will affect the licensing of TF-A
Trusted Firmware binaries that are built using this library. binaries that are built using this library.
#. To build the FIP image, ensure the following command line variables are set #. To build the FIP image, ensure the following command line variables are set
while invoking ``make`` to build Trusted Firmware: while invoking ``make`` to build TF-A:
- ``MBEDTLS_DIR=<path of the directory containing mbed TLS sources>`` - ``MBEDTLS_DIR=<path of the directory containing mbed TLS sources>``
- ``TRUSTED_BOARD_BOOT=1`` - ``TRUSTED_BOARD_BOOT=1``
- ``GENERATE_COT=1`` - ``GENERATE_COT=1``
In the case of ARM platforms, the location of the ROTPK hash must also be In the case of Arm platforms, the location of the ROTPK hash must also be
specified at build time. Two locations are currently supported (see specified at build time. Two locations are currently supported (see
``ARM_ROTPK_LOCATION`` build option): ``ARM_ROTPK_LOCATION`` build option):
@ -1060,11 +1055,11 @@ images with support for these features:
available. available.
- ``ARM_ROTPK_LOCATION=devel_rsa``: use the ROTPK hash that is hardcoded - ``ARM_ROTPK_LOCATION=devel_rsa``: use the ROTPK hash that is hardcoded
in the ARM platform port. The private/public RSA key pair may be in the Arm platform port. The private/public RSA key pair may be
found in ``plat/arm/board/common/rotpk``. found in ``plat/arm/board/common/rotpk``.
- ``ARM_ROTPK_LOCATION=devel_ecdsa``: use the ROTPK hash that is hardcoded - ``ARM_ROTPK_LOCATION=devel_ecdsa``: use the ROTPK hash that is hardcoded
in the ARM platform port. The private/public ECDSA key pair may be in the Arm platform port. The private/public ECDSA key pair may be
found in ``plat/arm/board/common/rotpk``. found in ``plat/arm/board/common/rotpk``.
Example of command line using RSA development keys: Example of command line using RSA development keys:
@ -1086,7 +1081,7 @@ images with support for these features:
#. The optional FWU\_FIP contains any additional images to be loaded from #. The optional FWU\_FIP contains any additional images to be loaded from
Non-Volatile storage during the `Firmware Update`_ process. To build the Non-Volatile storage during the `Firmware Update`_ process. To build the
FWU\_FIP, any FWU images required by the platform must be specified on the FWU\_FIP, any FWU images required by the platform must be specified on the
command line. On ARM development platforms like Juno, these are: command line. On Arm development platforms like Juno, these are:
- NS\_BL2U. The AP non-secure Firmware Updater image. - NS\_BL2U. The AP non-secure Firmware Updater image.
- SCP\_BL2U. The SCP Firmware Update Configuration image. - SCP\_BL2U. The SCP Firmware Update Configuration image.
@ -1121,9 +1116,10 @@ images with support for these features:
Building the Certificate Generation Tool Building the Certificate Generation Tool
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ``cert_create`` tool is built as part of the TF build process when the ``fip`` The ``cert_create`` tool is built as part of the TF-A build process when the
make target is specified and TBB is enabled (as described in the previous ``fip`` make target is specified and TBB is enabled (as described in the
section), but it can also be built separately with the following command: previous section), but it can also be built separately with the following
command:
:: ::
@ -1188,7 +1184,7 @@ corrupted binaries.
Note for AArch32, the instructions below assume that nt-fw.bin is a custom Note for AArch32, the instructions below assume that nt-fw.bin is a custom
Normal world boot loader that supports AArch32. Normal world boot loader that supports AArch32.
#. Build TF images and create a new FIP for FVP #. Build TF-A images and create a new FIP for FVP
:: ::
@ -1198,7 +1194,7 @@ corrupted binaries.
# AArch32 # AArch32
make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=nt-fw.bin all fip make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=nt-fw.bin all fip
#. Build TF images and create a new FIP for Juno #. Build TF-A images and create a new FIP for Juno
For AArch64: For AArch64:
@ -1322,16 +1318,16 @@ scratch, this is a complex task on some platforms, depending on the level of
configuration required to put the system in the expected state. configuration required to put the system in the expected state.
Rather than booting a baremetal application, a possible compromise is to boot Rather than booting a baremetal application, a possible compromise is to boot
``EL3 payloads`` through the Trusted Firmware instead. This is implemented as an ``EL3 payloads`` through TF-A instead. This is implemented as an alternative
alternative boot flow, where a modified BL2 boots an EL3 payload, instead of boot flow, where a modified BL2 boots an EL3 payload, instead of loading the
loading the other BL images and passing control to BL31. It reduces the other BL images and passing control to BL31. It reduces the complexity of
complexity of developing EL3 baremetal code by: developing EL3 baremetal code by:
- putting the system into a known architectural state; - putting the system into a known architectural state;
- taking care of platform secure world initialization; - taking care of platform secure world initialization;
- loading the SCP\_BL2 image if required by the platform. - loading the SCP\_BL2 image if required by the platform.
When booting an EL3 payload on ARM standard platforms, the configuration of the When booting an EL3 payload on Arm standard platforms, the configuration of the
TrustZone controller is simplified such that only region 0 is enabled and is TrustZone controller is simplified such that only region 0 is enabled and is
configured to permit secure access only. This gives full access to the whole configured to permit secure access only. This gives full access to the whole
DRAM to the EL3 payload. DRAM to the EL3 payload.
@ -1350,11 +1346,11 @@ Booting an EL3 payload
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
The EL3 payload image is a standalone image and is not part of the FIP. It is The EL3 payload image is a standalone image and is not part of the FIP. It is
not loaded by the Trusted Firmware. Therefore, there are 2 possible scenarios: not loaded by TF-A. Therefore, there are 2 possible scenarios:
- The EL3 payload may reside in non-volatile memory (NVM) and execute in - The EL3 payload may reside in non-volatile memory (NVM) and execute in
place. In this case, booting it is just a matter of specifying the right place. In this case, booting it is just a matter of specifying the right
address in NVM through ``EL3_PAYLOAD_BASE`` when building the TF. address in NVM through ``EL3_PAYLOAD_BASE`` when building TF-A.
- The EL3 payload needs to be loaded in volatile memory (e.g. DRAM) at - The EL3 payload needs to be loaded in volatile memory (e.g. DRAM) at
run-time. run-time.
@ -1423,7 +1419,7 @@ used:
--data="/path/to/el3-payload"@address [Foundation FVP] --data="/path/to/el3-payload"@address [Foundation FVP]
The address provided to the FVP must match the ``EL3_PAYLOAD_BASE`` address The address provided to the FVP must match the ``EL3_PAYLOAD_BASE`` address
used when building the Trusted Firmware. used when building TF-A.
Booting an EL3 payload on Juno Booting an EL3 payload on Juno
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1441,15 +1437,14 @@ Preloaded BL33 alternative boot flow
------------------------------------ ------------------------------------
Some platforms have the ability to preload BL33 into memory instead of relying Some platforms have the ability to preload BL33 into memory instead of relying
on Trusted Firmware to load it. This may simplify packaging of the normal world on TF-A to load it. This may simplify packaging of the normal world code and
code and improve performance in a development environment. When secure world improve performance in a development environment. When secure world cold boot
cold boot is complete, Trusted Firmware simply jumps to a BL33 base address is complete, TF-A simply jumps to a BL33 base address provided at build time.
provided at build time.
For this option to be used, the ``PRELOADED_BL33_BASE`` build option has to be For this option to be used, the ``PRELOADED_BL33_BASE`` build option has to be
used when compiling the Trusted Firmware. For example, the following command used when compiling TF-A. For example, the following command will create a FIP
will create a FIP without a BL33 and prepare to jump to a BL33 image loaded at without a BL33 and prepare to jump to a BL33 image loaded at address
address 0x80000000: 0x80000000:
:: ::
@ -1459,8 +1454,8 @@ Boot of a preloaded bootwrapped kernel image on Base FVP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following example uses the AArch64 boot wrapper. This simplifies normal The following example uses the AArch64 boot wrapper. This simplifies normal
world booting while also making use of TF features. It can be obtained from its world booting while also making use of TF-A features. It can be obtained from
repository with: its repository with:
:: ::
@ -1494,8 +1489,8 @@ to load the ELF file over JTAG on Juno.
Running the software on FVP Running the software on FVP
--------------------------- ---------------------------
The latest version of the AArch64 build of ARM Trusted Firmware has been tested The latest version of the AArch64 build of TF-A has been tested on the
on the following ARM FVPs (64-bit host machine only). following Arm FVPs (64-bit host machine only).
NOTE: Unless otherwise stated, the model version is Version 11.2 Build 11.2.33. NOTE: Unless otherwise stated, the model version is Version 11.2 Build 11.2.33.
@ -1510,8 +1505,8 @@ NOTE: Unless otherwise stated, the model version is Version 11.2 Build 11.2.33.
- ``FVP_Base_Cortex-A73x4-A53x4`` - ``FVP_Base_Cortex-A73x4-A53x4``
- ``FVP_Base_Cortex-A73x4`` - ``FVP_Base_Cortex-A73x4``
The latest version of the AArch32 build of ARM Trusted Firmware has been tested The latest version of the AArch32 build of TF-A has been tested on the
on the following ARM FVPs (64-bit host machine only). following Arm FVPs (64-bit host machine only).
- ``FVP_Base_AEMv8A-AEMv8A`` (Version 9.0, Build 0.8.9005) - ``FVP_Base_AEMv8A-AEMv8A`` (Version 9.0, Build 0.8.9005)
- ``FVP_Base_Cortex-A32x4`` - ``FVP_Base_Cortex-A32x4``
@ -1529,7 +1524,7 @@ NOTE: The software will not work on Version 1.0 of the Foundation FVP.
The commands below would report an ``unhandled argument`` error in this case. The commands below would report an ``unhandled argument`` error in this case.
NOTE: FVPs can be launched with ``--cadi-server`` option such that a NOTE: FVPs can be launched with ``--cadi-server`` option such that a
CADI-compliant debugger (for example, ARM DS-5) can connect to and control its CADI-compliant debugger (for example, Arm DS-5) can connect to and control its
execution. execution.
NOTE: Since FVP model Version 11.0 Build 11.0.34 and Version 8.5 Build 0.8.5202 NOTE: Since FVP model Version 11.0 Build 11.0.34 and Version 8.5 Build 0.8.5202
@ -1538,23 +1533,23 @@ models. The models can be launched with ``-Q 100`` option if they are required
to match the run time characteristics of the older versions. to match the run time characteristics of the older versions.
The Foundation FVP is a cut down version of the AArch64 Base FVP. It can be The Foundation FVP is a cut down version of the AArch64 Base FVP. It can be
downloaded for free from `ARM's website`_. downloaded for free from `Arm's website`_.
The Cortex-A models listed above are also available to download from The Cortex-A models listed above are also available to download from
`ARM's website`_. `Arm's website`_.
Please refer to the FVP documentation for a detailed description of the model Please refer to the FVP documentation for a detailed description of the model
parameter options. A brief description of the important ones that affect the ARM parameter options. A brief description of the important ones that affect TF-A
Trusted Firmware and normal world software behavior is provided below. and normal world software behavior is provided below.
Obtaining the Flattened Device Trees Obtaining the Flattened Device Trees
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Depending on the FVP configuration and Linux configuration used, different Depending on the FVP configuration and Linux configuration used, different
FDT files are required. FDTs for the Foundation and Base FVPs can be found in FDT files are required. FDTs for the Foundation and Base FVPs can be found in
the Trusted Firmware source directory under ``fdts/``. The Foundation FVP has a the TF-A source directory under ``fdts/``. The Foundation FVP has a subset of
subset of the Base FVP components. For example, the Foundation FVP lacks CLCD the Base FVP components. For example, the Foundation FVP lacks CLCD and MMC
and MMC support, and has only one CPU cluster. support, and has only one CPU cluster.
Note: It is not recommended to use the FDTs built along the kernel because not Note: It is not recommended to use the FDTs built along the kernel because not
all FDTs are available from there. all FDTs are available from there.
@ -1592,7 +1587,7 @@ Running on the Foundation FVP with reset to BL1 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``Foundation_Platform`` parameters should be used to boot Linux with The following ``Foundation_Platform`` parameters should be used to boot Linux with
4 CPUs using the AArch64 build of ARM Trusted Firmware. 4 CPUs using the AArch64 build of TF-A.
:: ::
@ -1616,19 +1611,19 @@ Notes:
- The default use-case for the Foundation FVP is to use the ``--gicv3`` option - The default use-case for the Foundation FVP is to use the ``--gicv3`` option
and enable the GICv3 device in the model. Note that without this option, and enable the GICv3 device in the model. Note that without this option,
the Foundation FVP defaults to legacy (Versatile Express) memory map which the Foundation FVP defaults to legacy (Versatile Express) memory map which
is not supported by ARM Trusted Firmware. is not supported by TF-A.
- In order for the Arm Trusted Firmware to run correctly on the Foundation - In order for TF-A to run correctly on the Foundation FVP, the architecture
Model the architecture versions must match. The Foundation FVP defaults to versions must match. The Foundation FVP defaults to the highest v8.x
the highest v8.x version it supports but the default build for Arm Trusted version it supports but the default build for TF-A is for v8.0. To avoid
Firmware is for v8.0. To avoid issues either start the Foundation Model to issues either start the Foundation FVP to use v8.0 architecture using the
use v8.0 architecture using the ``--arm-v8.0`` option or build Arm Trusted ``--arm-v8.0`` option, or build TF-A with an appropriate value for
Firmware with an appropriate value for ``ARM_ARCH_MINOR``. ``ARM_ARCH_MINOR``.
Running on the AEMv8 Base FVP with reset to BL1 entrypoint Running on the AEMv8 Base FVP with reset to BL1 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
with 8 CPUs using the AArch64 build of ARM Trusted Firmware. with 8 CPUs using the AArch64 build of TF-A.
:: ::
@ -1649,7 +1644,7 @@ Running on the AEMv8 Base FVP (AArch32) with reset to BL1 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
with 8 CPUs using the AArch32 build of ARM Trusted Firmware. with 8 CPUs using the AArch32 build of TF-A.
:: ::
@ -1678,7 +1673,7 @@ Running on the Cortex-A57-A53 Base FVP with reset to BL1 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to
boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware. boot Linux with 8 CPUs using the AArch64 build of TF-A.
:: ::
@ -1697,7 +1692,7 @@ Running on the Cortex-A32 Base FVP (AArch32) with reset to BL1 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to
boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware. boot Linux with 4 CPUs using the AArch32 build of TF-A.
:: ::
@ -1716,7 +1711,7 @@ Running on the AEMv8 Base FVP with reset to BL31 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
with 8 CPUs using the AArch64 build of ARM Trusted Firmware. with 8 CPUs using the AArch64 build of TF-A.
:: ::
@ -1763,7 +1758,7 @@ Running on the AEMv8 Base FVP (AArch32) with reset to SP\_MIN entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
with 8 CPUs using the AArch32 build of ARM Trusted Firmware. with 8 CPUs using the AArch32 build of TF-A.
:: ::
@ -1803,7 +1798,7 @@ Running on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to
boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware. boot Linux with 8 CPUs using the AArch64 build of TF-A.
:: ::
@ -1831,7 +1826,7 @@ Running on the Cortex-A32 Base FVP (AArch32) with reset to SP\_MIN entrypoint
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to
boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware. boot Linux with 4 CPUs using the AArch32 build of TF-A.
:: ::
@ -1853,8 +1848,7 @@ boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware.
Running the software on Juno Running the software on Juno
---------------------------- ----------------------------
This version of the ARM Trusted Firmware has been tested on variants r0, r1 and This version of TF-A has been tested on variants r0, r1 and r2 of Juno.
r2 of Juno.
To execute the software stack on Juno, the version of the Juno board recovery To execute the software stack on Juno, the version of the Juno board recovery
image indicated in the `Linaro Release Notes`_ must be installed. If you have an image indicated in the `Linaro Release Notes`_ must be installed. If you have an
@ -1862,18 +1856,18 @@ earlier version installed or are unsure which version is installed, please
re-install the recovery image by following the re-install the recovery image by following the
`Instructions for using Linaro's deliverables on Juno`_. `Instructions for using Linaro's deliverables on Juno`_.
Preparing Trusted Firmware images Preparing TF-A images
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
After building Trusted Firmware, the files ``bl1.bin`` and ``fip.bin`` need copying After building TF-A, the files ``bl1.bin`` and ``fip.bin`` need copying to the
to the ``SOFTWARE/`` directory of the Juno SD card. ``SOFTWARE/`` directory of the Juno SD card.
Other Juno software information Other Juno software information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please visit the `ARM Platforms Portal`_ to get support and obtain any other Juno Please visit the `Arm Platforms Portal`_ to get support and obtain any other Juno
software information. Please also refer to the `Juno Getting Started Guide`_ to software information. Please also refer to the `Juno Getting Started Guide`_ to
get more detailed information about the Juno ARM development platform and how to get more detailed information about the Juno Arm development platform and how to
configure it. configure it.
Testing SYSTEM SUSPEND on Juno Testing SYSTEM SUSPEND on Juno
@ -1893,7 +1887,7 @@ wakeup interrupt from RTC.
-------------- --------------
*Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _Linaro: `Linaro Release Notes`_ .. _Linaro: `Linaro Release Notes`_
.. _Linaro Release: `Linaro Release Notes`_ .. _Linaro Release: `Linaro Release Notes`_
@ -1901,7 +1895,7 @@ wakeup interrupt from RTC.
.. _Linaro Release 17.10: https://community.arm.com/dev-platforms/w/docs/226/old-linaro-release-notes#1710 .. _Linaro Release 17.10: https://community.arm.com/dev-platforms/w/docs/226/old-linaro-release-notes#1710
.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/linaro-software-deliverables .. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/linaro-software-deliverables
.. _Instructions for using Linaro's deliverables on Juno: https://community.arm.com/dev-platforms/w/docs/303/juno .. _Instructions for using Linaro's deliverables on Juno: https://community.arm.com/dev-platforms/w/docs/303/juno
.. _ARM Platforms Portal: https://community.arm.com/dev-platforms/ .. _Arm Platforms Portal: https://community.arm.com/dev-platforms/
.. _Development Studio 5 (DS-5): http://www.arm.com/products/tools/software-tools/ds-5/index.php .. _Development Studio 5 (DS-5): http://www.arm.com/products/tools/software-tools/ds-5/index.php
.. _Dia: https://wiki.gnome.org/Apps/Dia/Download .. _Dia: https://wiki.gnome.org/Apps/Dia/Download
.. _here: psci-lib-integration-guide.rst .. _here: psci-lib-integration-guide.rst
@ -1911,7 +1905,7 @@ wakeup interrupt from RTC.
.. _Firmware Design: firmware-design.rst .. _Firmware Design: firmware-design.rst
.. _mbed TLS Repository: https://github.com/ARMmbed/mbedtls.git .. _mbed TLS Repository: https://github.com/ARMmbed/mbedtls.git
.. _mbed TLS Security Center: https://tls.mbed.org/security .. _mbed TLS Security Center: https://tls.mbed.org/security
.. _ARM's website: `FVP models`_ .. _Arm's website: `FVP models`_
.. _FVP models: https://developer.arm.com/products/system-design/fixed-virtual-platforms .. _FVP models: https://developer.arm.com/products/system-design/fixed-virtual-platforms
.. _Juno Getting Started Guide: http://infocenter.arm.com/help/topic/com.arm.doc.dui0928e/DUI0928E_juno_arm_development_platform_gsg.pdf .. _Juno Getting Started Guide: http://infocenter.arm.com/help/topic/com.arm.doc.dui0928e/DUI0928E_juno_arm_development_platform_gsg.pdf
.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf .. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf

View File

@ -9,7 +9,7 @@ Translation Tables Library Design
This document describes the design of the translation tables library (version 2) This document describes the design of the translation tables library (version 2)
used by the ARM Trusted Firmware. This library provides APIs to create page used by Trusted Firmware-A (TF-A). This library provides APIs to create page
tables based on a description of the memory layout, as well as setting up system tables based on a description of the memory layout, as well as setting up system
registers related to the Memory Management Unit (MMU) and performing the registers related to the Memory Management Unit (MMU) and performing the
required Translation Lookaside Buffer (TLB) maintenance operations. required Translation Lookaside Buffer (TLB) maintenance operations.
@ -329,7 +329,7 @@ The memory mapping algorithm
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The mapping function is implemented as a recursive algorithm. It is however The mapping function is implemented as a recursive algorithm. It is however
bound by the level of depth of the translation tables (the ARMv8-A architecture bound by the level of depth of the translation tables (the Armv8-A architecture
allows up to 4 lookup levels). allows up to 4 lookup levels).
By default [#granularity-ref]_, the algorithm will attempt to minimize the By default [#granularity-ref]_, the algorithm will attempt to minimize the
@ -376,7 +376,7 @@ changes are visible to subsequent execution, including speculative execution,
that uses the changed translation table entries. that uses the changed translation table entries.
A counter-example is the initialization of translation tables. In this case, A counter-example is the initialization of translation tables. In this case,
explicit TLB maintenance is not required. The ARMv8-A architecture guarantees explicit TLB maintenance is not required. The Armv8-A architecture guarantees
that all TLBs are disabled from reset and their contents have no effect on that all TLBs are disabled from reset and their contents have no effect on
address translation at reset [#tlb-reset-ref]_. Therefore, the TLBs invalidation address translation at reset [#tlb-reset-ref]_. Therefore, the TLBs invalidation
is deferred to the ``enable_mmu*()`` family of functions, just before the MMU is is deferred to the ``enable_mmu*()`` family of functions, just before the MMU is
@ -391,9 +391,9 @@ descriptor. Given that the TLBs are not architecturally permitted to hold any
invalid translation table entry [#tlb-no-invalid-entry]_, this means that this invalid translation table entry [#tlb-no-invalid-entry]_, this means that this
mapping cannot be cached in the TLBs. mapping cannot be cached in the TLBs.
.. [#tlb-reset-ref] See section D4.8 `Translation Lookaside Buffers (TLBs)`, subsection `TLB behavior at reset` in ARMv8-A, rev B.a. .. [#tlb-reset-ref] See section D4.8 `Translation Lookaside Buffers (TLBs)`, subsection `TLB behavior at reset` in Armv8-A, rev B.a.
.. [#tlb-no-invalid-entry] See section D4.9.1 `General TLB maintenance requirements` in ARMv8-A, rev B.a. .. [#tlb-no-invalid-entry] See section D4.9.1 `General TLB maintenance requirements` in Armv8-A, rev B.a.
Architectural module Architectural module
~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
@ -405,7 +405,7 @@ translation context to work on.
-------------- --------------
*Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2017-2018, Arm Limited and Contributors. All rights reserved.*
.. _lib/xlat\_tables\_v2: ../lib/xlat_tables_v2 .. _lib/xlat\_tables\_v2: ../lib/xlat_tables_v2
.. _lib/xlat\_tables: ../lib/xlat_tables .. _lib/xlat\_tables: ../lib/xlat_tables

View File

@ -1,4 +1,4 @@
Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved. Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met: are permitted provided that the following conditions are met:
@ -10,7 +10,7 @@ are permitted provided that the following conditions are met:
list of conditions and the following disclaimer in the documentation and/or list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution. other materials provided with the distribution.
- Neither the name of ARM nor the names of its contributors may be used to - Neither the name of Arm nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior endorse or promote products derived from this software without specific prior
written permission. written permission.

View File

@ -1,7 +1,7 @@
ARM Trusted Firmware Maintainers Trusted Firmware-A maintainers
================================ ==============================
ARM Trusted Firmware is an ARM maintained project. All contributions are Trusted Firmware-A (TF-A) is an Arm maintained project. All contributions are
ultimately merged by the maintainers listed below. Technical ownership of some ultimately merged by the maintainers listed below. Technical ownership of some
parts of the codebase is delegated to the sub-maintainers listed below. An parts of the codebase is delegated to the sub-maintainers listed below. An
acknowledgement from these sub-maintainers may be required before the acknowledgement from these sub-maintainers may be required before the
@ -123,8 +123,8 @@ Files:
- docs/plat/xilinx-zynqmp.rst - docs/plat/xilinx-zynqmp.rst
- plat/xilinx/\* - plat/xilinx/\*
ARMv7 architecture sub-maintainer Armv7-A architecture sub-maintainer
--------------------------------- -----------------------------------
Etienne Carriere (etienne.carriere@linaro.org, `etienne-lms`_) Etienne Carriere (etienne.carriere@linaro.org, `etienne-lms`_)

View File

@ -1,21 +1,21 @@
ARM Trusted Firmware - version 1.4 Trusted Firmware-A - version 1.4
================================== ================================
ARM Trusted Firmware provides a reference implementation of secure world Trusted Firmware-A (TF-A) provides a reference implementation of secure world
software for `ARMv8-A`_, including a `Secure Monitor`_ executing at software for `Armv8-A`_, including a `Secure Monitor`_ executing at Exception
Exception Level 3 (EL3). It implements various ARM interface standards, such as: Level 3 (EL3). It implements various Arm interface standards, such as:
- The `Power State Coordination Interface (PSCI)`_ - The `Power State Coordination Interface (PSCI)`_
- Trusted Board Boot Requirements (TBBR, ARM DEN0006C-1) - Trusted Board Boot Requirements (TBBR, Arm DEN0006C-1)
- `SMC Calling Convention`_ - `SMC Calling Convention`_
- `System Control and Management Interface`_ - `System Control and Management Interface`_
As far as possible the code is designed for reuse or porting to other ARMv8-A As far as possible the code is designed for reuse or porting to other Armv8-A
model and hardware platforms. model and hardware platforms.
ARM will continue development in collaboration with interested parties to Arm will continue development in collaboration with interested parties to
provide a full reference implementation of Secure Monitor code and ARM standards provide a full reference implementation of Secure Monitor code and Arm standards
to the benefit of all developers working with ARMv8-A TrustZone technology. to the benefit of all developers working with Armv8-A TrustZone technology.
License License
------- -------
@ -45,7 +45,7 @@ world boot and runtime firmware, in either the AArch32 or AArch64 execution
state. state.
Users are encouraged to do their own security validation, including penetration Users are encouraged to do their own security validation, including penetration
testing, on any secure world code derived from ARM Trusted Firmware. testing, on any secure world code derived from TF-A.
Functionality Functionality
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
@ -54,15 +54,15 @@ Functionality
registers and interrupts for the platform. registers and interrupts for the platform.
- Library support for CPU specific reset and power down sequences. This - Library support for CPU specific reset and power down sequences. This
includes support for errata workarounds and the latest ARM DynamIQ CPUs. includes support for errata workarounds and the latest Arm DynamIQ CPUs.
- Drivers to enable standard initialization of ARM System IP, for example - Drivers to enable standard initialization of Arm System IP, for example
Generic Interrupt Controller (GIC), Cache Coherent Interconnect (CCI), Generic Interrupt Controller (GIC), Cache Coherent Interconnect (CCI),
Cache Coherent Network (CCN), Network Interconnect (NIC) and TrustZone Cache Coherent Network (CCN), Network Interconnect (NIC) and TrustZone
Controller (TZC). Controller (TZC).
- A generic `SCMI`_ driver to interface with conforming power controllers, for - A generic `SCMI`_ driver to interface with conforming power controllers, for
example the ARM System Control Processor (SCP). example the Arm System Control Processor (SCP).
- SMC (Secure Monitor Call) handling, conforming to the `SMC Calling - SMC (Secure Monitor Call) handling, conforming to the `SMC Calling
Convention`_ using an EL3 runtime services framework. Convention`_ using an EL3 runtime services framework.
@ -93,14 +93,14 @@ Functionality
recovery mode), and packaging of the various firmware images into a recovery mode), and packaging of the various firmware images into a
Firmware Image Package (FIP). Firmware Image Package (FIP).
- Pre-integration of TBB with the ARM TrustZone CryptoCell product, to take - Pre-integration of TBB with the Arm TrustZone CryptoCell product, to take
advantage of its hardware Root of Trust and crypto acceleration services. advantage of its hardware Root of Trust and crypto acceleration services.
- Support for alternative boot flows, for example to support platforms where - Support for alternative boot flows, for example to support platforms where
the EL3 Runtime Software is loaded using other firmware or a separate the EL3 Runtime Software is loaded using other firmware or a separate
secure system processor. secure system processor.
- Support for the GCC, LLVM and ARM Compiler 6 toolchains. - Support for the GCC, LLVM and Arm Compiler 6 toolchains.
For a full description of functionality and implementation details, please For a full description of functionality and implementation details, please
see the `Firmware Design`_ and supporting documentation. The `Change Log`_ see the `Firmware Design`_ and supporting documentation. The `Change Log`_
@ -110,9 +110,9 @@ Platforms
~~~~~~~~~ ~~~~~~~~~
Various AArch32 and AArch64 builds of this release has been tested on variants Various AArch32 and AArch64 builds of this release has been tested on variants
r0, r1 and r2 of the `Juno ARM Development Platform`_. r0, r1 and r2 of the `Juno Arm Development Platform`_.
Various AArch64 builds of this release have been tested on the following ARM Various AArch64 builds of this release have been tested on the following Arm
`FVP`_\ s (64-bit host machine only): `FVP`_\ s (64-bit host machine only):
NOTE: Unless otherwise stated, the FVP Version is 11.0, Build 11.0.34. NOTE: Unless otherwise stated, the FVP Version is 11.0, Build 11.0.34.
@ -129,14 +129,14 @@ NOTE: Unless otherwise stated, the FVP Version is 11.0, Build 11.0.34.
- ``FVP_Base_Cortex-A73x4`` - ``FVP_Base_Cortex-A73x4``
- ``FVP_CSS_SGM-775`` (Version 11.0, Build 11.0.36) - ``FVP_CSS_SGM-775`` (Version 11.0, Build 11.0.36)
Various AArch32 builds of this release has been tested on the following ARM Various AArch32 builds of this release has been tested on the following Arm
`FVP`_\ s (64-bit host machine only): `FVP`_\ s (64-bit host machine only):
- ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.5, Build 0.8.8502) - ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.5, Build 0.8.8502)
- ``FVP_Base_Cortex-A32x4`` - ``FVP_Base_Cortex-A32x4``
The Foundation FVP can be downloaded free of charge. The Base FVPs can be The Foundation FVP can be downloaded free of charge. The Base FVPs can be
licensed from ARM. See the `ARM FVP website`_. licensed from Arm. See the `Arm FVP website`_.
All the above platforms have been tested with `Linaro Release 17.04`_. All the above platforms have been tested with `Linaro Release 17.04`_.
@ -167,15 +167,15 @@ Log`_ and the `GitHub issue tracker`_.
Getting Started Getting Started
--------------- ---------------
Get the Trusted Firmware source code from `GitHub`_. Get the TF-A source code from `GitHub`_.
See the `User Guide`_ for instructions on how to install, build and use See the `User Guide`_ for instructions on how to install, build and use
the Trusted Firmware with the ARM `FVP`_\ s. the TF-A with the Arm `FVP`_\ s.
See the `Firmware Design`_ for information on how the Trusted Firmware works. See the `Firmware Design`_ for information on how the TF-A works.
See the `Porting Guide`_ as well for information about how to use this See the `Porting Guide`_ as well for information about how to use this
software on another ARMv8-A platform. software on another Armv8-A platform.
See the `Contributing Guidelines`_ for information on how to contribute to this See the `Contributing Guidelines`_ for information on how to contribute to this
project and the `Acknowledgments`_ file for a list of contributors to the project and the `Acknowledgments`_ file for a list of contributors to the
@ -184,26 +184,26 @@ project.
Feedback and support Feedback and support
~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
ARM welcomes any feedback on Trusted Firmware. If you think you have found a Arm welcomes any feedback on TF-A. If you think you have found a security
security vulnerability, please report this using the process defined in the vulnerability, please report this using the process defined in the TF-A
Trusted Firmware `Security Centre`_. For all other feedback, please use the `Security Centre`_. For all other feedback, please use the
`GitHub issue tracker`_. `GitHub issue tracker`_.
ARM licensees may contact ARM directly via their partner managers. Arm licensees may contact Arm directly via their partner managers.
-------------- --------------
*Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.* *Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.*
.. _ARMv8-A: http://www.arm.com/products/processors/armv8-architecture.php .. _Armv8-A: http://www.arm.com/products/processors/armv8-architecture.php
.. _Secure Monitor: http://www.arm.com/products/processors/technologies/trustzone/tee-smc.php .. _Secure Monitor: http://www.arm.com/products/processors/technologies/trustzone/tee-smc.php
.. _Power State Coordination Interface (PSCI): PSCI_ .. _Power State Coordination Interface (PSCI): PSCI_
.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf .. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf
.. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf .. _SMC Calling Convention: http://infocenter.arm.com/help/topic/com.arm.doc.den0028b/ARM_DEN0028B_SMC_Calling_Convention.pdf
.. _System Control and Management Interface: SCMI_ .. _System Control and Management Interface: SCMI_
.. _SCMI: http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/DEN0056A_System_Control_and_Management_Interface.pdf .. _SCMI: http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/DEN0056A_System_Control_and_Management_Interface.pdf
.. _Juno ARM Development Platform: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php .. _Juno Arm Development Platform: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php
.. _ARM FVP website: FVP_ .. _Arm FVP website: FVP_
.. _FVP: https://developer.arm.com/products/system-design/fixed-virtual-platforms .. _FVP: https://developer.arm.com/products/system-design/fixed-virtual-platforms
.. _Linaro Release 17.04: https://community.arm.com/dev-platforms/b/documents/posts/linaro-release-notes-deprecated#LinaroRelease17.04 .. _Linaro Release 17.04: https://community.arm.com/dev-platforms/b/documents/posts/linaro-release-notes-deprecated#LinaroRelease17.04
.. _OP-TEE Secure OS: https://github.com/OP-TEE/optee_os .. _OP-TEE Secure OS: https://github.com/OP-TEE/optee_os