lkml.org 
[lkml]   [2013]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 1/6] ARM/ARM64: arch_timer: add macros for bits in control register
    On 08/13/2013 07:29 PM, Sudeep KarkadaNagesha wrote:
    > From: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
    >
    > Add macros to describe the bitfields in the ARM architected timer
    > control register to make code easy to understand.
    >
    > Cc: Catalin Marinas <catalin.marinas@arm.com>
    > Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    > Reviewed-by: Will Deacon <will.deacon@arm.com>
    > Signed-off-by: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
    > ---
    > 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 e406d57..9ef74da 100644
    > --- a/arch/arm/include/asm/arch_timer.h
    > +++ b/arch/arm/include/asm/arch_timer.h
    > @@ -95,8 +95,13 @@ static inline void 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 98abd47..00b09d0 100644
    > --- a/arch/arm64/include/asm/arch_timer.h
    > +++ b/arch/arm64/include/asm/arch_timer.h
    > @@ -101,12 +101,16 @@ static inline void 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));
    > }

    Before doing those changes, I suggest you kill include/asm/arch_timer.h
    header file and move the functions directly in the arm_arch_timer.c as
    they are only used by it.

    > diff --git a/include/clocksource/arm_arch_timer.h b/include/clocksource/arm_arch_timer.h
    > index c463ce9..551f7e9 100644
    > --- a/include/clocksource/arm_arch_timer.h
    > +++ b/include/clocksource/arm_arch_timer.h
    > @@ -29,6 +29,14 @@
    > #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);
    >


    --
    <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

    Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
    <http://twitter.com/#!/linaroorg> Twitter |
    <http://www.linaro.org/linaro-blog/> Blog

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2013-08-14 11:21    [W:4.053 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site