diff options
-rw-r--r-- | arch/arm/include/asm/arch_timer.h | 12 | ||||
-rw-r--r-- | arch/arm/kernel/arch_timer.c | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h index 75975d9efd3f..729f6d98df86 100644 --- a/arch/arm/include/asm/arch_timer.h +++ b/arch/arm/include/asm/arch_timer.h | |||
@@ -106,6 +106,18 @@ static inline u64 arch_counter_get_cntvct(void) | |||
106 | asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (cval)); | 106 | asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (cval)); |
107 | return cval; | 107 | return cval; |
108 | } | 108 | } |
109 | |||
110 | static inline void __cpuinit arch_counter_set_user_access(void) | ||
111 | { | ||
112 | u32 cntkctl; | ||
113 | |||
114 | asm volatile("mrc p15, 0, %0, c14, c1, 0" : "=r" (cntkctl)); | ||
115 | |||
116 | /* disable user access to everything */ | ||
117 | cntkctl &= ~((3 << 8) | (7 << 0)); | ||
118 | |||
119 | asm volatile("mcr p15, 0, %0, c14, c1, 0" : : "r" (cntkctl)); | ||
120 | } | ||
109 | #else | 121 | #else |
110 | static inline int arch_timer_of_register(void) | 122 | static inline int arch_timer_of_register(void) |
111 | { | 123 | { |
diff --git a/arch/arm/kernel/arch_timer.c b/arch/arm/kernel/arch_timer.c index c8dfec052f2d..94f503394c5c 100644 --- a/arch/arm/kernel/arch_timer.c +++ b/arch/arm/kernel/arch_timer.c | |||
@@ -155,6 +155,8 @@ static int __cpuinit arch_timer_setup(struct clock_event_device *clk) | |||
155 | enable_percpu_irq(arch_timer_ppi[PHYS_NONSECURE_PPI], 0); | 155 | enable_percpu_irq(arch_timer_ppi[PHYS_NONSECURE_PPI], 0); |
156 | } | 156 | } |
157 | 157 | ||
158 | arch_counter_set_user_access(); | ||
159 | |||
158 | return 0; | 160 | return 0; |
159 | } | 161 | } |
160 | 162 | ||