diff options
Diffstat (limited to 'arch/arm/kvm/coproc.c')
-rw-r--r-- | arch/arm/kvm/coproc.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c index e8bd288fd5be..14915c78bd99 100644 --- a/arch/arm/kvm/coproc.c +++ b/arch/arm/kvm/coproc.c | |||
@@ -293,15 +293,16 @@ static bool access_cntp_tval(struct kvm_vcpu *vcpu, | |||
293 | const struct coproc_params *p, | 293 | const struct coproc_params *p, |
294 | const struct coproc_reg *r) | 294 | const struct coproc_reg *r) |
295 | { | 295 | { |
296 | u64 now = kvm_phys_timer_read(); | 296 | u32 val; |
297 | u64 val; | ||
298 | 297 | ||
299 | if (p->is_write) { | 298 | if (p->is_write) { |
300 | val = *vcpu_reg(vcpu, p->Rt1); | 299 | val = *vcpu_reg(vcpu, p->Rt1); |
301 | kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val + now); | 300 | kvm_arm_timer_write_sysreg(vcpu, |
301 | TIMER_PTIMER, TIMER_REG_TVAL, val); | ||
302 | } else { | 302 | } else { |
303 | val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL); | 303 | val = kvm_arm_timer_read_sysreg(vcpu, |
304 | *vcpu_reg(vcpu, p->Rt1) = val - now; | 304 | TIMER_PTIMER, TIMER_REG_TVAL); |
305 | *vcpu_reg(vcpu, p->Rt1) = val; | ||
305 | } | 306 | } |
306 | 307 | ||
307 | return true; | 308 | return true; |
@@ -315,9 +316,11 @@ static bool access_cntp_ctl(struct kvm_vcpu *vcpu, | |||
315 | 316 | ||
316 | if (p->is_write) { | 317 | if (p->is_write) { |
317 | val = *vcpu_reg(vcpu, p->Rt1); | 318 | val = *vcpu_reg(vcpu, p->Rt1); |
318 | kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CTL, val); | 319 | kvm_arm_timer_write_sysreg(vcpu, |
320 | TIMER_PTIMER, TIMER_REG_CTL, val); | ||
319 | } else { | 321 | } else { |
320 | val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CTL); | 322 | val = kvm_arm_timer_read_sysreg(vcpu, |
323 | TIMER_PTIMER, TIMER_REG_CTL); | ||
321 | *vcpu_reg(vcpu, p->Rt1) = val; | 324 | *vcpu_reg(vcpu, p->Rt1) = val; |
322 | } | 325 | } |
323 | 326 | ||
@@ -333,9 +336,11 @@ static bool access_cntp_cval(struct kvm_vcpu *vcpu, | |||
333 | if (p->is_write) { | 336 | if (p->is_write) { |
334 | val = (u64)*vcpu_reg(vcpu, p->Rt2) << 32; | 337 | val = (u64)*vcpu_reg(vcpu, p->Rt2) << 32; |
335 | val |= *vcpu_reg(vcpu, p->Rt1); | 338 | val |= *vcpu_reg(vcpu, p->Rt1); |
336 | kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val); | 339 | kvm_arm_timer_write_sysreg(vcpu, |
340 | TIMER_PTIMER, TIMER_REG_CVAL, val); | ||
337 | } else { | 341 | } else { |
338 | val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL); | 342 | val = kvm_arm_timer_read_sysreg(vcpu, |
343 | TIMER_PTIMER, TIMER_REG_CVAL); | ||
339 | *vcpu_reg(vcpu, p->Rt1) = val; | 344 | *vcpu_reg(vcpu, p->Rt1) = val; |
340 | *vcpu_reg(vcpu, p->Rt2) = val >> 32; | 345 | *vcpu_reg(vcpu, p->Rt2) = val >> 32; |
341 | } | 346 | } |