|
@@ -98,8 +98,10 @@ static void activate_traps_vhe(struct kvm_vcpu *vcpu)
|
|
val = read_sysreg(cpacr_el1);
|
|
val = read_sysreg(cpacr_el1);
|
|
val |= CPACR_EL1_TTA;
|
|
val |= CPACR_EL1_TTA;
|
|
val &= ~CPACR_EL1_ZEN;
|
|
val &= ~CPACR_EL1_ZEN;
|
|
- if (!update_fp_enabled(vcpu))
|
|
|
|
|
|
+ if (!update_fp_enabled(vcpu)) {
|
|
val &= ~CPACR_EL1_FPEN;
|
|
val &= ~CPACR_EL1_FPEN;
|
|
|
|
+ __activate_traps_fpsimd32(vcpu);
|
|
|
|
+ }
|
|
|
|
|
|
write_sysreg(val, cpacr_el1);
|
|
write_sysreg(val, cpacr_el1);
|
|
|
|
|
|
@@ -114,8 +116,10 @@ static void __hyp_text __activate_traps_nvhe(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
val = CPTR_EL2_DEFAULT;
|
|
val = CPTR_EL2_DEFAULT;
|
|
val |= CPTR_EL2_TTA | CPTR_EL2_TZ;
|
|
val |= CPTR_EL2_TTA | CPTR_EL2_TZ;
|
|
- if (!update_fp_enabled(vcpu))
|
|
|
|
|
|
+ if (!update_fp_enabled(vcpu)) {
|
|
val |= CPTR_EL2_TFP;
|
|
val |= CPTR_EL2_TFP;
|
|
|
|
+ __activate_traps_fpsimd32(vcpu);
|
|
|
|
+ }
|
|
|
|
|
|
write_sysreg(val, cptr_el2);
|
|
write_sysreg(val, cptr_el2);
|
|
}
|
|
}
|
|
@@ -129,7 +133,6 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
|
|
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
|
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
|
write_sysreg_s(vcpu->arch.vsesr_el2, SYS_VSESR_EL2);
|
|
write_sysreg_s(vcpu->arch.vsesr_el2, SYS_VSESR_EL2);
|
|
|
|
|
|
- __activate_traps_fpsimd32(vcpu);
|
|
|
|
if (has_vhe())
|
|
if (has_vhe())
|
|
activate_traps_vhe(vcpu);
|
|
activate_traps_vhe(vcpu);
|
|
else
|
|
else
|