lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 13 Jun 2017 15:40:46 +0930
From:   Andrew Jeffery <andrew@...id.au>
To:     Linus Walleij <linus.walleij@...aro.org>,
        Daniel Lezcano <daniel.lezcano@...aro.org>,
        Thomas Gleixner <tglx@...utronix.de>,
        Joel Stanley <joel@....id.au>,
        Jonas Jensen <jonas.jensen@...il.com>
Cc:     Janos Laube <janos.dev@...il.com>,
        Paulius Zaleckas <paulius.zaleckas@...il.com>,
        linux-arm-kernel@...ts.infradead.org,
        Hans Ulli Kroll <ulli.kroll@...glemail.com>,
        Florian Fainelli <f.fainelli@...il.com>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] drivers/clocksource/fttmr010: Implement delay timer

On Sun, 2017-06-11 at 23:26 +0200, Linus Walleij wrote:
> This timer is often used on the ARM architecture, so as with so
> many siblings, we can implement delay timers, removing the need
> for the system to calibrate jiffys at boot, and potentially
> handling CPU frequency scaling on targets.
> 
> We cannot just protect the Kconfig with a "depends on ARM" because
> it is already known that different architectures are using Faraday
> IP blocks, so it is better to make things open-ended and use

Seems like we're missing the end of the sentence?

> 
> Result on boot dmesg:
> 
> Switching to timer-based delay loop, resolution 40n
> Calibrating delay loop (skipped), value calculated using
>   timer frequency.. 50.00 BogoMIPS (lpj=250000)
> 
> This is accurately the timer frequency, 250MHz on the APB
> bus.
> 
> > Cc: Andrew Jeffery <andrew@...id.au>
> > Cc: Joel Stanley <joel@....id.au>
> > Cc: Jonas Jensen <jonas.jensen@...il.com>
> Signed-off-by: Linus Walleij <linus.walleij@...aro.org>

Tried both patches on an AST2500, everything worked as suggested.

Tested-by: Andrew Jeffery <andrew@...id.au>

> ---
>  drivers/clocksource/timer-fttmr010.c | 35 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 34 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/clocksource/timer-fttmr010.c b/drivers/clocksource/timer-fttmr010.c
> index 5e82469995cb..0074d89cd2ce 100644
> --- a/drivers/clocksource/timer-fttmr010.c
> +++ b/drivers/clocksource/timer-fttmr010.c
> @@ -17,6 +17,7 @@
>  #include <linux/clk.h>
>  #include <linux/slab.h>
>  #include <linux/bitops.h>
> +#include <linux/delay.h>
>  
>  /*
>   * Register definitions for the timers
> @@ -81,9 +82,15 @@ struct fttmr010 {
> >  	bool count_down;
> >  	u32 t1_enable_val;
> >  	struct clock_event_device clkevt;
> +#ifdef CONFIG_ARM
> > +	struct delay_timer delay_timer;
> +#endif
>  };
>  
> -/* A local singleton used by sched_clock, which is stateless */
> +/*
> + * A local singleton used by sched_clock and delay timer reads, which are
> + * fast and stateless
> + */
>  static struct fttmr010 *local_fttmr;
>  
>  static inline struct fttmr010 *to_fttmr010(struct clock_event_device *evt)
> @@ -101,6 +108,20 @@ static u64 notrace fttmr010_read_sched_clock_down(void)
> >  	return ~readl(local_fttmr->base + TIMER2_COUNT);
>  }
>  
> +#ifdef CONFIG_ARM
> +
> +static unsigned long fttmr010_read_current_timer_up(void)
> +{
> > +	return readl(local_fttmr->base + TIMER2_COUNT);
> +}
> +
> +static unsigned long fttmr010_read_current_timer_down(void)
> +{
> > +	return ~readl(local_fttmr->base + TIMER2_COUNT);
> +}
> +
> +#endif
> +
>  static int fttmr010_timer_set_next_event(unsigned long cycles,
> >  				       struct clock_event_device *evt)
>  {
> @@ -349,6 +370,18 @@ static int __init fttmr010_timer_init(struct device_node *np)
> >  					fttmr010->tick_rate,
> >  					1, 0xffffffff);
>  
> +#ifdef CONFIG_ARM
> > +	/* Also use this timer for delays */
> > +	if (fttmr010->count_down)
> > +		fttmr010->delay_timer.read_current_timer =
> > +			fttmr010_read_current_timer_down;
> > +	else
> > +		fttmr010->delay_timer.read_current_timer =
> > +			fttmr010_read_current_timer_up;
> > +	fttmr010->delay_timer.freq = fttmr010->tick_rate;
> > +	register_current_timer_delay(&fttmr010->delay_timer);
> +#endif
> +
> >  	return 0;
>  
>  out_unmap:
Download attachment "signature.asc" of type "application/pgp-signature" (802 bytes)

Powered by blists - more mailing lists