[PATCH 3/3] ARM: twd_smp: add clock api support

Colin Cross ccross at google.com
Thu Sep 30 20:49:26 EDT 2010


On Thu, Sep 30, 2010 at 3:49 PM, Rob Herring <robherring2 at gmail.com> wrote:
> From: Rob Herring <rob.herring at smooth-stone.com>
>
> The private timer freq is currently dynamically detected
> using jiffies count to determine the rate. This method adds
> a delay to boot-up, so use the clock api instead to get the
> clock rate.
>
> Signed-off-by: Rob Herring <rob.herring at smooth-stone.com>
> ---
>  arch/arm/include/asm/smp_twd.h |    2 ++
>  arch/arm/kernel/smp_twd.c      |    7 +++++++
>  2 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/include/asm/smp_twd.h b/arch/arm/include/asm/smp_twd.h
> index 634f357..bafad52 100644
> --- a/arch/arm/include/asm/smp_twd.h
> +++ b/arch/arm/include/asm/smp_twd.h
> @@ -19,11 +19,13 @@
>  #define TWD_TIMER_CONTROL_IT_ENABLE    (1 << 2)
>
>  struct clock_event_device;
> +struct clk;
>
>  extern void __iomem *twd_base;
>
>  void twd_timer_stop(void);
>  int twd_timer_ack(void);
>  void twd_timer_setup(struct clock_event_device *);
> +void twd_timer_init(void __iomem *base, struct clk *clk);
>
>  #endif
> diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
> index 35882fb..1a3c959 100644
> --- a/arch/arm/kernel/smp_twd.c
> +++ b/arch/arm/kernel/smp_twd.c
> @@ -17,6 +17,7 @@
>  #include <linux/clockchips.h>
>  #include <linux/irq.h>
>  #include <linux/io.h>
> +#include <linux/clk.h>
>
>  #include <asm/smp_twd.h>
>  #include <asm/hardware/gic.h>
> @@ -151,6 +152,12 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk)
>        clockevents_register_device(clk);
>  }
>
> +void __init twd_timer_init(void __iomem *base, struct clk *clk)
> +{
> +       twd_base = base;
> +       twd_timer_rate = clk_get_rate(clk);
> +}
> +
>  #ifdef CONFIG_HOTPLUG_CPU
>  /*
>  * take a local timer down

The local timers run off the PERIPHCLK in the CPU, which is specified
as the CPU clock divided by an implementation defined integer >= 2.
If you take the divider value as a parameter to twd_timer_init, the
clock that is passed in can be the cpu's clock.



More information about the linux-arm-kernel mailing list