|
@@ -27,42 +27,34 @@ void __hyp_text __kvm_timer_set_cntvoff(u32 cntvoff_low, u32 cntvoff_high)
|
|
write_sysreg(cntvoff, cntvoff_el2);
|
|
write_sysreg(cntvoff, cntvoff_el2);
|
|
}
|
|
}
|
|
|
|
|
|
-void __hyp_text enable_el1_phys_timer_access(void)
|
|
|
|
-{
|
|
|
|
- u64 val;
|
|
|
|
-
|
|
|
|
- /* Allow physical timer/counter access for the host */
|
|
|
|
- val = read_sysreg(cnthctl_el2);
|
|
|
|
- val |= CNTHCTL_EL1PCTEN | CNTHCTL_EL1PCEN;
|
|
|
|
- write_sysreg(val, cnthctl_el2);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void __hyp_text disable_el1_phys_timer_access(void)
|
|
|
|
-{
|
|
|
|
- u64 val;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Disallow physical timer access for the guest
|
|
|
|
- * Physical counter access is allowed
|
|
|
|
- */
|
|
|
|
- val = read_sysreg(cnthctl_el2);
|
|
|
|
- val &= ~CNTHCTL_EL1PCEN;
|
|
|
|
- val |= CNTHCTL_EL1PCTEN;
|
|
|
|
- write_sysreg(val, cnthctl_el2);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void __hyp_text __timer_disable_traps(struct kvm_vcpu *vcpu)
|
|
void __hyp_text __timer_disable_traps(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
/*
|
|
/*
|
|
* We don't need to do this for VHE since the host kernel runs in EL2
|
|
* We don't need to do this for VHE since the host kernel runs in EL2
|
|
* with HCR_EL2.TGE ==1, which makes those bits have no impact.
|
|
* with HCR_EL2.TGE ==1, which makes those bits have no impact.
|
|
*/
|
|
*/
|
|
- if (!has_vhe())
|
|
|
|
- enable_el1_phys_timer_access();
|
|
|
|
|
|
+ if (!has_vhe()) {
|
|
|
|
+ u64 val;
|
|
|
|
+
|
|
|
|
+ /* Allow physical timer/counter access for the host */
|
|
|
|
+ val = read_sysreg(cnthctl_el2);
|
|
|
|
+ val |= CNTHCTL_EL1PCTEN | CNTHCTL_EL1PCEN;
|
|
|
|
+ write_sysreg(val, cnthctl_el2);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void __hyp_text __timer_enable_traps(struct kvm_vcpu *vcpu)
|
|
void __hyp_text __timer_enable_traps(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
- if (!has_vhe())
|
|
|
|
- disable_el1_phys_timer_access();
|
|
|
|
|
|
+ if (!has_vhe()) {
|
|
|
|
+ u64 val;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Disallow physical timer access for the guest
|
|
|
|
+ * Physical counter access is allowed
|
|
|
|
+ */
|
|
|
|
+ val = read_sysreg(cnthctl_el2);
|
|
|
|
+ val &= ~CNTHCTL_EL1PCEN;
|
|
|
|
+ val |= CNTHCTL_EL1PCTEN;
|
|
|
|
+ write_sysreg(val, cnthctl_el2);
|
|
|
|
+ }
|
|
}
|
|
}
|