diff --git a/arch/arm64/include/asm/arm_generic.h b/arch/arm64/include/asm/arm_generic.h index e4cec9d30f275b501af9fe73437c222340246489..df2aeb82f74e5b57cdb5dddf38b86d812b7415b1 100644 --- a/arch/arm64/include/asm/arm_generic.h +++ b/arch/arm64/include/asm/arm_generic.h @@ -70,12 +70,12 @@ static inline void __cpuinit arch_counter_enable_user_access(void) { u32 cntkctl; - /* Disable user access to the timers and the virtual counter. */ + /* Disable user access to the timers and the physical counter. */ asm volatile("mrs %0, cntkctl_el1" : "=r" (cntkctl)); - cntkctl &= ~((3 << 8) | (1 << 1)); + cntkctl &= ~((3 << 8) | (1 << 0)); - /* Enable user access to the physical counter and frequency. */ - cntkctl |= 1; + /* Enable user access to the virtual counter and frequency. */ + cntkctl |= (1 << 1); asm volatile("msr cntkctl_el1, %0" : : "r" (cntkctl)); } diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index a2f02b63eae9e2f5361aa0ee0200dd6fe71e87e4..90dec55b17a2bf32cc0ebd8db8f00e1230d26a8d 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -158,6 +158,7 @@ ENTRY(el2_setup) mrs x0, cnthctl_el2 orr x0, x0, #3 // Enable EL1 physical timers msr cnthctl_el2, x0 + msr cntvoff_el2, xzr // Clear virtual offset /* Populate ID registers. */ mrs x0, midr_el1 diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index 6681f4032260cc0ab7aa3cf9ea204b85b96ff902..8bf658d974f947da714eb5e7a6812552173fe140 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S @@ -220,9 +220,9 @@ ENTRY(__do_get_tspec) ldp w11, w12, [vdso_data, #VDSO_CS_MULT] seqcnt_read w9 - /* Read the physical counter. */ + /* Read the virtual counter. */ isb - mrs x15, cntpct_el0 + mrs x15, cntvct_el0 /* Calculate cycle delta and convert to ns. */ sub x10, x15, x10 diff --git a/drivers/clocksource/arm_generic.c b/drivers/clocksource/arm_generic.c index c4d9f9566c649ae3d8623493901e5b9302f59f66..df5d7e8e5b8472aef58e2946250e36a943c4d863 100644 --- a/drivers/clocksource/arm_generic.c +++ b/drivers/clocksource/arm_generic.c @@ -109,7 +109,7 @@ static void __cpuinit arch_timer_setup(struct clock_event_device *clk) enable_percpu_irq(clk->irq, 0); - /* Ensure the physical counter is visible to userspace for the vDSO. */ + /* Ensure the virtual counter is visible to userspace for the vDSO. */ arch_counter_enable_user_access(); }