| From 319ec37d4a51fa86e25b5185b17ce9c3d4840caa Mon Sep 17 00:00:00 2001 |
| From: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> |
| Date: Tue, 13 Aug 2013 13:43:26 +0100 |
| Subject: ARM/ARM64: arch_timer: add macros for bits in control register |
| |
| Add macros to describe the bitfields in the ARM architected timer |
| control register to make code easy to understand. |
| |
| Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Reviewed-by: Will Deacon <will.deacon@arm.com> |
| Acked-by: Catalin Marinas <catalin.marinas@arm.com> |
| Acked-by: Olof Johansson <olof@lixom.net> |
| Signed-off-by: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> |
| (cherry picked from commit 28061758dc83df445a05af347b5ce55ccd968c03) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| arch/arm/include/asm/arch_timer.h | 9 +++++++-- |
| arch/arm64/include/asm/arch_timer.h | 12 ++++++++---- |
| include/clocksource/arm_arch_timer.h | 8 ++++++++ |
| 3 files changed, 23 insertions(+), 6 deletions(-) |
| |
| diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h |
| index 556094689724..c78c4cbd329e 100644 |
| --- a/arch/arm/include/asm/arch_timer.h |
| +++ b/arch/arm/include/asm/arch_timer.h |
| @@ -93,8 +93,13 @@ static inline void __cpuinit arch_counter_set_user_access(void) |
| |
| asm volatile("mrc p15, 0, %0, c14, c1, 0" : "=r" (cntkctl)); |
| |
| - /* disable user access to everything */ |
| - cntkctl &= ~((3 << 8) | (7 << 0)); |
| + /* Disable user access to both physical/virtual counters/timers */ |
| + /* Also disable virtual event stream */ |
| + cntkctl &= ~(ARCH_TIMER_USR_PT_ACCESS_EN |
| + | ARCH_TIMER_USR_VT_ACCESS_EN |
| + | ARCH_TIMER_VIRT_EVT_EN |
| + | ARCH_TIMER_USR_VCT_ACCESS_EN |
| + | ARCH_TIMER_USR_PCT_ACCESS_EN); |
| |
| asm volatile("mcr p15, 0, %0, c14, c1, 0" : : "r" (cntkctl)); |
| } |
| diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h |
| index 7181e777c2c5..aaee5f73adae 100644 |
| --- a/arch/arm64/include/asm/arch_timer.h |
| +++ b/arch/arm64/include/asm/arch_timer.h |
| @@ -96,12 +96,16 @@ static inline void __cpuinit arch_counter_set_user_access(void) |
| { |
| u32 cntkctl; |
| |
| - /* Disable user access to the timers and the physical counter. */ |
| asm volatile("mrs %0, cntkctl_el1" : "=r" (cntkctl)); |
| - cntkctl &= ~((3 << 8) | (1 << 0)); |
| |
| - /* Enable user access to the virtual counter and frequency. */ |
| - cntkctl |= (1 << 1); |
| + /* Disable user access to the timers and the physical counter */ |
| + cntkctl &= ~(ARCH_TIMER_USR_PT_ACCESS_EN |
| + | ARCH_TIMER_USR_VT_ACCESS_EN |
| + | ARCH_TIMER_USR_PCT_ACCESS_EN); |
| + |
| + /* Enable user access to the virtual counter */ |
| + cntkctl |= ARCH_TIMER_USR_VCT_ACCESS_EN; |
| + |
| asm volatile("msr cntkctl_el1, %0" : : "r" (cntkctl)); |
| } |
| |
| diff --git a/include/clocksource/arm_arch_timer.h b/include/clocksource/arm_arch_timer.h |
| index f3da817b9b8e..e6bc74f1119c 100644 |
| --- a/include/clocksource/arm_arch_timer.h |
| +++ b/include/clocksource/arm_arch_timer.h |
| @@ -31,6 +31,14 @@ enum arch_timer_reg { |
| #define ARCH_TIMER_PHYS_ACCESS 0 |
| #define ARCH_TIMER_VIRT_ACCESS 1 |
| |
| +#define ARCH_TIMER_USR_PCT_ACCESS_EN (1 << 0) /* physical counter */ |
| +#define ARCH_TIMER_USR_VCT_ACCESS_EN (1 << 1) /* virtual counter */ |
| +#define ARCH_TIMER_VIRT_EVT_EN (1 << 2) |
| +#define ARCH_TIMER_EVT_TRIGGER_SHIFT (4) |
| +#define ARCH_TIMER_EVT_TRIGGER_MASK (0xF << ARCH_TIMER_EVT_TRIGGER_SHIFT) |
| +#define ARCH_TIMER_USR_VT_ACCESS_EN (1 << 8) /* virtual timer registers */ |
| +#define ARCH_TIMER_USR_PT_ACCESS_EN (1 << 9) /* physical timer registers */ |
| + |
| #ifdef CONFIG_ARM_ARCH_TIMER |
| |
| extern u32 arch_timer_get_rate(void); |
| -- |
| 1.8.5.rc3 |
| |