audk/ArmPlatformPkg
Jessica Clarke cb87aada97 ArmPlatformPkg: Honour RES1 fields in CPTR_EL2
Unlike CPACR_EL1 whose reserved bits are solely RES0, CPTR_EL2 has some
RES1 bits, and so we should not clear them unless we know what they
mean. For example, when SVE was introduced, CPACR_EL1.ZEN occupied a
RES0 field and thus 0 means trap (which is what we get at EL1), but
CPTR_EL2.TZ occupied a RES1 field and thus 1 means trap, but we set it
to 0, so the environment is inconsistent between EDK2 and EL1 and EL2.
Another concrete case is for Morello, where the CEN/TC fields similarly
gate access to capability register state, but also alter exception
delivery and return, such that VBAR_ELx and ELR_ELx become capabilities.
So long as software adheres to RES0/1 this is backwards-compatible, but
since EDK2 does not do so here it inadvertently enables capability-based
exception delivery and return and thus, when run at EL2, gets stuck in a
trap loop when taking its first interrupt, but works just fine at EL1.

Fix this by setting all the RES1 fields in CPTR_EL2, following the
pattern for CPACR_EL1's non-zero initial value (due to setting FPEN so
as to not trap on SIMD/FP use), tested by running ArmVirtQemu-AARCH64
(DEBUG) on Morello QEMU with EL2 enabled.

Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
2024-11-14 06:25:27 +00:00
..
Drivers ArmPlatformPkg: CodeQL Fixes. 2024-10-30 19:13:09 +00:00
Include/Library ArmPlatformPkg/ArmPlatformLib: Drop unused MPCore routines 2024-08-30 08:01:28 +00:00
Library ArmPlatformPkg: CodeQL Fixes. 2024-10-30 19:13:09 +00:00
MemoryInitPei ArmPlatformPkg/MemoryInitPei: Remove Non-RT Types from Mem Type Info HOB 2024-11-11 16:45:29 +00:00
PeilessSec MdePkg: Move AsmMacroIoLib*.h from ArmPkg 2024-09-12 19:36:59 +00:00
PlatformPei ArmPlatformPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Scripts ArmPlatformPkg: Remove RVCT support 2022-05-13 14:58:54 +00:00
Sec ArmPlatformPkg: Honour RES1 fields in CPTR_EL2 2024-11-14 06:25:27 +00:00
ArmPlatformPkg.ci.yaml ArmPlatformPkg/ArmPlatformPkg.ci.yaml: Add PrEval CI config 2024-09-02 23:20:35 +00:00
ArmPlatformPkg.dec ArmPlatformPkg/PrePi: Drop secondary stack handling 2024-08-01 14:55:03 +00:00
ArmPlatformPkg.dsc MdePkg: MdeLibs.dsc.inc: Apply StackCheckLibNull to All Module Types 2024-11-13 21:01:46 +00:00
SecureBootDefaultKeys.fdf.inc