mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00
docs(cpufeat): clarify description of FEATURE_DETECTION macro
The current documentation of the FEATURE_DETECTION build option seems to suggest that this macro enables the dynamic runtime checking of features, although this is done regardless of this debug feature. FEATURE_DETECTION just adds the detect_arch_features() function to the build and calls it early on, plus it enables the CPU errata order checking. Simplify the description of the FEATURE_DETECTION macro to make this clear, and move the dynamic feature detection description into a separate section, before all the specific ENABLE_FEAT_xxx explanations. This also renames all mentioning of: "... to align with the FEATURE_DETECTIION mechanism ..." with: "... to align with the ENABLE_FEAT mechanism ..." in the description of each feature. Change-Id: I5f4dd2d1e43bd440687b7cee551d02ec853d4e23 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
parent
07da4854e9
commit
641571c728
1 changed files with 69 additions and 68 deletions
|
@ -188,12 +188,12 @@ Common build options
|
|||
- ``CTX_INCLUDE_NEVE_REGS``: Numeric value, when set will cause the Armv8.4-NV
|
||||
registers to be saved/restored when entering/exiting an EL2 execution
|
||||
context. This flag can take values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. Default value is 0.
|
||||
``ENABLE_FEAT`` mechanism. Default value is 0.
|
||||
|
||||
- ``CTX_INCLUDE_PAUTH_REGS``: Numeric value to enable the Pointer
|
||||
Authentication for Secure world. This will cause the ARMv8.3-PAuth registers
|
||||
to be included when saving and restoring the CPU context as part of world
|
||||
switch. This flag can take values 0 to 2, to align with ``FEATURE_DETECTION``
|
||||
switch. This flag can take values 0 to 2, to align with ``ENABLE_FEAT``
|
||||
mechanism. Default value is 0.
|
||||
|
||||
Note that Pointer Authentication is enabled for Non-secure world irrespective
|
||||
|
@ -214,7 +214,7 @@ Common build options
|
|||
|
||||
- ``DISABLE_MTPMU``: Numeric option to disable ``FEAT_MTPMU`` (Multi Threaded
|
||||
PMU). ``FEAT_MTPMU`` is an optional feature available on Armv8.6 onwards.
|
||||
This flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default is ``0``.
|
||||
|
||||
- ``DYN_DISABLE_AUTH``: Provides the capability to dynamically disable Trusted
|
||||
|
@ -261,9 +261,35 @@ Common build options
|
|||
builds, but this behaviour can be overridden in each platform's Makefile or
|
||||
in the build command line.
|
||||
|
||||
- ``ENABLE_FEAT``
|
||||
The Arm architecture defines several architecture extension features,
|
||||
named FEAT_xxx in the architecure manual. Some of those features require
|
||||
setup code in higher exception levels, other features might be used by TF-A
|
||||
code itself.
|
||||
Most of the feature flags defined in the TF-A build system permit to take
|
||||
the values 0, 1 or 2, with the following meaning:
|
||||
|
||||
::
|
||||
|
||||
ENABLE_FEAT_* = 0: Feature is disabled statically at compile time.
|
||||
ENABLE_FEAT_* = 1: Feature is enabled unconditionally at compile time.
|
||||
ENABLE_FEAT_* = 2: Feature is enabled, but checked at runtime.
|
||||
|
||||
When setting the flag to 0, the feature is disabled during compilation,
|
||||
and the compiler's optimisation stage and the linker will try to remove
|
||||
as much of this code as possible.
|
||||
If it is defined to 1, the code will use the feature unconditionally, so the
|
||||
CPU is expected to support that feature. The FEATURE_DETECTION debug
|
||||
feature, if enabled, will verify this.
|
||||
If the feature flag is set to 2, support for the feature will be compiled
|
||||
in, but its existence will be checked at runtime, so it works on CPUs with
|
||||
or without the feature. This is mostly useful for platforms which either
|
||||
support multiple different CPUs, or where the CPU is configured at runtime,
|
||||
like in emulators.
|
||||
|
||||
- ``ENABLE_FEAT_AMU``: Numeric value to enable Activity Monitor Unit
|
||||
extensions. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. This is an optional architectural feature
|
||||
``ENABLE_FEAT`` mechanism. This is an optional architectural feature
|
||||
available on v8.4 onwards. Some v8.2 implementations also implement an AMU
|
||||
and this option can be used to enable this feature on those systems as well.
|
||||
This flag can take the values 0 to 2, the default is 0.
|
||||
|
@ -271,52 +297,52 @@ Common build options
|
|||
- ``ENABLE_FEAT_AMUv1p1``: Numeric value to enable the ``FEAT_AMUv1p1``
|
||||
extension. ``FEAT_AMUv1p1`` is an optional feature available on Arm v8.6
|
||||
onwards. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. Default value is ``0``.
|
||||
``ENABLE_FEAT`` mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_CSV2_2``: Numeric value to enable the ``FEAT_CSV2_2``
|
||||
extension. It allows access to the SCXTNUM_EL2 (Software Context Number)
|
||||
register during EL2 context save/restore operations. ``FEAT_CSV2_2`` is an
|
||||
optional feature available on Arm v8.0 onwards. This flag can take values
|
||||
0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
|
||||
0 to 2, to align with the ``ENABLE_FEAT`` mechanism.
|
||||
Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_DIT``: Numeric value to enable ``FEAT_DIT`` (Data Independent
|
||||
Timing) extension. It allows setting the ``DIT`` bit of PSTATE in EL3.
|
||||
``FEAT_DIT`` is a mandatory architectural feature and is enabled from v8.4
|
||||
and upwards. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. Default value is ``0``.
|
||||
``ENABLE_FEAT`` mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_ECV``: Numeric value to enable support for the Enhanced Counter
|
||||
Virtualization feature, allowing for access to the CNTPOFF_EL2 (Counter-timer
|
||||
Physical Offset register) during EL2 to EL3 context save/restore operations.
|
||||
Its a mandatory architectural feature and is enabled from v8.6 and upwards.
|
||||
This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_FGT``: Numeric value to enable support for FGT (Fine Grain Traps)
|
||||
feature allowing for access to the HDFGRTR_EL2 (Hypervisor Debug Fine-Grained
|
||||
Read Trap Register) during EL2 to EL3 context save/restore operations.
|
||||
Its a mandatory architectural feature and is enabled from v8.6 and upwards.
|
||||
This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_HCX``: Numeric value to set the bit SCR_EL3.HXEn in EL3 to
|
||||
allow access to HCRX_EL2 (extended hypervisor control register) from EL2 as
|
||||
well as adding HCRX_EL2 to the EL2 context save/restore operations. Its a
|
||||
mandatory architectural feature and is enabled from v8.7 and upwards. This
|
||||
flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_MTE``: Numeric value to enable Memory Tagging Extension
|
||||
if the platform wants to use this feature in the Secure world and MTE is
|
||||
enabled at ELX. This flag can take values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. Default value is ``0``.
|
||||
``ENABLE_FEAT`` mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_MTE_PERM``: Numeric value to enable support for
|
||||
``FEAT_MTE_PERM``, which introduces Allocation tag access permission to
|
||||
memory region attributes. ``FEAT_MTE_PERM`` is a optional architectural
|
||||
feature available from v8.9 and upwards. This flag can take the values 0 to
|
||||
2, to align with the ``FEATURE_DETECTION`` mechanism. Default value is
|
||||
2, to align with the ``ENABLE_FEAT`` mechanism. Default value is
|
||||
``0``.
|
||||
|
||||
- ``ENABLE_FEAT_PAN``: Numeric value to enable the ``FEAT_PAN`` (Privileged
|
||||
|
@ -324,17 +350,17 @@ Common build options
|
|||
permission fault for any privileged data access from EL1/EL2 to virtual
|
||||
memory address, accessible at EL0, provided (HCR_EL2.E2H=1). It is a
|
||||
mandatory architectural feature and is enabled from v8.1 and upwards. This
|
||||
flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
flag can take values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_RNG``: Numeric value to enable the ``FEAT_RNG`` extension.
|
||||
``FEAT_RNG`` is an optional feature available on Arm v8.5 onwards. This
|
||||
flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_RNG_TRAP``: Numeric value to enable the ``FEAT_RNG_TRAP``
|
||||
extension. This feature is only supported in AArch64 state. This flag can
|
||||
take values 0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
|
||||
take values 0 to 2, to align with the ``ENABLE_FEAT`` mechanism.
|
||||
Default value is ``0``. ``FEAT_RNG_TRAP`` is an optional feature from
|
||||
Armv8.5 onwards.
|
||||
|
||||
|
@ -346,13 +372,13 @@ Common build options
|
|||
|
||||
- ``ENABLE_FEAT_SEL2``: Numeric value to enable the ``FEAT_SEL2`` (Secure EL2)
|
||||
extension. ``FEAT_SEL2`` is a mandatory feature available on Arm v8.4.
|
||||
This flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_TWED``: Numeric value to enable the ``FEAT_TWED`` (Delayed
|
||||
trapping of WFE Instruction) extension. ``FEAT_TWED`` is a optional feature
|
||||
available on Arm v8.6. This flag can take values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. Default is ``0``.
|
||||
``ENABLE_FEAT`` mechanism. Default is ``0``.
|
||||
|
||||
When ``ENABLE_FEAT_TWED`` is set to ``1``, WFE instruction trapping gets
|
||||
delayed by the amount of value in ``TWED_DELAY``.
|
||||
|
@ -361,40 +387,40 @@ Common build options
|
|||
Host Extensions) extension. It allows access to CONTEXTIDR_EL2 register
|
||||
during EL2 context save/restore operations.``FEAT_VHE`` is a mandatory
|
||||
architectural feature and is enabled from v8.1 and upwards. It can take
|
||||
values 0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
|
||||
values 0 to 2, to align with the ``ENABLE_FEAT`` mechanism.
|
||||
Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_TCR2``: Numeric value to set the bit SCR_EL3.ENTCR2 in EL3 to
|
||||
allow access to TCR2_EL2 (extended translation control) from EL2 as
|
||||
well as adding TCR2_EL2 to the EL2 context save/restore operations. Its a
|
||||
mandatory architectural feature and is enabled from v8.9 and upwards. This
|
||||
flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_S2PIE``: Numeric value to enable support for FEAT_S2PIE
|
||||
at EL2 and below, and context switch relevant registers. This flag
|
||||
can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_S1PIE``: Numeric value to enable support for FEAT_S1PIE
|
||||
at EL2 and below, and context switch relevant registers. This flag
|
||||
can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_S2POE``: Numeric value to enable support for FEAT_S2POE
|
||||
at EL2 and below, and context switch relevant registers. This flag
|
||||
can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_S1POE``: Numeric value to enable support for FEAT_S1POE
|
||||
at EL2 and below, and context switch relevant registers. This flag
|
||||
can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default value is ``0``.
|
||||
|
||||
- ``ENABLE_FEAT_GCS``: Numeric value to set the bit SCR_EL3.GCSEn in EL3 to
|
||||
allow use of Guarded Control Stack from EL2 as well as adding the GCS
|
||||
registers to the EL2 context save/restore operations. This flag can take
|
||||
the values 0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
|
||||
the values 0 to 2, to align with the ``ENABLE_FEAT`` mechanism.
|
||||
Default value is ``0``.
|
||||
|
||||
- ``ENABLE_LTO``: Boolean option to enable Link Time Optimization (LTO)
|
||||
|
@ -407,7 +433,7 @@ Common build options
|
|||
various ELs can assign themselves to desired partition to control their
|
||||
performance aspects.
|
||||
|
||||
This flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. When this option is set to ``1`` or ``2``, EL3 allows lower ELs to
|
||||
access their own MPAM registers without trapping into EL3. This option
|
||||
doesn't make use of partitioning in EL3, however. Platform initialisation
|
||||
|
@ -448,7 +474,7 @@ Common build options
|
|||
|
||||
- ``ENABLE_SPE_FOR_NS`` : Numeric value to enable Statistical Profiling
|
||||
extensions. This is an optional architectural feature for AArch64.
|
||||
This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. The default is 2 but is automatically disabled when the target
|
||||
architecture is AArch32.
|
||||
|
||||
|
@ -462,7 +488,7 @@ Common build options
|
|||
compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an
|
||||
assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS``
|
||||
enabled. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. At this time, this build option cannot be
|
||||
``ENABLE_FEAT`` mechanism. At this time, this build option cannot be
|
||||
used on systems that have SPM_MM enabled. The default is 1.
|
||||
|
||||
- ``ENABLE_SVE_FOR_SWD``: Boolean option to enable SVE for the Secure world.
|
||||
|
@ -1078,26 +1104,26 @@ Common build options
|
|||
- ``ENABLE_BRBE_FOR_NS``: Numeric value to enable access to the branch record
|
||||
buffer registers from NS ELs when FEAT_BRBE is implemented. BRBE is an
|
||||
optional architectural feature for AArch64. This flag can take the values
|
||||
0 to 2, to align with the ``FEATURE_DETECTION`` mechanism. The default is 0
|
||||
0 to 2, to align with the ``ENABLE_FEAT`` mechanism. The default is 0
|
||||
and it is automatically disabled when the target architecture is AArch32.
|
||||
|
||||
- ``ENABLE_TRBE_FOR_NS``: Numeric value to enable access of trace buffer
|
||||
control registers from NS ELs, NS-EL2 or NS-EL1(when NS-EL2 is implemented
|
||||
but unused) when FEAT_TRBE is implemented. TRBE is an optional architectural
|
||||
feature for AArch64. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. The default is 0 and it is automatically
|
||||
``ENABLE_FEAT`` mechanism. The default is 0 and it is automatically
|
||||
disabled when the target architecture is AArch32.
|
||||
|
||||
- ``ENABLE_SYS_REG_TRACE_FOR_NS``: Numeric value to enable trace system
|
||||
registers access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented
|
||||
but unused). This feature is available if trace unit such as ETMv4.x, and
|
||||
ETE(extending ETM feature) is implemented. This flag can take the values
|
||||
0 to 2, to align with the ``FEATURE_DETECTION`` mechanism. The default is 0.
|
||||
0 to 2, to align with the ``ENABLE_FEAT`` mechanism. The default is 0.
|
||||
|
||||
- ``ENABLE_TRF_FOR_NS``: Numeric value to enable trace filter control registers
|
||||
access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented but unused),
|
||||
if FEAT_TRF is implemented. This flag can take the values 0 to 2, to align
|
||||
with the ``FEATURE_DETECTION`` mechanism. This flag is disabled by default.
|
||||
with the ``ENABLE_FEAT`` mechanism. This flag is disabled by default.
|
||||
|
||||
- ``CONDITIONAL_CMO``: Boolean option to enable call to platform-defined routine
|
||||
``plat_can_cmo`` which will return zero if cache management operations should
|
||||
|
@ -1225,7 +1251,7 @@ Common build options
|
|||
|
||||
- ``ENABLE_RME``: Numeric value to enable support for the ARMv9 Realm
|
||||
Management Extension. This flag can take the values 0 to 2, to align with
|
||||
the ``FEATURE_DETECTION`` mechanism. Default value is 0.
|
||||
the ``ENABLE_FEAT`` mechanism. Default value is 0.
|
||||
|
||||
- ``ENABLE_SME_FOR_NS``: Numeric value to enable Scalable Matrix Extension
|
||||
(SME), SVE, and FPU/SIMD for the non-secure world only. These features share
|
||||
|
@ -1235,7 +1261,7 @@ Common build options
|
|||
superset of SVE. SME is an optional architectural feature for AArch64.
|
||||
At this time, this build option cannot be used on systems that have
|
||||
SPD=spmd/SPM_MM and atempting to build with this option will fail.
|
||||
This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
|
||||
This flag can take the values 0 to 2, to align with the ``ENABLE_FEAT``
|
||||
mechanism. Default is 0.
|
||||
|
||||
- ``ENABLE_SME2_FOR_NS``: Numeric value to enable Scalable Matrix Extension
|
||||
|
@ -1243,7 +1269,7 @@ Common build options
|
|||
architectural feature for AArch64.
|
||||
This should be set along with ENABLE_SME_FOR_NS=1, if not, the default SME
|
||||
accesses will still be trapped. This flag can take the values 0 to 2, to
|
||||
align with the ``FEATURE_DETECTION`` mechanism. Default is 0.
|
||||
align with the ``ENABLE_FEAT`` mechanism. Default is 0.
|
||||
|
||||
- ``ENABLE_SME_FOR_SWD``: Boolean option to enable the Scalable Matrix
|
||||
Extension for secure world. Used along with SVE and FPU/SIMD.
|
||||
|
@ -1257,41 +1283,16 @@ Common build options
|
|||
must not be used if ``SPMC_AT_EL3`` is enabled.
|
||||
|
||||
- ``FEATURE_DETECTION``: Boolean option to enable the architectural features
|
||||
detection mechanism. It detects whether the Architectural features enabled
|
||||
through feature specific build flags are supported by the PE or not by
|
||||
validating them either at boot phase or at runtime based on the value
|
||||
possessed by the feature flag (0 to 2) and report error messages at an early
|
||||
stage. This flag will also enable errata ordering checking for ``DEBUG``
|
||||
builds.
|
||||
verification mechanism. This is a debug feature that compares the
|
||||
architectural features enabled through the feature specific build flags
|
||||
(ENABLE_FEAT_xxx) with the features actually available on the CPU running,
|
||||
and reports any discrepancies.
|
||||
This flag will also enable errata ordering checking for ``DEBUG`` builds.
|
||||
|
||||
This prevents and benefits us from EL3 runtime exceptions during context save
|
||||
and restore routines guarded by these build flags. Henceforth validating them
|
||||
before their usage provides more control on the actions taken under them.
|
||||
|
||||
The mechanism permits the build flags to take values 0, 1 or 2 and
|
||||
evaluates them accordingly.
|
||||
|
||||
Lets consider ``ENABLE_FEAT_HCX``, build flag for ``FEAT_HCX`` as an example:
|
||||
|
||||
::
|
||||
|
||||
ENABLE_FEAT_HCX = 0: Feature disabled statically at compile time.
|
||||
ENABLE_FEAT_HCX = 1: Feature Enabled and the flag is validated at boottime.
|
||||
ENABLE_FEAT_HCX = 2: Feature Enabled and the flag is validated at runtime.
|
||||
|
||||
In the above example, if the feature build flag, ``ENABLE_FEAT_HCX`` set to
|
||||
0, feature is disabled statically during compilation. If it is defined as 1,
|
||||
feature is validated, wherein FEAT_HCX is detected at boot time. In case not
|
||||
implemented by the PE, a hard panic is generated. Finally, if the flag is set
|
||||
to 2, feature is validated at runtime.
|
||||
|
||||
Note that the entire implementation is divided into two phases, wherein as
|
||||
as part of phase-1 we are supporting the values 0,1. Value 2 is currently not
|
||||
supported and is planned to be handled explicilty in phase-2 implementation.
|
||||
|
||||
``FEATURE_DETECTION`` macro is disabled by default. Platforms can explicitly
|
||||
make use of this by mechanism, by enabling it to validate whether they have
|
||||
set their build flags properly at an early phase.
|
||||
It is expected that this feature is only used for flexible platforms like
|
||||
software emulators, or for hardware platforms at bringup time, to verify
|
||||
that the configured feature set matches the CPU.
|
||||
The ``FEATURE_DETECTION`` macro is disabled by default.
|
||||
|
||||
- ``PSA_CRYPTO``: Boolean option for enabling MbedTLS PSA crypto APIs support.
|
||||
The platform will use PSA compliant Crypto APIs during authentication and
|
||||
|
|
Loading…
Add table
Reference in a new issue