diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 2031703424ea14aea8cc00fab4965ef994f1fee6..bfcf36c758c22c349a50ebfddb71509b6f831266 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1256,6 +1256,7 @@ static int arm64_check_features(struct kvm_vcpu *vcpu, u64 writable_mask = rd->val; u64 limit = rd->reset(vcpu, rd); u64 mask = 0; + u32 midr = read_cpuid_id(); /* * Hidden and unallocated ID registers may not have a corresponding @@ -1276,8 +1277,11 @@ static int arm64_check_features(struct kvm_vcpu *vcpu, u64 ftr_mask; ftr_mask = arm64_ftr_mask(ftrp); - if ((ftr_mask & writable_mask) != ftr_mask) - continue; + + if (MIDR_IMPLEMENTOR(midr) != ARM_CPU_IMP_PHYTIUM) { + if ((ftr_mask & writable_mask) != ftr_mask) + continue; + } f_val = arm64_ftr_value(ftrp, val); f_lim = arm64_ftr_value(ftrp, limit);