diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index 6a3dddaddd94dcbbf2734b05e8bdee2f5eedb0f4..31573cc565b50455948c6df0af7f965b7c8c4e40 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c @@ -1292,6 +1292,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 @@ -1312,8 +1313,10 @@ 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);