7 #ifndef __ARM64_KVM_FIXED_CONFIG_H__
8 #define __ARM64_KVM_FIXED_CONFIG_H__
10 #include <asm/sysreg.h>
38 #define PVM_ID_AA64PFR0_ALLOW (\
39 ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_FP) | \
40 ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AdvSIMD) | \
41 ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_DIT) | \
42 ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2) | \
43 ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3) \
54 #define PVM_ID_AA64PFR0_RESTRICT_UNSIGNED (\
55 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL0), ID_AA64PFR0_EL1_ELx_64BIT_ONLY) | \
56 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL1), ID_AA64PFR0_EL1_ELx_64BIT_ONLY) | \
57 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL2), ID_AA64PFR0_EL1_ELx_64BIT_ONLY) | \
58 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL3), ID_AA64PFR0_EL1_ELx_64BIT_ONLY) | \
59 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_RAS), ID_AA64PFR0_EL1_RAS_IMP) \
67 #define PVM_ID_AA64PFR1_ALLOW (\
68 ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_BT) | \
69 ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_SSBS) \
72 #define PVM_ID_AA64PFR2_ALLOW 0ULL
81 #define PVM_ID_AA64MMFR0_ALLOW (\
82 ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_BIGEND) | \
83 ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_SNSMEM) | \
84 ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_BIGENDEL0) | \
85 ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_EXS) \
93 #define PVM_ID_AA64MMFR0_RESTRICT_UNSIGNED (\
94 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_PARANGE), ID_AA64MMFR0_EL1_PARANGE_40) | \
95 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_ASIDBITS), ID_AA64MMFR0_EL1_ASIDBITS_16) \
108 #define PVM_ID_AA64MMFR1_ALLOW (\
109 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HAFDBS) | \
110 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_VMIDBits) | \
111 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HPDS) | \
112 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_PAN) | \
113 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_SpecSEI) | \
114 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_ETS) | \
115 ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_CMOW) \
129 #define PVM_ID_AA64MMFR2_ALLOW (\
130 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_CnP) | \
131 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_UAO) | \
132 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_IESB) | \
133 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_AT) | \
134 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_IDS) | \
135 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_TTL) | \
136 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_BBM) | \
137 ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_E0PD) \
140 #define PVM_ID_AA64MMFR3_ALLOW (0ULL)
147 #define PVM_ID_AA64ZFR0_ALLOW (0ULL)
158 #define PVM_ID_AA64DFR0_ALLOW (0ULL)
159 #define PVM_ID_AA64DFR1_ALLOW (0ULL)
164 #define PVM_ID_AA64AFR0_ALLOW (0ULL)
165 #define PVM_ID_AA64AFR1_ALLOW (0ULL)
170 #define PVM_ID_AA64ISAR0_ALLOW (\
171 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_AES) | \
172 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_SHA1) | \
173 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_SHA2) | \
174 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_CRC32) | \
175 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_ATOMIC) | \
176 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_RDM) | \
177 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_SHA3) | \
178 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_SM3) | \
179 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_SM4) | \
180 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_DP) | \
181 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_FHM) | \
182 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_TS) | \
183 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_TLB) | \
184 ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_RNDR) \
188 #define PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED (\
189 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), ID_AA64ISAR1_EL1_APA_PAuth) | \
190 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), ID_AA64ISAR1_EL1_API_PAuth) \
193 #define PVM_ID_AA64ISAR2_RESTRICT_UNSIGNED (\
194 FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3), ID_AA64ISAR2_EL1_APA3_PAuth) \
197 #define PVM_ID_AA64ISAR1_ALLOW (\
198 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DPB) | \
199 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_JSCVT) | \
200 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FCMA) | \
201 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LRCPC) | \
202 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPA) | \
203 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI) | \
204 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FRINTTS) | \
205 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_SB) | \
206 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_SPECRES) | \
207 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_BF16) | \
208 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DGH) | \
209 ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_I8MM) \
212 #define PVM_ID_AA64ISAR2_ALLOW (\
213 ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_ATS1A)| \
214 ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3) | \
215 ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_MOPS) \
bool kvm_handle_pvm_sysreg(struct kvm_vcpu *vcpu, u64 *exit_code)
int kvm_check_pvm_sysreg_table(void)
bool kvm_handle_pvm_restricted(struct kvm_vcpu *vcpu, u64 *exit_code)
u64 pvm_read_id_reg(const struct kvm_vcpu *vcpu, u32 id)