Skip to content

Commit 3a90b6f

Browse files
Marc Zyngieroupton
authored andcommitted
KVM: arm64: selftests: get-reg-list: Add base EL2 registers
Add the EL2 registers and the eventual dependencies, effectively doubling the number of test vectors. Oh well. Signed-off-by: Marc Zyngier <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Oliver Upton <[email protected]>
1 parent 9a40718 commit 3a90b6f

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

tools/testing/selftests/kvm/arm64/get-reg-list.c

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,27 @@ struct feature_id_reg {
4141

4242
static struct feature_id_reg feat_id_regs[] = {
4343
REG_FEAT(TCR2_EL1, ID_AA64MMFR3_EL1, TCRX, IMP),
44+
REG_FEAT(TCR2_EL2, ID_AA64MMFR3_EL1, TCRX, IMP),
4445
REG_FEAT(PIRE0_EL1, ID_AA64MMFR3_EL1, S1PIE, IMP),
46+
REG_FEAT(PIRE0_EL2, ID_AA64MMFR3_EL1, S1PIE, IMP),
4547
REG_FEAT(PIR_EL1, ID_AA64MMFR3_EL1, S1PIE, IMP),
48+
REG_FEAT(PIR_EL2, ID_AA64MMFR3_EL1, S1PIE, IMP),
4649
REG_FEAT(POR_EL1, ID_AA64MMFR3_EL1, S1POE, IMP),
4750
REG_FEAT(POR_EL0, ID_AA64MMFR3_EL1, S1POE, IMP),
51+
REG_FEAT(POR_EL2, ID_AA64MMFR3_EL1, S1POE, IMP),
52+
REG_FEAT(HCRX_EL2, ID_AA64MMFR1_EL1, HCX, IMP),
53+
REG_FEAT(HFGRTR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
54+
REG_FEAT(HFGWTR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
55+
REG_FEAT(HFGITR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
56+
REG_FEAT(HDFGRTR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
57+
REG_FEAT(HDFGWTR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
58+
REG_FEAT(HAFGRTR_EL2, ID_AA64MMFR0_EL1, FGT, IMP),
59+
REG_FEAT(HFGRTR2_EL2, ID_AA64MMFR0_EL1, FGT, FGT2),
60+
REG_FEAT(HFGWTR2_EL2, ID_AA64MMFR0_EL1, FGT, FGT2),
61+
REG_FEAT(HFGITR2_EL2, ID_AA64MMFR0_EL1, FGT, FGT2),
62+
REG_FEAT(HDFGRTR2_EL2, ID_AA64MMFR0_EL1, FGT, FGT2),
63+
REG_FEAT(HDFGWTR2_EL2, ID_AA64MMFR0_EL1, FGT, FGT2),
64+
REG_FEAT(ZCR_EL2, ID_AA64PFR0_EL1, SVE, IMP),
4865
};
4966

5067
bool filter_reg(__u64 reg)
@@ -678,6 +695,60 @@ static __u64 pauth_generic_regs[] = {
678695
ARM64_SYS_REG(3, 0, 2, 3, 1), /* APGAKEYHI_EL1 */
679696
};
680697

698+
static __u64 el2_regs[] = {
699+
SYS_REG(VPIDR_EL2),
700+
SYS_REG(VMPIDR_EL2),
701+
SYS_REG(SCTLR_EL2),
702+
SYS_REG(ACTLR_EL2),
703+
SYS_REG(HCR_EL2),
704+
SYS_REG(MDCR_EL2),
705+
SYS_REG(CPTR_EL2),
706+
SYS_REG(HSTR_EL2),
707+
SYS_REG(HFGRTR_EL2),
708+
SYS_REG(HFGWTR_EL2),
709+
SYS_REG(HFGITR_EL2),
710+
SYS_REG(HACR_EL2),
711+
SYS_REG(ZCR_EL2),
712+
SYS_REG(HCRX_EL2),
713+
SYS_REG(TTBR0_EL2),
714+
SYS_REG(TTBR1_EL2),
715+
SYS_REG(TCR_EL2),
716+
SYS_REG(TCR2_EL2),
717+
SYS_REG(VTTBR_EL2),
718+
SYS_REG(VTCR_EL2),
719+
SYS_REG(VNCR_EL2),
720+
SYS_REG(HDFGRTR2_EL2),
721+
SYS_REG(HDFGWTR2_EL2),
722+
SYS_REG(HFGRTR2_EL2),
723+
SYS_REG(HFGWTR2_EL2),
724+
SYS_REG(HDFGRTR_EL2),
725+
SYS_REG(HDFGWTR_EL2),
726+
SYS_REG(HAFGRTR_EL2),
727+
SYS_REG(HFGITR2_EL2),
728+
SYS_REG(SPSR_EL2),
729+
SYS_REG(ELR_EL2),
730+
SYS_REG(AFSR0_EL2),
731+
SYS_REG(AFSR1_EL2),
732+
SYS_REG(ESR_EL2),
733+
SYS_REG(FAR_EL2),
734+
SYS_REG(HPFAR_EL2),
735+
SYS_REG(MAIR_EL2),
736+
SYS_REG(PIRE0_EL2),
737+
SYS_REG(PIR_EL2),
738+
SYS_REG(POR_EL2),
739+
SYS_REG(AMAIR_EL2),
740+
SYS_REG(VBAR_EL2),
741+
SYS_REG(CONTEXTIDR_EL2),
742+
SYS_REG(TPIDR_EL2),
743+
SYS_REG(CNTVOFF_EL2),
744+
SYS_REG(CNTHCTL_EL2),
745+
SYS_REG(CNTHP_CTL_EL2),
746+
SYS_REG(CNTHP_CVAL_EL2),
747+
SYS_REG(CNTHV_CTL_EL2),
748+
SYS_REG(CNTHV_CVAL_EL2),
749+
SYS_REG(SP_EL2),
750+
};
751+
681752
#define BASE_SUBLIST \
682753
{ "base", .regs = base_regs, .regs_n = ARRAY_SIZE(base_regs), }
683754
#define VREGS_SUBLIST \
@@ -704,6 +775,14 @@ static __u64 pauth_generic_regs[] = {
704775
.regs = pauth_generic_regs, \
705776
.regs_n = ARRAY_SIZE(pauth_generic_regs), \
706777
}
778+
#define EL2_SUBLIST \
779+
{ \
780+
.name = "EL2", \
781+
.capability = KVM_CAP_ARM_EL2, \
782+
.feature = KVM_ARM_VCPU_HAS_EL2, \
783+
.regs = el2_regs, \
784+
.regs_n = ARRAY_SIZE(el2_regs), \
785+
}
707786

708787
static struct vcpu_reg_list vregs_config = {
709788
.sublists = {
@@ -753,12 +832,78 @@ static struct vcpu_reg_list pauth_pmu_config = {
753832
},
754833
};
755834

835+
static struct vcpu_reg_list el2_vregs_config = {
836+
.sublists = {
837+
BASE_SUBLIST,
838+
EL2_SUBLIST,
839+
VREGS_SUBLIST,
840+
{0},
841+
},
842+
};
843+
844+
static struct vcpu_reg_list el2_vregs_pmu_config = {
845+
.sublists = {
846+
BASE_SUBLIST,
847+
EL2_SUBLIST,
848+
VREGS_SUBLIST,
849+
PMU_SUBLIST,
850+
{0},
851+
},
852+
};
853+
854+
static struct vcpu_reg_list el2_sve_config = {
855+
.sublists = {
856+
BASE_SUBLIST,
857+
EL2_SUBLIST,
858+
SVE_SUBLIST,
859+
{0},
860+
},
861+
};
862+
863+
static struct vcpu_reg_list el2_sve_pmu_config = {
864+
.sublists = {
865+
BASE_SUBLIST,
866+
EL2_SUBLIST,
867+
SVE_SUBLIST,
868+
PMU_SUBLIST,
869+
{0},
870+
},
871+
};
872+
873+
static struct vcpu_reg_list el2_pauth_config = {
874+
.sublists = {
875+
BASE_SUBLIST,
876+
EL2_SUBLIST,
877+
VREGS_SUBLIST,
878+
PAUTH_SUBLIST,
879+
{0},
880+
},
881+
};
882+
883+
static struct vcpu_reg_list el2_pauth_pmu_config = {
884+
.sublists = {
885+
BASE_SUBLIST,
886+
EL2_SUBLIST,
887+
VREGS_SUBLIST,
888+
PAUTH_SUBLIST,
889+
PMU_SUBLIST,
890+
{0},
891+
},
892+
};
893+
756894
struct vcpu_reg_list *vcpu_configs[] = {
757895
&vregs_config,
758896
&vregs_pmu_config,
759897
&sve_config,
760898
&sve_pmu_config,
761899
&pauth_config,
762900
&pauth_pmu_config,
901+
902+
&el2_vregs_config,
903+
&el2_vregs_pmu_config,
904+
&el2_sve_config,
905+
&el2_sve_pmu_config,
906+
&el2_pauth_config,
907+
&el2_pauth_pmu_config,
763908
};
764909
int vcpu_configs_n = ARRAY_SIZE(vcpu_configs);

0 commit comments

Comments
 (0)