[PATCH v3 6/7] ARM: smp_twd: add clock api support
Colin Cross
ccross at android.com
Mon Mar 14 22:35:36 EDT 2011
On Tue, Mar 8, 2011 at 3:34 PM, Rob Herring <robherring2 at gmail.com> wrote:
> From: Rob Herring <rob.herring at calxeda.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 calxeda.com>
> ---
> v3: Save struct clk pointer for later use (cpufreq).
>
> arch/arm/include/asm/smp_twd.h | 1 +
> arch/arm/kernel/smp_twd.c | 14 ++++++++++++++
> 2 files changed, 15 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/include/asm/smp_twd.h b/arch/arm/include/asm/smp_twd.h
> index fed9981..6b0f591 100644
> --- a/arch/arm/include/asm/smp_twd.h
> +++ b/arch/arm/include/asm/smp_twd.h
> @@ -24,5 +24,6 @@ extern void __iomem *twd_base;
>
> int twd_timer_ack(void);
> void twd_timer_setup(struct clock_event_device *);
> +void twd_timer_init(void __iomem *base);
>
> #endif
> diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
> index 60636f4..cce1171 100644
> --- a/arch/arm/kernel/smp_twd.c
> +++ b/arch/arm/kernel/smp_twd.c
> @@ -8,6 +8,8 @@
> * it under the terms of the GNU General Public License version 2 as
> * published by the Free Software Foundation.
> */
> +#include <linux/clk.h>
> +#include <linux/err.h>
> #include <linux/init.h>
> #include <linux/kernel.h>
> #include <linux/delay.h>
> @@ -24,6 +26,7 @@
> /* set up by the platform code */
> void __iomem *twd_base;
>
> +static struct clk *twd_clk;
> static unsigned long twd_timer_rate;
>
> static void twd_set_mode(enum clock_event_mode mode,
> @@ -142,3 +145,14 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk)
>
> clockevents_register_device(clk);
> }
> +
> +void __init twd_timer_init(void __iomem *base)
> +{
> + twd_clk = clk_get_sys("smp_twd", NULL);
> + if (!IS_ERR(twd_clk))
> + twd_timer_rate = clk_get_rate(twd_clk);
> + else
> + twd_clk = NULL;
> +
> + twd_base = base;
> +}
Why not leave the old twd_base intitialization and put the clock stuff
in twd_timer_setup?
Would it make sense to drop twd_calibrate_rate entirely and require a twd clock?
More information about the linux-arm-kernel
mailing list