| d43b2ea6 | 18-Mar-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
perf(bl31): convert cpu_data fetching to C
The assembly routines are opaque to the compiler and it can't inline them. There is also no requirement for them to be called without a stack - each of the
perf(bl31): convert cpu_data fetching to C
The assembly routines are opaque to the compiler and it can't inline them. There is also no requirement for them to be called without a stack - each of their calls has a stack available. So convert them to C so that the compiler can do its inlining magic.
On AArch32 we need to be able to call _cpu_data from the entrypoint so it has to stay as a slight exception.
We can also straighten out the type of the cpu_ops_ptr member so we don't have to cast it everywhere.
Change-Id: I9c2939a955b396edf26b99ef36318eebeaab13e6 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| 82b228ba | 09-Dec-2024 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(gicv5): assign interrupt sources to appropriate security states
Assign the PPI interrupts we commonly have in the device tree to the NS domain. This is a short-term solution that allows Linux t
feat(gicv5): assign interrupt sources to appropriate security states
Assign the PPI interrupts we commonly have in the device tree to the NS domain. This is a short-term solution that allows Linux to fully boot. This is expected to be fully replaced with context management when adding world switching support as some of these are expected to be shared between worlds.
Change-Id: I59a7b5a63f878c9a717ef81e977be7133a402f3f Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| 13b62814 | 20-Nov-2024 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(gicv5): add a barebones GICv5 driver
This is the absolute minimum that's needed to compile an NS-only build end exit out of EL3. The GIC is not used and/or configured in any way but all the nec
feat(gicv5): add a barebones GICv5 driver
This is the absolute minimum that's needed to compile an NS-only build end exit out of EL3. The GIC is not used and/or configured in any way but all the necessary hooks are populated.
Notably, SCR_EL3.FIQ becomes RES1 as GICv5 behaves in a similar manner to a GICv3 with FIQ set.
Change-Id: Idae52b9df97f4ca2996b2dcd1e5efc45478a43f2 Co-developed-by: Achin Gupta <achin.gupta@arm.com> Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| 8cef63d6 | 07-Jan-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(gicv5): add support for building with gicv5
The Generic Interrupt Controller v5 (GICv5) is the next generation of Arm interrupt controllers. It is a clean slate design and has native support fo
feat(gicv5): add support for building with gicv5
The Generic Interrupt Controller v5 (GICv5) is the next generation of Arm interrupt controllers. It is a clean slate design and has native support for the latest Armv9 features. As such it is entirely backwards incompatible with GICv3/v4.
This patch adds the necessary boilerplate to select a build with GICv5. The GIC has always had two parts. BL31 deals directly with the CPU interface while platform code is responsible for managing the IRI. In v5 this split is formalised and the CPU interface, FEAT_GCIE, may be implemented on its own. So reflect this split in our code with ENABLE_FEAT_GCIE which only affects BL31 and the GICv5 IRI lies in the generic GIC driver.
No actual functionality yet.
Change-Id: I97a0c3ba708877c213e50e7ef148e3412aa2af90 Co-developed-by: Achin Gupta <achin.gupta@arm.com> Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| ce27604c | 30-Apr-2025 |
Manish V Badarkhe <manish.badarkhe@arm.com> |
Merge "feat(spe): add support for FEAT_SPE_FDS" into integration |
| 10534543 | 28-Apr-2025 |
Govindraj Raja <govindraj.raja@arm.com> |
Merge changes from topic "fix_pmuv3p9_test" into integration
* changes: fix(smccc): properly set RAS feature bit fix(trng): allow FEAT_RNG_TRAP in dynamic fashion feat(smccc): add FEAT_TWED to
Merge changes from topic "fix_pmuv3p9_test" into integration
* changes: fix(smccc): properly set RAS feature bit fix(trng): allow FEAT_RNG_TRAP in dynamic fashion feat(smccc): add FEAT_TWED to ARCH_FEATURE_AVAILABILITY feat(cpufeat): add support for PMUv3p9
show more ...
|
| 9e0c318d | 28-Apr-2025 |
Govindraj Raja <govindraj.raja@arm.com> |
Merge "feat(cpufeat): add support for FEAT_PAUTH_LR" into integration |
| bdac600b | 15-Apr-2025 |
Andre Przywara <andre.przywara@arm.com> |
fix(cpufeat): replace "bti" mnemonic with hint instructions
Older GNU binutils version require to specify at least "armv8.5-a" for the ARM architecture revision to accept "bti" instructions in the a
fix(cpufeat): replace "bti" mnemonic with hint instructions
Older GNU binutils version require to specify at least "armv8.5-a" for the ARM architecture revision to accept "bti" instructions in the assembly code. Binutils v2.35 have relaxed this, since "bti" is in the hint space, so is ignored on older cores and does NOT require a BTI enabled core to execute.
To not exclude those older binutils versions (as shipped with Ubuntu 20.04), use the "hint" encoding for the "bti" instructions, which are accepted regardless of the minimum architecture revision. Hide this encoding in a macro, to make the "bti" usage more readable in the source code.
Change-Id: I005586efd8974a3f2c7202896c881bb5fed07eea Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 787977c3 | 16-Apr-2025 |
Andre Przywara <andre.przywara@arm.com> |
fix(cpufeat): improve xpaci wrapper
Older toolchains seem to have trouble parsing a directive on the same line as an instruction, so they choke on the separating semicolon:
/tmp/ccBwXW8I.s:93: Erro
fix(cpufeat): improve xpaci wrapper
Older toolchains seem to have trouble parsing a directive on the same line as an instruction, so they choke on the separating semicolon:
/tmp/ccBwXW8I.s:93: Error: unknown architecture `armv8.3-a;'
Put the .arch directive on a line of its own, so that the assembler can digest it.
Drop the comment on the way: xpaci is a FEAT_PAUTH instruction not encoded in the hint space, so *every* toolchain needs to be allowed ARMv8.3 level instructions, not just older ones.
Also we do not need to force x0 as the register, the compiler will pick it automatically, so drop the register variable.
Change-Id: I0d4d74bcdac04aa86c565ad0455f62adf81febb5 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 4fd9814f | 24-Apr-2025 |
James Clark <james.clark2@arm.com> |
feat(spe): add support for FEAT_SPE_FDS
Allow access to PMSDSFR_EL1 register at NS-EL1 or NS-EL2 when FEAT_SPE_FDS is implemented.
Change-Id: I538577cbfa5b5f242d5dbaeeace7b8e4ee6ffd03 Signed-off-by
feat(spe): add support for FEAT_SPE_FDS
Allow access to PMSDSFR_EL1 register at NS-EL1 or NS-EL2 when FEAT_SPE_FDS is implemented.
Change-Id: I538577cbfa5b5f242d5dbaeeace7b8e4ee6ffd03 Signed-off-by: James Clark <james.clark2@arm.com>
show more ...
|
| 025b1b81 | 11-Mar-2025 |
John Powell <john.powell@arm.com> |
feat(cpufeat): add support for FEAT_PAUTH_LR
This patch enables FEAT_PAUTH_LR at EL3 on systems that support it when the new ENABLE_FEAT_PAUTH_LR flag is set.
Currently, PAUTH_LR is only supported
feat(cpufeat): add support for FEAT_PAUTH_LR
This patch enables FEAT_PAUTH_LR at EL3 on systems that support it when the new ENABLE_FEAT_PAUTH_LR flag is set.
Currently, PAUTH_LR is only supported by arm clang compiler and not GCC.
Change-Id: I7db1e34b661ed95cad75850b62878ac5d98466ea Signed-off-by: John Powell <john.powell@arm.com>
show more ...
|
| 8d9f5f25 | 02-Apr-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(cpufeat): enable FEAT_PAuth to FEAT_STATE_CHECKED
FEAT_PAuth is the second to last feature to be a boolean choice - it's either unconditionally compiled in and must be present in hardware or it
feat(cpufeat): enable FEAT_PAuth to FEAT_STATE_CHECKED
FEAT_PAuth is the second to last feature to be a boolean choice - it's either unconditionally compiled in and must be present in hardware or it's not compiled in. FEAT_PAuth is architected to be backwards compatible - a subset of the branch guarding instructions (pacia/autia) execute as NOPs when PAuth is not present. That subset is used with `-mbranch-protection=standard` and -march pre-8.3. This patch adds the necessary logic to also check accesses of the non-backward compatible registers and allow a fully checked implementation.
Note that a checked support requires -march to be pre 8.3, as otherwise the compiler will include branch protection instructions that are not NOPs without PAuth (eg retaa) which cannot be checked.
Change-Id: Id942c20cae9d15d25b3d72b8161333642574ddaa Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| b0b7609e | 01-Apr-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
refactor(cpufeat): prepare FEAT_PAuth for FEATURE_DETECTION
Convert the old style is_armv8_3_pauth_present() to the new style is_feat_pauth_{present, supported}() helpers and hook FEATURE_DETECTION
refactor(cpufeat): prepare FEAT_PAuth for FEATURE_DETECTION
Convert the old style is_armv8_3_pauth_present() to the new style is_feat_pauth_{present, supported}() helpers and hook FEATURE_DETECTION into it. This is in preparation for converting FEAT_PAuth to FEAT_STATE.
Change-Id: Iec8c3477fafb2cdae67d39ae4da2cca76a67511a Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| 10ecd580 | 26-Mar-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
feat(cpufeat): enable FEAT_BTI to FEAT_STATE_CHECKED
Introduce the is_feat_bti_{supported, present}() helpers and replace checks for ENABLE_BTI with it. Also factor out the setting of SCTLR_EL3.BT o
feat(cpufeat): enable FEAT_BTI to FEAT_STATE_CHECKED
Introduce the is_feat_bti_{supported, present}() helpers and replace checks for ENABLE_BTI with it. Also factor out the setting of SCTLR_EL3.BT out of the PAuth enablement and place it in the respective entrypoints where we initialise SCTLR_EL3. This makes PAuth self-contained and SCTLR_EL3 initialisation centralised.
Change-Id: I0c0657ff1e78a9652cd2cf1603478283dc01f17b Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| ba9e6a34 | 08-Apr-2025 |
Andre Przywara <andre.przywara@arm.com> |
feat(cpufeat): add support for PMUv3p9
Armv8.9 introduced the FEAT_PMUV3P9 extension, which allows finer grained control over EL0 usage of PMU registers. This is controlled by the new PMUACR_EL1 sys
feat(cpufeat): add support for PMUv3p9
Armv8.9 introduced the FEAT_PMUV3P9 extension, which allows finer grained control over EL0 usage of PMU registers. This is controlled by the new PMUACR_EL1 system register, access to which is guarded by the MDCR_EL3.EnPM2 bit. We should set this bit to avoid a trap into EL3 when lower ELs access this register.
Add the required bits and pieces to make this feature usable: - Add the CPUID and MDCR_EL3 bit definitions associated with FEAT_PMUV3P9. - Extend the existing PMU feature check to allow v9 now as well. This is fine since we don't context switch PMU registers at all, so we don't need to do much except to flip the MDCR bit: - Set the EnPM2 bit in pmuv3_enable, so the feature is usuable in non-secure world (and there only). - Handle the MDCR bit for the ARCH_FEATURE_AVAILABILITY feature.
Please note that MDCR_EL3.EnPM2 guards other system registers as well, for other PMU related new architecture features.
Change-Id: I288ca15f5c9efd336c64477d1c6fe9543613e238 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|
| 2cadf21b | 12-Mar-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
fix(plat): remove fvp_r
The platform has not been maintained for some years and is generally broken. Remove it to avoid confusion.
Change-Id: I93d832d51e114689ec79969af5d96071a03f4a88 Signed-off-by
fix(plat): remove fvp_r
The platform has not been maintained for some years and is generally broken. Remove it to avoid confusion.
Change-Id: I93d832d51e114689ec79969af5d96071a03f4a88 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| 4c7fa977 | 21-Mar-2025 |
Manish V Badarkhe <manish.badarkhe@arm.com> |
Merge "chore(cm): add MDCR_EL3.RLTE to context management" into integration |
| 48488245 | 20-Mar-2025 |
Soby Mathew <soby.mathew@arm.com> |
Merge changes from topic "mec" into integration
* changes: feat(qemu): add plat_rmmd_mecid_key_update() feat(rmmd): add RMM_MECID_KEY_UPDATE call |
| c1b0a97b | 08-Jan-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
chore(cm): add MDCR_EL3.RLTE to context management
The bit is already implicitly zero so no functional change. Adding it helps fully describe how we expect FEAT_TRF to behave.
Change-Id: If7a7881e2
chore(cm): add MDCR_EL3.RLTE to context management
The bit is already implicitly zero so no functional change. Adding it helps fully describe how we expect FEAT_TRF to behave.
Change-Id: If7a7881e2b50188222ce46265b432d658a664c75 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|
| f801fdc2 | 22-Apr-2024 |
Tushar Khandelwal <tushar.khandelwal@arm.com> |
feat(rmmd): add RMM_MECID_KEY_UPDATE call
With this addition, TF-A now has an SMC call to handle the update of MEC keys associated to MECIDs.
The behavior of this newly added call is empty for now
feat(rmmd): add RMM_MECID_KEY_UPDATE call
With this addition, TF-A now has an SMC call to handle the update of MEC keys associated to MECIDs.
The behavior of this newly added call is empty for now until an implementation for the MPE (Memory Protection Engine) driver is available. Only parameter sanitization has been implemented.
Signed-off-by: Tushar Khandelwal <tushar.khandelwal@arm.com> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Signed-off-by: Juan Pablo Conde <juanpablo.conde@arm.com> Change-Id: I2a969310b47e8c6da1817a79be0cd56158c6efc3
show more ...
|
| c5ea3fac | 12-Mar-2025 |
Soby Mathew <soby.mathew@arm.com> |
Merge "feat(rmmd): add FEAT_MEC support" into integration |
| 7e84f3cf | 15-Mar-2024 |
Tushar Khandelwal <tushar.khandelwal@.com> |
feat(rmmd): add FEAT_MEC support
This patch provides architectural support for further use of Memory Encryption Contexts (MEC) by declaring the necessary registers, bits, masks, helpers and values a
feat(rmmd): add FEAT_MEC support
This patch provides architectural support for further use of Memory Encryption Contexts (MEC) by declaring the necessary registers, bits, masks, helpers and values and modifying the necessary registers to enable FEAT_MEC.
Signed-off-by: Tushar Khandelwal <tushar.khandelwal@arm.com> Signed-off-by: Juan Pablo Conde <juanpablo.conde@arm.com> Change-Id: I670dbfcef46e131dcbf3a0b927467ebf6f438fa4
show more ...
|
| 8656bdab | 07-Feb-2025 |
Arvind Ram Prakash <arvind.ramprakash@arm.com> |
fix(cpufeat): include FEAT_MOPS declaration in aarch32 header
This patch adds the missing is_feat_mops_supported() declaration in aarch32 header.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakas
fix(cpufeat): include FEAT_MOPS declaration in aarch32 header
This patch adds the missing is_feat_mops_supported() declaration in aarch32 header.
Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Change-Id: I875f65defe23912351f9ef18555a5b0a0e53717d
show more ...
|
| f3e2b499 | 07-Mar-2025 |
Govindraj Raja <govindraj.raja@arm.com> |
fix(cpufeat): avoid using mrrs/msrr for tspd
tspd compiles with `arch_helpers.h` and when FEAT_D128 is enabled read/writes to D128 impacted registers will provide 128-bit mrrs/msrr read/write implem
fix(cpufeat): avoid using mrrs/msrr for tspd
tspd compiles with `arch_helpers.h` and when FEAT_D128 is enabled read/writes to D128 impacted registers will provide 128-bit mrrs/msrr read/write implementation.
However FEAT_D128 implementation with SCR_EL3.D128en is set only for lower-EL Non-Secure world. When tspd is chosen as the SPD target, it builds tsp as well. This S-EL1 payload, used for testing, inadvertently uses mrrs/msrr read/write implementation in `modify_el1_common_regs` helper function. This eventually leads to a panic.
Group all D128 impacted registers and avoid using mrrs/msrr read/write implementation for tspd builds.
Change-Id: Ic0ed3a901ffa65f9447cae08951defbadee3e02a Signed-off-by: Govindraj Raja <govindraj.raja@arm.com>
show more ...
|
| 0a580b51 | 15-Nov-2024 |
Boyan Karatotev <boyan.karatotev@arm.com> |
perf(cm): drop ZCR_EL3 saving and some ISBs and replace them with root context
SVE and SME aren't enabled symmetrically for all worlds, but EL3 needs to context switch them nonetheless. Previously,
perf(cm): drop ZCR_EL3 saving and some ISBs and replace them with root context
SVE and SME aren't enabled symmetrically for all worlds, but EL3 needs to context switch them nonetheless. Previously, this had to happen by writing the enable bits just before reading/writing the relevant context. But since the introduction of root context, this need not be the case. We can have these enables always be present for EL3 and save on some work (and ISBs!) on every context switch.
We can also hoist ZCR_EL3 to a never changing register, as we set its value to be identical for every world, which happens to be the one we want for EL3 too.
Change-Id: I3d950e72049a298008205ba32f230d5a5c02f8b0 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|