[PATCH 1/2] ARM: move SPEAr to use common mult/shift calculation code

Linus Walleij linus.ml.walleij at gmail.com
Mon Jul 12 04:00:51 EDT 2010


Ping on this patch, if it looks OK then please ACK it.

Yours,
Linus Walleij

2010/5/28 Linus Walleij <linus.walleij at stericsson.com>:
> Since the infrastructure for determining shift/mult values from a
> clock rate and a minimum programmable rate is now in the kernel,
> lets remove this custom code.
>
> Cc: Viresh KUMAR <viresh.kumar at st.com>
> Signed-off-by: Linus Walleij <linus.walleij at stericsson.com>
> ---
> Viresh: I cannot test this change, but I have compiled it against
> spear600_defconfig. You'd have to test it and Acked-by: it before
> I do anything else with it. Try to think about what a minimum range
> would be for the generic SPEAr platform...
> ---
>  arch/arm/plat-spear/time.c |   47 ++++++-------------------------------------
>  1 files changed, 7 insertions(+), 40 deletions(-)
>
> diff --git a/arch/arm/plat-spear/time.c b/arch/arm/plat-spear/time.c
> index a1025d3..ab21165 100644
> --- a/arch/arm/plat-spear/time.c
> +++ b/arch/arm/plat-spear/time.c
> @@ -58,6 +58,11 @@
>
>  #define INT_STATUS             0x1
>
> +/*
> + * Minimum clocksource/clockevent timer range in seconds
> + */
> +#define SPEAR_MIN_RANGE 4
> +
>  static __iomem void *gpt_base;
>  static struct clk *gpt_clk;
>
> @@ -66,44 +71,6 @@ static void clockevent_set_mode(enum clock_event_mode mode,
>  static int clockevent_next_event(unsigned long evt,
>                                 struct clock_event_device *clk_event_dev);
>
> -/*
> - * Following clocksource_set_clock and clockevent_set_clock picked
> - * from arch/mips/kernel/time.c
> - */
> -
> -void __init clocksource_set_clock(struct clocksource *cs, unsigned int clock)
> -{
> -       u64 temp;
> -       u32 shift;
> -
> -       /* Find a shift value */
> -       for (shift = 32; shift > 0; shift--) {
> -               temp = (u64) NSEC_PER_SEC << shift;
> -               do_div(temp, clock);
> -               if ((temp >> 32) == 0)
> -                       break;
> -       }
> -       cs->shift = shift;
> -       cs->mult = (u32) temp;
> -}
> -
> -void __init clockevent_set_clock(struct clock_event_device *cd,
> -       unsigned int clock)
> -{
> -       u64 temp;
> -       u32 shift;
> -
> -       /* Find a shift value */
> -       for (shift = 32; shift > 0; shift--) {
> -               temp = (u64) clock << shift;
> -               do_div(temp, NSEC_PER_SEC);
> -               if ((temp >> 32) == 0)
> -                       break;
> -       }
> -       cd->shift = shift;
> -       cd->mult = (u32) temp;
> -}
> -
>  static cycle_t clocksource_read_cycles(struct clocksource *cs)
>  {
>        return (cycle_t) readw(gpt_base + COUNT(CLKSRC));
> @@ -138,7 +105,7 @@ static void spear_clocksource_init(void)
>        val |= CTRL_ENABLE ;
>        writew(val, gpt_base + CR(CLKSRC));
>
> -       clocksource_set_clock(&clksrc, tick_rate);
> +       clocksource_calc_mult_shift(&clksrc, tick_rate, SPEAR_MIN_RANGE);
>
>        /* register the clocksource */
>        clocksource_register(&clksrc);
> @@ -233,7 +200,7 @@ static void __init spear_clockevent_init(void)
>        tick_rate = clk_get_rate(gpt_clk);
>        tick_rate >>= CTRL_PRESCALER16;
>
> -       clockevent_set_clock(&clkevt, tick_rate);
> +       clockevents_calc_mult_shift(&clkevt, tick_rate, SPEAR_MIN_RANGE);
>
>        clkevt.max_delta_ns = clockevent_delta2ns(0xfff0,
>                        &clkevt);
> --
> 1.6.3.3
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>



More information about the linux-arm-kernel mailing list