target/arm: Handle cpreg registration for missing EL
authorRichard Henderson <richard.henderson@linaro.org>
Fri, 6 May 2022 18:02:19 +0000 (13:02 -0500)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 9 May 2022 10:47:53 +0000 (11:47 +0100)
commit696ba3771894f7a0b233e634dc9d401330568e35
tree1ede6e622bad476a6c37648944e5cb1ca9da69b0
parent14d5addcaedae2e8666aeda71510e1d4be5bb50d
target/arm: Handle cpreg registration for missing EL

More gracefully handle cpregs when EL2 and/or EL3 are missing.
If the reg is entirely inaccessible, do not register it at all.
If the reg is for EL2, and EL3 is present but EL2 is not,
either discard, squash to res0, const, or keep unchanged.

Per rule RJFFP, mark the 4 aarch32 hypervisor access registers
with ARM_CP_EL3_NO_EL2_KEEP, and mark all of the EL2 address
translation and tlb invalidation "regs" ARM_CP_EL3_NO_EL2_UNDEF.
Mark the 2 virtualization processor id regs ARM_CP_EL3_NO_EL2_C_NZ.

This will simplify cpreg registration for conditional arm features.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20220506180242.216785-2-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
target/arm/cpregs.h
target/arm/helper.c