powerpc/time: Use clockevents_calc_mult_shift
authorAnton Blanchard <anton@samba.org>
Wed, 23 Nov 2011 20:07:18 +0000 (20:07 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 25 Nov 2011 03:09:59 +0000 (14:09 +1100)
We can use clockevents_calc_mult_shift instead of doing all
the work ourselves.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/time.c

index 5db163c96751f8d3979a8757f25958cf91264c39..fae3094c2a9a50bd13b561395d342f41fe82890c 100644 (file)
@@ -112,8 +112,6 @@ static void decrementer_set_mode(enum clock_event_mode mode,
 static struct clock_event_device decrementer_clockevent = {
        .name           = "decrementer",
        .rating         = 200,
-       .shift          = 0,    /* To be filled in */
-       .mult           = 0,    /* To be filled in */
        .irq            = 0,
        .set_next_event = decrementer_set_next_event,
        .set_mode       = decrementer_set_mode,
@@ -913,31 +911,6 @@ static void decrementer_set_mode(enum clock_event_mode mode,
                decrementer_set_next_event(DECREMENTER_MAX, dev);
 }
 
-static inline uint64_t div_sc64(unsigned long ticks, unsigned long nsec,
-                               int shift)
-{
-       uint64_t tmp = ((uint64_t)ticks) << shift;
-
-       do_div(tmp, nsec);
-       return tmp;
-}
-
-static void __init setup_clockevent_multiplier(unsigned long hz)
-{
-       u64 mult, shift = 32;
-
-       while (1) {
-               mult = div_sc64(hz, NSEC_PER_SEC, shift);
-               if (mult && (mult >> 32UL) == 0UL)
-                       break;
-
-               shift--;
-       }
-
-       decrementer_clockevent.shift = shift;
-       decrementer_clockevent.mult = mult;
-}
-
 static void register_decrementer_clockevent(int cpu)
 {
        struct clock_event_device *dec = &per_cpu(decrementers, cpu).event;
@@ -955,7 +928,8 @@ static void __init init_decrementer_clockevent(void)
 {
        int cpu = smp_processor_id();
 
-       setup_clockevent_multiplier(ppc_tb_freq);
+       clockevents_calc_mult_shift(&decrementer_clockevent, ppc_tb_freq, 4);
+
        decrementer_clockevent.max_delta_ns =
                clockevent_delta2ns(DECREMENTER_MAX, &decrementer_clockevent);
        decrementer_clockevent.min_delta_ns =