| 4286d16f | 26-Nov-2025 |
Arvind Ram Prakash <arvind.ramprakash@arm.com> |
feat(cpufeat): add support for FEAT_UINJ
FEAT_UINJ allows higher ELs to inject Undefined Instruction exceptions into lower ELs by setting SPSR_ELx.UINJ, which updates PSTATE.UINJ on exception return
feat(cpufeat): add support for FEAT_UINJ
FEAT_UINJ allows higher ELs to inject Undefined Instruction exceptions into lower ELs by setting SPSR_ELx.UINJ, which updates PSTATE.UINJ on exception return. When PSTATE.UINJ is set, instruction execution at the lower EL raises an Undefined Instruction exception (EC=0b000000).
This patch introduces support for FEAT_UINJ by updating the inject_undef64() to use hardware undef injection if supported.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Change-Id: I48ad56a58eaab7859d508cfa8dfe81130b873b6b
show more ...
|
| 9838436c | 26-Nov-2025 |
Arvind Ram Prakash <arvind.ramprakash@arm.com> |
feat(cpufeat): enable mandatory Armv9.4–Armv9.6 features by default
This patch sets Armv9.4-Armv9.6 mandatory features to 1 by default.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com>
feat(cpufeat): enable mandatory Armv9.4–Armv9.6 features by default
This patch sets Armv9.4-Armv9.6 mandatory features to 1 by default.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Change-Id: I12382e8765f3af7a5428abb1cf1ea0407fdd3849
show more ...
|
| 78cb57cc | 11-Nov-2025 |
Chris Kay <chris.kay@arm.com> |
fix(build): shell-escape toolchain wrapper commands
When we split toolchain tool commands into their wrapper and program shell fragments, we do so by iterating over each shell word and forwarding it
fix(build): shell-escape toolchain wrapper commands
When we split toolchain tool commands into their wrapper and program shell fragments, we do so by iterating over each shell word and forwarding it to `toolchain-guess-tool`.
However, we receive each word in its raw form, but we pass it to a function which expects a fragment. If the raw word contains characters which are syntactically-meaningful to the shell, then the command can misbehave, and the build system can unwittingly do some funky things.
This small change just ensures that we re-quote the shell word we receive before forwarding it on.
Change-Id: I325e1c135fee97d749da927c08e181775b14d146 Signed-off-by: Chris Kay <chris.kay@arm.com>
show more ...
|
| cfc2d766 | 11-Nov-2025 |
Chris Kay <chris.kay@arm.com> |
fix(build): fix incorrect parentheses expansion in `shell-map`
The previous commit which attempted to fix the expansions in `shell-map` doubled up on the dollar signs for all of the escape substitut
fix(build): fix incorrect parentheses expansion in `shell-map`
The previous commit which attempted to fix the expansions in `shell-map` doubled up on the dollar signs for all of the escape substitutions; this "fixed" the Windows build.
However, the expansion of the parentheses is actually still wrong. Consider the following example:
print = $(warning $(1))
$(call shell-map,print,'$$' '$(lparen)' '$(rparen)')
... which prints:
make_helpers/utilities.mk:620: $ make_helpers/utilities.mk:620: ${lparen} make_helpers/utilities.mk:620: ${rparen}
However, what we expect to see is:
make_helpers/utilities.mk:620: $ make_helpers/utilities.mk:620: ( make_helpers/utilities.mk:620: )
The reason we do these substitutions is because, behind the scenes, the function generates a small snippet of Make which calls the map function provided by the user. To do that safely, we need to escape characters which can cause premature expansion (`$`), and any characters which can interfere with the syntax of the `call` function (`(` and `)`).
The shell snippet that we *expected* the example above to generate was:
$(call print,$$,1) $(call print,${lparen},2) $(call print,${rparen},3)
However, as of the last "fix", what it is actually generating is:
$(call print,$$,1) $(call print,$${lparen},2) $(call print,$${rparen},3)
This breaks the Windows build again but that's because this bug was actually three bugs from the start.
Change-Id: Ibaf044806101334ddf4080df8da18f9aac8667e5 Signed-off-by: Chris Kay <chris.kay@arm.com>
show more ...
|
| f396aec8 | 09-Sep-2025 |
Arvind Ram Prakash <arvind.ramprakash@arm.com> |
feat(cpufeat): add support for FEAT_IDTE3
This patch adds support for FEAT_IDTE3, which introduces support for handling the trapping of Group 3 and Group 5 (only GMID_EL1) registers to EL3 (unless t
feat(cpufeat): add support for FEAT_IDTE3
This patch adds support for FEAT_IDTE3, which introduces support for handling the trapping of Group 3 and Group 5 (only GMID_EL1) registers to EL3 (unless trapped to EL2). IDTE3 allows EL3 to modify the view of ID registers for lower ELs, and this capability is used to disable fields of ID registers tied to disabled features.
The ID registers are initially read as-is and stored in context. Then, based on the feature enablement status for each world, if a particular feature is disabled, its corresponding field in the cached ID register is set to Res0. When lower ELs attempt to read an ID register, the cached ID register value is returned. This allows EL3 to prevent lower ELs from accessing feature-specific system registers that are disabled in EL3, even though the hardware implements them.
The emulated ID register values are stored primarily in per-world context, except for certain debug-related ID registers such as ID_AA64DFR0_EL1 and ID_AA64DFR1_EL1, which are stored in the cpu_data and are unique to each PE. This is done to support feature asymmetry that is commonly seen in debug features.
FEAT_IDTE3 traps all Group 3 ID registers in the range op0 == 3, op1 == 0, CRn == 0, CRm == {2–7}, op2 == {0–7} and the Group 5 GMID_EL1 register. However, only a handful of ID registers contain fields used to detect features enabled in EL3. Hence, we only cache those ID registers, while the rest are transparently returned as is to the lower EL.
This patch updates the CREATE_FEATURE_FUNCS macro to generate update_feat_xyz_idreg_field() functions that disable ID register fields on a per-feature basis. The enabled_worlds scope is used to disable ID register fields for security states where the feature is not enabled.
This EXPERIMENTAL feature is controlled by the ENABLE_FEAT_IDTE3 build flag and is currently disabled by default.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Change-Id: I5f998eeab81bb48c7595addc5595313a9ebb96d5
show more ...
|
| 5e827bf0 | 24-Oct-2025 |
Timothy Hayes <timothy.hayes@arm.com> |
feat(cpufeat): introduce FEAT_RME_GDI support
This patch adds a new build flag ENABLE_FEAT_RME_GDI to enable this feature, along with defining various related register fields. At this point, when en
feat(cpufeat): introduce FEAT_RME_GDI support
This patch adds a new build flag ENABLE_FEAT_RME_GDI to enable this feature, along with defining various related register fields. At this point, when enabled, this feature enables the SA and NSP GPI encodings by setting the corresponding bits in GPCCR_EL3.
Change-Id: I54152fbb3d19b176264e5d16acbcc866725dc290 Signed-off-by: John Powell <john.powell@arm.com> Signed-off-by: Timothy Hayes <timothy.hayes@arm.com>
show more ...
|
| 714a1a93 | 28-Oct-2025 |
Manish Pandey <manish.pandey2@arm.com> |
fix(cpufeat): extend FEAT_EBEP handling to delegate PMU control to EL2
Currently, the FEAT_EBEP feature presence check is only used for UNDEF injection into lower ELs. However, this feature also aff
fix(cpufeat): extend FEAT_EBEP handling to delegate PMU control to EL2
Currently, the FEAT_EBEP feature presence check is only used for UNDEF injection into lower ELs. However, this feature also affects the access behavior of MDCR_EL2. Specifically, if the PMEE bits in MDCR_EL3 are not set to 0b01, then the MDCR_EL2.PMEE bits cannot be configured by EL2.
This patch extends the use of FEAT_EBEP to delegate PMU IRQ and profiling exception control to EL2 by setting MDCR_EL3.PMEE = 0b01.This ensures that lower ELs can manage PMU configuration.
Signed-off-by: Manish Pandey <manish.pandey2@arm.com> Change-Id: Ib7e1d5c72f017b8ffc2131fc57309dd9d811c973
show more ...
|