Hi,

On 04/12/2014 09:15 PM, Ian Campbell wrote:
> Marek Vasut requested that this be removed during upstream review.
> 
> Since the inverting behaviour is a bit subtle I have decided to make this a
> function rather than simply inlining the readl() at each of the users.
> 
> Signed-off-by: Ian Campbell <[email protected]>

Thanks, commited and pushed (on top of my SPL memory layout fixes).

Regards,

Hans


> ---
>  arch/arm/cpu/armv7/sunxi/timer.c | 28 ++++++++++++++++++----------
>  1 file changed, 18 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/sunxi/timer.c 
> b/arch/arm/cpu/armv7/sunxi/timer.c
> index d0d9953..ca951a2 100644
> --- a/arch/arm/cpu/armv7/sunxi/timer.c
> +++ b/arch/arm/cpu/armv7/sunxi/timer.c
> @@ -28,18 +28,26 @@ DECLARE_GLOBAL_DATA_PTR;
>  
>  #define TIMER_NUM            0       /* we use timer 0 */
>  
> -static struct sunxi_timer *timer_base =
> -     &((struct sunxi_timer_reg *)SUNXI_TIMER_BASE)->timer[TIMER_NUM];
> -
> -/* macro to read the 32 bit timer: since it decrements, we invert read value 
> */
> -#define READ_TIMER() (~readl(&timer_base->val))
> +/* read the 32-bit timer */
> +static ulong read_timer(void)
> +{
> +     struct sunxi_timer_reg *timers =
> +             (struct sunxi_timer_reg *)SUNXI_TIMER_BASE;
> +     struct sunxi_timer *timer = &timers->timer[TIMER_NUM];
> +     /* The hardware timer counts down, therefore we invert to
> +      * produce an incrementing timer. */
> +     return ~readl(&timer->val);
> +}
>  
>  /* init timer register */
>  int timer_init(void)
>  {
> -     writel(TIMER_LOAD_VAL, &timer_base->inter);
> +     struct sunxi_timer_reg *timers =
> +             (struct sunxi_timer_reg *)SUNXI_TIMER_BASE;
> +     struct sunxi_timer *timer = &timers->timer[TIMER_NUM];
> +     writel(TIMER_LOAD_VAL, &timer->inter);
>       writel(TIMER_MODE | TIMER_DIV | TIMER_SRC | TIMER_RELOAD | TIMER_EN,
> -            &timer_base->ctl);
> +            &timer->ctl);
>  
>       return 0;
>  }
> @@ -53,7 +61,7 @@ ulong get_timer(ulong base)
>  ulong get_timer_masked(void)
>  {
>       /* current tick value */
> -     ulong now = TICKS_TO_HZ(READ_TIMER());
> +     ulong now = TICKS_TO_HZ(read_timer());
>  
>       if (now >= gd->arch.lastinc)    /* normal (non rollover) */
>               gd->arch.tbl += (now - gd->arch.lastinc);
> @@ -71,10 +79,10 @@ ulong get_timer_masked(void)
>  void __udelay(unsigned long usec)
>  {
>       long tmo = USEC_TO_COUNT(usec);
> -     ulong now, last = READ_TIMER();
> +     ulong now, last = read_timer();
>  
>       while (tmo > 0) {
> -             now = READ_TIMER();
> +             now = read_timer();
>               if (now > last) /* normal (non rollover) */
>                       tmo -= now - last;
>               else            /* rollover */
> 

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to