[PATCH v3 04/42] arm64: sysreg: Replace HGFxTR_EL2 with HFG{R,W}TR_EL2
Joey Gouly
joey.gouly at arm.com
Tue Apr 29 07:26:56 PDT 2025
On Sat, Apr 26, 2025 at 01:27:58PM +0100, Marc Zyngier wrote:
> Treating HFGRTR_EL2 and HFGWTR_EL2 identically was a mistake.
> It makes things hard to reason about, has the potential to
> introduce bugs by giving a meaning to bits that are really reserved,
> and is in general a bad description of the architecture.
>
> Given that #defines are cheap, let's describe both registers as
> intended by the architecture, and repaint all the existing uses.
>
> Yes, this is painful.
>
> The registers themselves are generated from the JSON file in
> an automated way.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> arch/arm64/include/asm/el2_setup.h | 14 +-
> arch/arm64/include/asm/kvm_arm.h | 4 +-
> arch/arm64/include/asm/kvm_host.h | 3 +-
> arch/arm64/kvm/emulate-nested.c | 154 +++++++++----------
> arch/arm64/kvm/hyp/include/hyp/switch.h | 4 +-
> arch/arm64/kvm/hyp/vgic-v3-sr.c | 8 +-
> arch/arm64/kvm/nested.c | 42 ++---
> arch/arm64/kvm/sys_regs.c | 20 +--
> arch/arm64/tools/sysreg | 194 +++++++++++++++---------
> 9 files changed, 250 insertions(+), 193 deletions(-)
>
> diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
> index ebceaae3c749b..055e69a4184ce 100644
> --- a/arch/arm64/include/asm/el2_setup.h
> +++ b/arch/arm64/include/asm/el2_setup.h
> @@ -213,8 +213,8 @@
> cbz x1, .Lskip_debug_fgt_\@
>
> /* Disable nVHE traps of TPIDR2 and SMPRI */
> - orr x0, x0, #HFGxTR_EL2_nSMPRI_EL1_MASK
> - orr x0, x0, #HFGxTR_EL2_nTPIDR2_EL0_MASK
> + orr x0, x0, #HFGRTR_EL2_nSMPRI_EL1_MASK
> + orr x0, x0, #HFGRTR_EL2_nTPIDR2_EL0_MASK
>
> .Lskip_debug_fgt_\@:
> mrs_s x1, SYS_ID_AA64MMFR3_EL1
> @@ -222,8 +222,8 @@
> cbz x1, .Lskip_pie_fgt_\@
>
> /* Disable trapping of PIR_EL1 / PIRE0_EL1 */
> - orr x0, x0, #HFGxTR_EL2_nPIR_EL1
> - orr x0, x0, #HFGxTR_EL2_nPIRE0_EL1
> + orr x0, x0, #HFGRTR_EL2_nPIR_EL1
> + orr x0, x0, #HFGRTR_EL2_nPIRE0_EL1
>
> .Lskip_pie_fgt_\@:
> mrs_s x1, SYS_ID_AA64MMFR3_EL1
> @@ -231,7 +231,7 @@
> cbz x1, .Lskip_poe_fgt_\@
>
> /* Disable trapping of POR_EL0 */
> - orr x0, x0, #HFGxTR_EL2_nPOR_EL0
> + orr x0, x0, #HFGRTR_EL2_nPOR_EL0
>
> .Lskip_poe_fgt_\@:
> /* GCS depends on PIE so we don't check it if PIE is absent */
> @@ -240,8 +240,8 @@
> cbz x1, .Lset_fgt_\@
>
> /* Disable traps of access to GCS registers at EL0 and EL1 */
> - orr x0, x0, #HFGxTR_EL2_nGCS_EL1_MASK
> - orr x0, x0, #HFGxTR_EL2_nGCS_EL0_MASK
> + orr x0, x0, #HFGRTR_EL2_nGCS_EL1_MASK
> + orr x0, x0, #HFGRTR_EL2_nGCS_EL0_MASK
>
> .Lset_fgt_\@:
> msr_s SYS_HFGRTR_EL2, x0
We still treat them as the same here, funny that the diff cut off the next line:
msr_s SYS_HFGWTR_EL2, x0
Not saying you should do anything about it, I think it's fine.
> diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
> index f36d067967c33..43a630b940bfb 100644
> --- a/arch/arm64/include/asm/kvm_arm.h
> +++ b/arch/arm64/include/asm/kvm_arm.h
> @@ -325,7 +325,7 @@
> * Once we get to a point where the two describe the same thing, we'll
> * merge the definitions. One day.
> */
> -#define __HFGRTR_EL2_RES0 HFGxTR_EL2_RES0
> +#define __HFGRTR_EL2_RES0 HFGRTR_EL2_RES0
> #define __HFGRTR_EL2_MASK GENMASK(49, 0)
> #define __HFGRTR_EL2_nMASK ~(__HFGRTR_EL2_RES0 | __HFGRTR_EL2_MASK)
>
> @@ -336,7 +336,7 @@
> #define __HFGRTR_ONLY_MASK (BIT(46) | BIT(42) | BIT(40) | BIT(28) | \
> GENMASK(26, 25) | BIT(21) | BIT(18) | \
> GENMASK(15, 14) | GENMASK(10, 9) | BIT(2))
> -#define __HFGWTR_EL2_RES0 (__HFGRTR_EL2_RES0 | __HFGRTR_ONLY_MASK)
> +#define __HFGWTR_EL2_RES0 HFGWTR_EL2_RES0
> #define __HFGWTR_EL2_MASK (__HFGRTR_EL2_MASK & ~__HFGRTR_ONLY_MASK)
> #define __HFGWTR_EL2_nMASK ~(__HFGWTR_EL2_RES0 | __HFGWTR_EL2_MASK)
>
> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index e98cfe7855a62..7a1ef5be7efb2 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -273,7 +273,8 @@ struct kvm_sysreg_masks;
>
> enum fgt_group_id {
> __NO_FGT_GROUP__,
> - HFGxTR_GROUP,
> + HFGRTR_GROUP,
> + HFGWTR_GROUP = HFGRTR_GROUP,
I think this change makes most of the diffs using this enum more confusing, but
it also seems to algin the code more closely with HDFGWTR_EL2 and HDFGWTR_EL2.
> HDFGRTR_GROUP,
> HDFGWTR_GROUP = HDFGRTR_GROUP,
> HFGITR_GROUP,
> diff --git a/arch/arm64/kvm/emulate-nested.c b/arch/arm64/kvm/emulate-nested.c
> index 0fcfcc0478f94..efe1eb3f1bd07 100644
> --- a/arch/arm64/kvm/emulate-nested.c
> +++ b/arch/arm64/kvm/emulate-nested.c
> @@ -1296,81 +1296,81 @@ enum fg_filter_id {
>
> static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
> /* HFGRTR_EL2, HFGWTR_EL2 */
> - SR_FGT(SYS_AMAIR2_EL1, HFGxTR, nAMAIR2_EL1, 0),
> - SR_FGT(SYS_MAIR2_EL1, HFGxTR, nMAIR2_EL1, 0),
> - SR_FGT(SYS_S2POR_EL1, HFGxTR, nS2POR_EL1, 0),
> - SR_FGT(SYS_POR_EL1, HFGxTR, nPOR_EL1, 0),
> - SR_FGT(SYS_POR_EL0, HFGxTR, nPOR_EL0, 0),
> - SR_FGT(SYS_PIR_EL1, HFGxTR, nPIR_EL1, 0),
> - SR_FGT(SYS_PIRE0_EL1, HFGxTR, nPIRE0_EL1, 0),
> - SR_FGT(SYS_RCWMASK_EL1, HFGxTR, nRCWMASK_EL1, 0),
> - SR_FGT(SYS_TPIDR2_EL0, HFGxTR, nTPIDR2_EL0, 0),
> - SR_FGT(SYS_SMPRI_EL1, HFGxTR, nSMPRI_EL1, 0),
> - SR_FGT(SYS_GCSCR_EL1, HFGxTR, nGCS_EL1, 0),
> - SR_FGT(SYS_GCSPR_EL1, HFGxTR, nGCS_EL1, 0),
> - SR_FGT(SYS_GCSCRE0_EL1, HFGxTR, nGCS_EL0, 0),
> - SR_FGT(SYS_GCSPR_EL0, HFGxTR, nGCS_EL0, 0),
> - SR_FGT(SYS_ACCDATA_EL1, HFGxTR, nACCDATA_EL1, 0),
> - SR_FGT(SYS_ERXADDR_EL1, HFGxTR, ERXADDR_EL1, 1),
> - SR_FGT(SYS_ERXPFGCDN_EL1, HFGxTR, ERXPFGCDN_EL1, 1),
> - SR_FGT(SYS_ERXPFGCTL_EL1, HFGxTR, ERXPFGCTL_EL1, 1),
> - SR_FGT(SYS_ERXPFGF_EL1, HFGxTR, ERXPFGF_EL1, 1),
> - SR_FGT(SYS_ERXMISC0_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC1_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC2_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC3_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXSTATUS_EL1, HFGxTR, ERXSTATUS_EL1, 1),
> - SR_FGT(SYS_ERXCTLR_EL1, HFGxTR, ERXCTLR_EL1, 1),
> - SR_FGT(SYS_ERXFR_EL1, HFGxTR, ERXFR_EL1, 1),
> - SR_FGT(SYS_ERRSELR_EL1, HFGxTR, ERRSELR_EL1, 1),
> - SR_FGT(SYS_ERRIDR_EL1, HFGxTR, ERRIDR_EL1, 1),
> - SR_FGT(SYS_ICC_IGRPEN0_EL1, HFGxTR, ICC_IGRPENn_EL1, 1),
> - SR_FGT(SYS_ICC_IGRPEN1_EL1, HFGxTR, ICC_IGRPENn_EL1, 1),
> - SR_FGT(SYS_VBAR_EL1, HFGxTR, VBAR_EL1, 1),
> - SR_FGT(SYS_TTBR1_EL1, HFGxTR, TTBR1_EL1, 1),
> - SR_FGT(SYS_TTBR0_EL1, HFGxTR, TTBR0_EL1, 1),
> - SR_FGT(SYS_TPIDR_EL0, HFGxTR, TPIDR_EL0, 1),
> - SR_FGT(SYS_TPIDRRO_EL0, HFGxTR, TPIDRRO_EL0, 1),
> - SR_FGT(SYS_TPIDR_EL1, HFGxTR, TPIDR_EL1, 1),
> - SR_FGT(SYS_TCR_EL1, HFGxTR, TCR_EL1, 1),
> - SR_FGT(SYS_TCR2_EL1, HFGxTR, TCR_EL1, 1),
> - SR_FGT(SYS_SCXTNUM_EL0, HFGxTR, SCXTNUM_EL0, 1),
> - SR_FGT(SYS_SCXTNUM_EL1, HFGxTR, SCXTNUM_EL1, 1),
> - SR_FGT(SYS_SCTLR_EL1, HFGxTR, SCTLR_EL1, 1),
> - SR_FGT(SYS_REVIDR_EL1, HFGxTR, REVIDR_EL1, 1),
> - SR_FGT(SYS_PAR_EL1, HFGxTR, PAR_EL1, 1),
> - SR_FGT(SYS_MPIDR_EL1, HFGxTR, MPIDR_EL1, 1),
> - SR_FGT(SYS_MIDR_EL1, HFGxTR, MIDR_EL1, 1),
> - SR_FGT(SYS_MAIR_EL1, HFGxTR, MAIR_EL1, 1),
> - SR_FGT(SYS_LORSA_EL1, HFGxTR, LORSA_EL1, 1),
> - SR_FGT(SYS_LORN_EL1, HFGxTR, LORN_EL1, 1),
> - SR_FGT(SYS_LORID_EL1, HFGxTR, LORID_EL1, 1),
> - SR_FGT(SYS_LOREA_EL1, HFGxTR, LOREA_EL1, 1),
> - SR_FGT(SYS_LORC_EL1, HFGxTR, LORC_EL1, 1),
> - SR_FGT(SYS_ISR_EL1, HFGxTR, ISR_EL1, 1),
> - SR_FGT(SYS_FAR_EL1, HFGxTR, FAR_EL1, 1),
> - SR_FGT(SYS_ESR_EL1, HFGxTR, ESR_EL1, 1),
> - SR_FGT(SYS_DCZID_EL0, HFGxTR, DCZID_EL0, 1),
> - SR_FGT(SYS_CTR_EL0, HFGxTR, CTR_EL0, 1),
> - SR_FGT(SYS_CSSELR_EL1, HFGxTR, CSSELR_EL1, 1),
> - SR_FGT(SYS_CPACR_EL1, HFGxTR, CPACR_EL1, 1),
> - SR_FGT(SYS_CONTEXTIDR_EL1, HFGxTR, CONTEXTIDR_EL1, 1),
> - SR_FGT(SYS_CLIDR_EL1, HFGxTR, CLIDR_EL1, 1),
> - SR_FGT(SYS_CCSIDR_EL1, HFGxTR, CCSIDR_EL1, 1),
> - SR_FGT(SYS_APIBKEYLO_EL1, HFGxTR, APIBKey, 1),
> - SR_FGT(SYS_APIBKEYHI_EL1, HFGxTR, APIBKey, 1),
> - SR_FGT(SYS_APIAKEYLO_EL1, HFGxTR, APIAKey, 1),
> - SR_FGT(SYS_APIAKEYHI_EL1, HFGxTR, APIAKey, 1),
> - SR_FGT(SYS_APGAKEYLO_EL1, HFGxTR, APGAKey, 1),
> - SR_FGT(SYS_APGAKEYHI_EL1, HFGxTR, APGAKey, 1),
> - SR_FGT(SYS_APDBKEYLO_EL1, HFGxTR, APDBKey, 1),
> - SR_FGT(SYS_APDBKEYHI_EL1, HFGxTR, APDBKey, 1),
> - SR_FGT(SYS_APDAKEYLO_EL1, HFGxTR, APDAKey, 1),
> - SR_FGT(SYS_APDAKEYHI_EL1, HFGxTR, APDAKey, 1),
> - SR_FGT(SYS_AMAIR_EL1, HFGxTR, AMAIR_EL1, 1),
> - SR_FGT(SYS_AIDR_EL1, HFGxTR, AIDR_EL1, 1),
> - SR_FGT(SYS_AFSR1_EL1, HFGxTR, AFSR1_EL1, 1),
> - SR_FGT(SYS_AFSR0_EL1, HFGxTR, AFSR0_EL1, 1),
> + SR_FGT(SYS_AMAIR2_EL1, HFGRTR, nAMAIR2_EL1, 0),
> + SR_FGT(SYS_MAIR2_EL1, HFGRTR, nMAIR2_EL1, 0),
> + SR_FGT(SYS_S2POR_EL1, HFGRTR, nS2POR_EL1, 0),
> + SR_FGT(SYS_POR_EL1, HFGRTR, nPOR_EL1, 0),
> + SR_FGT(SYS_POR_EL0, HFGRTR, nPOR_EL0, 0),
> + SR_FGT(SYS_PIR_EL1, HFGRTR, nPIR_EL1, 0),
> + SR_FGT(SYS_PIRE0_EL1, HFGRTR, nPIRE0_EL1, 0),
> + SR_FGT(SYS_RCWMASK_EL1, HFGRTR, nRCWMASK_EL1, 0),
> + SR_FGT(SYS_TPIDR2_EL0, HFGRTR, nTPIDR2_EL0, 0),
> + SR_FGT(SYS_SMPRI_EL1, HFGRTR, nSMPRI_EL1, 0),
> + SR_FGT(SYS_GCSCR_EL1, HFGRTR, nGCS_EL1, 0),
> + SR_FGT(SYS_GCSPR_EL1, HFGRTR, nGCS_EL1, 0),
> + SR_FGT(SYS_GCSCRE0_EL1, HFGRTR, nGCS_EL0, 0),
> + SR_FGT(SYS_GCSPR_EL0, HFGRTR, nGCS_EL0, 0),
> + SR_FGT(SYS_ACCDATA_EL1, HFGRTR, nACCDATA_EL1, 0),
> + SR_FGT(SYS_ERXADDR_EL1, HFGRTR, ERXADDR_EL1, 1),
> + SR_FGT(SYS_ERXPFGCDN_EL1, HFGRTR, ERXPFGCDN_EL1, 1),
> + SR_FGT(SYS_ERXPFGCTL_EL1, HFGRTR, ERXPFGCTL_EL1, 1),
> + SR_FGT(SYS_ERXPFGF_EL1, HFGRTR, ERXPFGF_EL1, 1),
> + SR_FGT(SYS_ERXMISC0_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC1_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC2_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC3_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXSTATUS_EL1, HFGRTR, ERXSTATUS_EL1, 1),
> + SR_FGT(SYS_ERXCTLR_EL1, HFGRTR, ERXCTLR_EL1, 1),
> + SR_FGT(SYS_ERXFR_EL1, HFGRTR, ERXFR_EL1, 1),
> + SR_FGT(SYS_ERRSELR_EL1, HFGRTR, ERRSELR_EL1, 1),
> + SR_FGT(SYS_ERRIDR_EL1, HFGRTR, ERRIDR_EL1, 1),
> + SR_FGT(SYS_ICC_IGRPEN0_EL1, HFGRTR, ICC_IGRPENn_EL1, 1),
> + SR_FGT(SYS_ICC_IGRPEN1_EL1, HFGRTR, ICC_IGRPENn_EL1, 1),
> + SR_FGT(SYS_VBAR_EL1, HFGRTR, VBAR_EL1, 1),
> + SR_FGT(SYS_TTBR1_EL1, HFGRTR, TTBR1_EL1, 1),
> + SR_FGT(SYS_TTBR0_EL1, HFGRTR, TTBR0_EL1, 1),
> + SR_FGT(SYS_TPIDR_EL0, HFGRTR, TPIDR_EL0, 1),
> + SR_FGT(SYS_TPIDRRO_EL0, HFGRTR, TPIDRRO_EL0, 1),
> + SR_FGT(SYS_TPIDR_EL1, HFGRTR, TPIDR_EL1, 1),
> + SR_FGT(SYS_TCR_EL1, HFGRTR, TCR_EL1, 1),
> + SR_FGT(SYS_TCR2_EL1, HFGRTR, TCR_EL1, 1),
> + SR_FGT(SYS_SCXTNUM_EL0, HFGRTR, SCXTNUM_EL0, 1),
> + SR_FGT(SYS_SCXTNUM_EL1, HFGRTR, SCXTNUM_EL1, 1),
> + SR_FGT(SYS_SCTLR_EL1, HFGRTR, SCTLR_EL1, 1),
> + SR_FGT(SYS_REVIDR_EL1, HFGRTR, REVIDR_EL1, 1),
> + SR_FGT(SYS_PAR_EL1, HFGRTR, PAR_EL1, 1),
> + SR_FGT(SYS_MPIDR_EL1, HFGRTR, MPIDR_EL1, 1),
> + SR_FGT(SYS_MIDR_EL1, HFGRTR, MIDR_EL1, 1),
> + SR_FGT(SYS_MAIR_EL1, HFGRTR, MAIR_EL1, 1),
> + SR_FGT(SYS_LORSA_EL1, HFGRTR, LORSA_EL1, 1),
> + SR_FGT(SYS_LORN_EL1, HFGRTR, LORN_EL1, 1),
> + SR_FGT(SYS_LORID_EL1, HFGRTR, LORID_EL1, 1),
> + SR_FGT(SYS_LOREA_EL1, HFGRTR, LOREA_EL1, 1),
> + SR_FGT(SYS_LORC_EL1, HFGRTR, LORC_EL1, 1),
> + SR_FGT(SYS_ISR_EL1, HFGRTR, ISR_EL1, 1),
> + SR_FGT(SYS_FAR_EL1, HFGRTR, FAR_EL1, 1),
> + SR_FGT(SYS_ESR_EL1, HFGRTR, ESR_EL1, 1),
> + SR_FGT(SYS_DCZID_EL0, HFGRTR, DCZID_EL0, 1),
> + SR_FGT(SYS_CTR_EL0, HFGRTR, CTR_EL0, 1),
> + SR_FGT(SYS_CSSELR_EL1, HFGRTR, CSSELR_EL1, 1),
> + SR_FGT(SYS_CPACR_EL1, HFGRTR, CPACR_EL1, 1),
> + SR_FGT(SYS_CONTEXTIDR_EL1, HFGRTR, CONTEXTIDR_EL1, 1),
> + SR_FGT(SYS_CLIDR_EL1, HFGRTR, CLIDR_EL1, 1),
> + SR_FGT(SYS_CCSIDR_EL1, HFGRTR, CCSIDR_EL1, 1),
> + SR_FGT(SYS_APIBKEYLO_EL1, HFGRTR, APIBKey, 1),
> + SR_FGT(SYS_APIBKEYHI_EL1, HFGRTR, APIBKey, 1),
> + SR_FGT(SYS_APIAKEYLO_EL1, HFGRTR, APIAKey, 1),
> + SR_FGT(SYS_APIAKEYHI_EL1, HFGRTR, APIAKey, 1),
> + SR_FGT(SYS_APGAKEYLO_EL1, HFGRTR, APGAKey, 1),
> + SR_FGT(SYS_APGAKEYHI_EL1, HFGRTR, APGAKey, 1),
> + SR_FGT(SYS_APDBKEYLO_EL1, HFGRTR, APDBKey, 1),
> + SR_FGT(SYS_APDBKEYHI_EL1, HFGRTR, APDBKey, 1),
> + SR_FGT(SYS_APDAKEYLO_EL1, HFGRTR, APDAKey, 1),
> + SR_FGT(SYS_APDAKEYHI_EL1, HFGRTR, APDAKey, 1),
> + SR_FGT(SYS_AMAIR_EL1, HFGRTR, AMAIR_EL1, 1),
> + SR_FGT(SYS_AIDR_EL1, HFGRTR, AIDR_EL1, 1),
> + SR_FGT(SYS_AFSR1_EL1, HFGRTR, AFSR1_EL1, 1),
> + SR_FGT(SYS_AFSR0_EL1, HFGRTR, AFSR0_EL1, 1),
> /* HFGITR_EL2 */
> SR_FGT(OP_AT_S1E1A, HFGITR, ATS1E1A, 1),
> SR_FGT(OP_COSP_RCTX, HFGITR, COSPRCTX, 1),
> @@ -2243,7 +2243,7 @@ static bool check_fgt_bit(struct kvm_vcpu *vcpu, bool is_read,
> return false;
>
> switch ((enum fgt_group_id)tc.fgt) {
> - case HFGxTR_GROUP:
> + case HFGRTR_GROUP:
> sr = is_read ? HFGRTR_EL2 : HFGWTR_EL2;
> break;
>
> @@ -2319,7 +2319,7 @@ bool triage_sysreg_trap(struct kvm_vcpu *vcpu, int *sr_index)
> case __NO_FGT_GROUP__:
> break;
>
> - case HFGxTR_GROUP:
> + case HFGRTR_GROUP:
> if (is_read)
> val = __vcpu_sys_reg(vcpu, HFGRTR_EL2);
> else
> diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h
> index b741ea6aefa58..3150e42d79341 100644
> --- a/arch/arm64/kvm/hyp/include/hyp/switch.h
> +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
> @@ -79,7 +79,7 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
> switch(reg) { \
> case HFGRTR_EL2: \
> case HFGWTR_EL2: \
> - id = HFGxTR_GROUP; \
> + id = HFGRTR_GROUP; \
> break; \
> case HFGITR_EL2: \
> id = HFGITR_GROUP; \
> @@ -166,7 +166,7 @@ static inline void __activate_traps_hfgxtr(struct kvm_vcpu *vcpu)
> update_fgt_traps(hctxt, vcpu, kvm, HFGRTR_EL2);
> update_fgt_traps_cs(hctxt, vcpu, kvm, HFGWTR_EL2, 0,
> cpus_have_final_cap(ARM64_WORKAROUND_AMPERE_AC03_CPU_38) ?
> - HFGxTR_EL2_TCR_EL1_MASK : 0);
> + HFGWTR_EL2_TCR_EL1_MASK : 0);
> update_fgt_traps(hctxt, vcpu, kvm, HFGITR_EL2);
> update_fgt_traps(hctxt, vcpu, kvm, HDFGRTR_EL2);
> update_fgt_traps(hctxt, vcpu, kvm, HDFGWTR_EL2);
> diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c
> index ed363aa3027e5..f38565e28a23a 100644
> --- a/arch/arm64/kvm/hyp/vgic-v3-sr.c
> +++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c
> @@ -1052,11 +1052,11 @@ static bool __vgic_v3_check_trap_forwarding(struct kvm_vcpu *vcpu,
> switch (sysreg) {
> case SYS_ICC_IGRPEN0_EL1:
> if (is_read &&
> - (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGRTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> if (!is_read &&
> - (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGWTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> fallthrough;
> @@ -1073,11 +1073,11 @@ static bool __vgic_v3_check_trap_forwarding(struct kvm_vcpu *vcpu,
>
> case SYS_ICC_IGRPEN1_EL1:
> if (is_read &&
> - (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGRTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> if (!is_read &&
> - (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGWTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> fallthrough;
> diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
> index 4a3fc11f7ecf3..16f6129c70b59 100644
> --- a/arch/arm64/kvm/nested.c
> +++ b/arch/arm64/kvm/nested.c
> @@ -1103,40 +1103,40 @@ int kvm_init_nv_sysregs(struct kvm_vcpu *vcpu)
> res0 = res1 = 0;
> if (!(kvm_vcpu_has_feature(kvm, KVM_ARM_VCPU_PTRAUTH_ADDRESS) &&
> kvm_vcpu_has_feature(kvm, KVM_ARM_VCPU_PTRAUTH_GENERIC)))
> - res0 |= (HFGxTR_EL2_APDAKey | HFGxTR_EL2_APDBKey |
> - HFGxTR_EL2_APGAKey | HFGxTR_EL2_APIAKey |
> - HFGxTR_EL2_APIBKey);
> + res0 |= (HFGRTR_EL2_APDAKey | HFGRTR_EL2_APDBKey |
> + HFGRTR_EL2_APGAKey | HFGRTR_EL2_APIAKey |
> + HFGRTR_EL2_APIBKey);
> if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, LO, IMP))
> - res0 |= (HFGxTR_EL2_LORC_EL1 | HFGxTR_EL2_LOREA_EL1 |
> - HFGxTR_EL2_LORID_EL1 | HFGxTR_EL2_LORN_EL1 |
> - HFGxTR_EL2_LORSA_EL1);
> + res0 |= (HFGRTR_EL2_LORC_EL1 | HFGRTR_EL2_LOREA_EL1 |
> + HFGRTR_EL2_LORID_EL1 | HFGRTR_EL2_LORN_EL1 |
> + HFGRTR_EL2_LORSA_EL1);
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, CSV2, CSV2_2) &&
> !kvm_has_feat(kvm, ID_AA64PFR1_EL1, CSV2_frac, CSV2_1p2))
> - res0 |= (HFGxTR_EL2_SCXTNUM_EL1 | HFGxTR_EL2_SCXTNUM_EL0);
> + res0 |= (HFGRTR_EL2_SCXTNUM_EL1 | HFGRTR_EL2_SCXTNUM_EL0);
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, GIC, IMP))
> - res0 |= HFGxTR_EL2_ICC_IGRPENn_EL1;
> + res0 |= HFGRTR_EL2_ICC_IGRPENn_EL1;
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP))
> - res0 |= (HFGxTR_EL2_ERRIDR_EL1 | HFGxTR_EL2_ERRSELR_EL1 |
> - HFGxTR_EL2_ERXFR_EL1 | HFGxTR_EL2_ERXCTLR_EL1 |
> - HFGxTR_EL2_ERXSTATUS_EL1 | HFGxTR_EL2_ERXMISCn_EL1 |
> - HFGxTR_EL2_ERXPFGF_EL1 | HFGxTR_EL2_ERXPFGCTL_EL1 |
> - HFGxTR_EL2_ERXPFGCDN_EL1 | HFGxTR_EL2_ERXADDR_EL1);
> + res0 |= (HFGRTR_EL2_ERRIDR_EL1 | HFGRTR_EL2_ERRSELR_EL1 |
> + HFGRTR_EL2_ERXFR_EL1 | HFGRTR_EL2_ERXCTLR_EL1 |
> + HFGRTR_EL2_ERXSTATUS_EL1 | HFGRTR_EL2_ERXMISCn_EL1 |
> + HFGRTR_EL2_ERXPFGF_EL1 | HFGRTR_EL2_ERXPFGCTL_EL1 |
> + HFGRTR_EL2_ERXPFGCDN_EL1 | HFGRTR_EL2_ERXADDR_EL1);
> if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_ACCDATA))
> - res0 |= HFGxTR_EL2_nACCDATA_EL1;
> + res0 |= HFGRTR_EL2_nACCDATA_EL1;
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, GCS, IMP))
> - res0 |= (HFGxTR_EL2_nGCS_EL0 | HFGxTR_EL2_nGCS_EL1);
> + res0 |= (HFGRTR_EL2_nGCS_EL0 | HFGRTR_EL2_nGCS_EL1);
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, SME, IMP))
> - res0 |= (HFGxTR_EL2_nSMPRI_EL1 | HFGxTR_EL2_nTPIDR2_EL0);
> + res0 |= (HFGRTR_EL2_nSMPRI_EL1 | HFGRTR_EL2_nTPIDR2_EL0);
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, THE, IMP))
> - res0 |= HFGxTR_EL2_nRCWMASK_EL1;
> + res0 |= HFGRTR_EL2_nRCWMASK_EL1;
> if (!kvm_has_s1pie(kvm))
> - res0 |= (HFGxTR_EL2_nPIRE0_EL1 | HFGxTR_EL2_nPIR_EL1);
> + res0 |= (HFGRTR_EL2_nPIRE0_EL1 | HFGRTR_EL2_nPIR_EL1);
> if (!kvm_has_s1poe(kvm))
> - res0 |= (HFGxTR_EL2_nPOR_EL0 | HFGxTR_EL2_nPOR_EL1);
> + res0 |= (HFGRTR_EL2_nPOR_EL0 | HFGRTR_EL2_nPOR_EL1);
> if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, S2POE, IMP))
> - res0 |= HFGxTR_EL2_nS2POR_EL1;
> + res0 |= HFGRTR_EL2_nS2POR_EL1;
> if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, AIE, IMP))
> - res0 |= (HFGxTR_EL2_nMAIR2_EL1 | HFGxTR_EL2_nAMAIR2_EL1);
> + res0 |= (HFGRTR_EL2_nMAIR2_EL1 | HFGRTR_EL2_nAMAIR2_EL1);
> set_sysreg_masks(kvm, HFGRTR_EL2, res0 | __HFGRTR_EL2_RES0, res1);
> set_sysreg_masks(kvm, HFGWTR_EL2, res0 | __HFGWTR_EL2_RES0, res1);
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 005ad28f73068..6e01b06bedcae 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -5147,12 +5147,12 @@ void kvm_calculate_traps(struct kvm_vcpu *vcpu)
> if (test_bit(KVM_ARCH_FLAG_FGU_INITIALIZED, &kvm->arch.flags))
> goto out;
>
> - kvm->arch.fgu[HFGxTR_GROUP] = (HFGxTR_EL2_nAMAIR2_EL1 |
> - HFGxTR_EL2_nMAIR2_EL1 |
> - HFGxTR_EL2_nS2POR_EL1 |
> - HFGxTR_EL2_nACCDATA_EL1 |
> - HFGxTR_EL2_nSMPRI_EL1_MASK |
> - HFGxTR_EL2_nTPIDR2_EL0_MASK);
> + kvm->arch.fgu[HFGRTR_GROUP] = (HFGRTR_EL2_nAMAIR2_EL1 |
> + HFGRTR_EL2_nMAIR2_EL1 |
> + HFGRTR_EL2_nS2POR_EL1 |
> + HFGRTR_EL2_nACCDATA_EL1 |
> + HFGRTR_EL2_nSMPRI_EL1_MASK |
> + HFGRTR_EL2_nTPIDR2_EL0_MASK);
For example here you see HFGRTR_GROUP but it actually also applies to HFGWTR_GROUP.
>
> if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, OS))
> kvm->arch.fgu[HFGITR_GROUP] |= (HFGITR_EL2_TLBIRVAALE1OS|
> @@ -5188,12 +5188,12 @@ void kvm_calculate_traps(struct kvm_vcpu *vcpu)
> HFGITR_EL2_ATS1E1WP);
>
> if (!kvm_has_s1pie(kvm))
> - kvm->arch.fgu[HFGxTR_GROUP] |= (HFGxTR_EL2_nPIRE0_EL1 |
> - HFGxTR_EL2_nPIR_EL1);
> + kvm->arch.fgu[HFGRTR_GROUP] |= (HFGRTR_EL2_nPIRE0_EL1 |
> + HFGRTR_EL2_nPIR_EL1);
>
> if (!kvm_has_s1poe(kvm))
> - kvm->arch.fgu[HFGxTR_GROUP] |= (HFGxTR_EL2_nPOR_EL1 |
> - HFGxTR_EL2_nPOR_EL0);
> + kvm->arch.fgu[HFGRTR_GROUP] |= (HFGRTR_EL2_nPOR_EL1 |
> + HFGRTR_EL2_nPOR_EL0);
>
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, AMU, IMP))
> kvm->arch.fgu[HAFGRTR_GROUP] |= ~(HAFGRTR_EL2_RES0 |
> diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg
> index 7f39c8f7f036d..e21e881314a33 100644
> --- a/arch/arm64/tools/sysreg
> +++ b/arch/arm64/tools/sysreg
> @@ -2464,73 +2464,6 @@ UnsignedEnum 2:0 F8S1
> EndEnum
> EndSysreg
>
> -SysregFields HFGxTR_EL2
> -Field 63 nAMAIR2_EL1
> -Field 62 nMAIR2_EL1
> -Field 61 nS2POR_EL1
> -Field 60 nPOR_EL1
> -Field 59 nPOR_EL0
> -Field 58 nPIR_EL1
> -Field 57 nPIRE0_EL1
> -Field 56 nRCWMASK_EL1
> -Field 55 nTPIDR2_EL0
> -Field 54 nSMPRI_EL1
> -Field 53 nGCS_EL1
> -Field 52 nGCS_EL0
> -Res0 51
> -Field 50 nACCDATA_EL1
> -Field 49 ERXADDR_EL1
> -Field 48 ERXPFGCDN_EL1
> -Field 47 ERXPFGCTL_EL1
> -Field 46 ERXPFGF_EL1
> -Field 45 ERXMISCn_EL1
> -Field 44 ERXSTATUS_EL1
> -Field 43 ERXCTLR_EL1
> -Field 42 ERXFR_EL1
> -Field 41 ERRSELR_EL1
> -Field 40 ERRIDR_EL1
> -Field 39 ICC_IGRPENn_EL1
> -Field 38 VBAR_EL1
> -Field 37 TTBR1_EL1
> -Field 36 TTBR0_EL1
> -Field 35 TPIDR_EL0
> -Field 34 TPIDRRO_EL0
> -Field 33 TPIDR_EL1
> -Field 32 TCR_EL1
> -Field 31 SCXTNUM_EL0
> -Field 30 SCXTNUM_EL1
> -Field 29 SCTLR_EL1
> -Field 28 REVIDR_EL1
> -Field 27 PAR_EL1
> -Field 26 MPIDR_EL1
> -Field 25 MIDR_EL1
> -Field 24 MAIR_EL1
> -Field 23 LORSA_EL1
> -Field 22 LORN_EL1
> -Field 21 LORID_EL1
> -Field 20 LOREA_EL1
> -Field 19 LORC_EL1
> -Field 18 ISR_EL1
> -Field 17 FAR_EL1
> -Field 16 ESR_EL1
> -Field 15 DCZID_EL0
> -Field 14 CTR_EL0
> -Field 13 CSSELR_EL1
> -Field 12 CPACR_EL1
> -Field 11 CONTEXTIDR_EL1
> -Field 10 CLIDR_EL1
> -Field 9 CCSIDR_EL1
> -Field 8 APIBKey
> -Field 7 APIAKey
> -Field 6 APGAKey
> -Field 5 APDBKey
> -Field 4 APDAKey
> -Field 3 AMAIR_EL1
> -Field 2 AIDR_EL1
> -Field 1 AFSR1_EL1
> -Field 0 AFSR0_EL1
> -EndSysregFields
> -
> Sysreg HCR_EL2 3 4 1 1 0
> Field 63:60 TWEDEL
> Field 59 TWEDEn
> @@ -2635,11 +2568,134 @@ Field 4:0 HPMN
> EndSysreg
>
> Sysreg HFGRTR_EL2 3 4 1 1 4
> -Fields HFGxTR_EL2
> +Field 63 nAMAIR2_EL1
> +Field 62 nMAIR2_EL1
> +Field 61 nS2POR_EL1
> +Field 60 nPOR_EL1
> +Field 59 nPOR_EL0
> +Field 58 nPIR_EL1
> +Field 57 nPIRE0_EL1
> +Field 56 nRCWMASK_EL1
> +Field 55 nTPIDR2_EL0
> +Field 54 nSMPRI_EL1
> +Field 53 nGCS_EL1
> +Field 52 nGCS_EL0
> +Res0 51
> +Field 50 nACCDATA_EL1
> +Field 49 ERXADDR_EL1
> +Field 48 ERXPFGCDN_EL1
> +Field 47 ERXPFGCTL_EL1
> +Field 46 ERXPFGF_EL1
> +Field 45 ERXMISCn_EL1
> +Field 44 ERXSTATUS_EL1
> +Field 43 ERXCTLR_EL1
> +Field 42 ERXFR_EL1
> +Field 41 ERRSELR_EL1
> +Field 40 ERRIDR_EL1
> +Field 39 ICC_IGRPENn_EL1
> +Field 38 VBAR_EL1
> +Field 37 TTBR1_EL1
> +Field 36 TTBR0_EL1
> +Field 35 TPIDR_EL0
> +Field 34 TPIDRRO_EL0
> +Field 33 TPIDR_EL1
> +Field 32 TCR_EL1
> +Field 31 SCXTNUM_EL0
> +Field 30 SCXTNUM_EL1
> +Field 29 SCTLR_EL1
> +Field 28 REVIDR_EL1
> +Field 27 PAR_EL1
> +Field 26 MPIDR_EL1
> +Field 25 MIDR_EL1
> +Field 24 MAIR_EL1
> +Field 23 LORSA_EL1
> +Field 22 LORN_EL1
> +Field 21 LORID_EL1
> +Field 20 LOREA_EL1
> +Field 19 LORC_EL1
> +Field 18 ISR_EL1
> +Field 17 FAR_EL1
> +Field 16 ESR_EL1
> +Field 15 DCZID_EL0
> +Field 14 CTR_EL0
> +Field 13 CSSELR_EL1
> +Field 12 CPACR_EL1
> +Field 11 CONTEXTIDR_EL1
> +Field 10 CLIDR_EL1
> +Field 9 CCSIDR_EL1
> +Field 8 APIBKey
> +Field 7 APIAKey
> +Field 6 APGAKey
> +Field 5 APDBKey
> +Field 4 APDAKey
> +Field 3 AMAIR_EL1
> +Field 2 AIDR_EL1
> +Field 1 AFSR1_EL1
> +Field 0 AFSR0_EL1
> EndSysreg
>
> Sysreg HFGWTR_EL2 3 4 1 1 5
> -Fields HFGxTR_EL2
> +Field 63 nAMAIR2_EL1
> +Field 62 nMAIR2_EL1
> +Field 61 nS2POR_EL1
> +Field 60 nPOR_EL1
> +Field 59 nPOR_EL0
> +Field 58 nPIR_EL1
> +Field 57 nPIRE0_EL1
> +Field 56 nRCWMASK_EL1
> +Field 55 nTPIDR2_EL0
> +Field 54 nSMPRI_EL1
> +Field 53 nGCS_EL1
> +Field 52 nGCS_EL0
> +Res0 51
> +Field 50 nACCDATA_EL1
> +Field 49 ERXADDR_EL1
> +Field 48 ERXPFGCDN_EL1
> +Field 47 ERXPFGCTL_EL1
> +Res0 46
> +Field 45 ERXMISCn_EL1
> +Field 44 ERXSTATUS_EL1
> +Field 43 ERXCTLR_EL1
> +Res0 42
> +Field 41 ERRSELR_EL1
> +Res0 40
> +Field 39 ICC_IGRPENn_EL1
> +Field 38 VBAR_EL1
> +Field 37 TTBR1_EL1
> +Field 36 TTBR0_EL1
> +Field 35 TPIDR_EL0
> +Field 34 TPIDRRO_EL0
> +Field 33 TPIDR_EL1
> +Field 32 TCR_EL1
> +Field 31 SCXTNUM_EL0
> +Field 30 SCXTNUM_EL1
> +Field 29 SCTLR_EL1
> +Res0 28
> +Field 27 PAR_EL1
> +Res0 26:25
> +Field 24 MAIR_EL1
> +Field 23 LORSA_EL1
> +Field 22 LORN_EL1
> +Res0 21
> +Field 20 LOREA_EL1
> +Field 19 LORC_EL1
> +Res0 18
> +Field 17 FAR_EL1
> +Field 16 ESR_EL1
> +Res0 15:14
> +Field 13 CSSELR_EL1
> +Field 12 CPACR_EL1
> +Field 11 CONTEXTIDR_EL1
> +Res0 10:9
> +Field 8 APIBKey
> +Field 7 APIAKey
> +Field 6 APGAKey
> +Field 5 APDBKey
> +Field 4 APDAKey
> +Field 3 AMAIR_EL1
> +Res0 2
> +Field 1 AFSR1_EL1
> +Field 0 AFSR0_EL1
> EndSysreg
>
> Sysreg HFGITR_EL2 3 4 1 1 6
> --
> 2.39.2
>
More information about the linux-arm-kernel
mailing list