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 | ||
