diff options
author | Anton Blanchard <anton@samba.org> | 2011-11-23 15:07:18 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-11-24 22:09:59 -0500 |
commit | d8afc6fd95496204174f19af0cb39eefee0c3e8a (patch) | |
tree | a970986afbf650df5a3879f3678959608c0086cd | |
parent | 37fb9a0231ee43d42d069863bdfd567fca2b61af (diff) |
powerpc/time: Use clockevents_calc_mult_shift
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>
-rw-r--r-- | arch/powerpc/kernel/time.c | 30 |
1 files changed, 2 insertions, 28 deletions
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 5db163c9675..fae3094c2a9 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -112,8 +112,6 @@ static void decrementer_set_mode(enum clock_event_mode mode, | |||
112 | static struct clock_event_device decrementer_clockevent = { | 112 | static struct clock_event_device decrementer_clockevent = { |
113 | .name = "decrementer", | 113 | .name = "decrementer", |
114 | .rating = 200, | 114 | .rating = 200, |
115 | .shift = 0, /* To be filled in */ | ||
116 | .mult = 0, /* To be filled in */ | ||
117 | .irq = 0, | 115 | .irq = 0, |
118 | .set_next_event = decrementer_set_next_event, | 116 | .set_next_event = decrementer_set_next_event, |
119 | .set_mode = decrementer_set_mode, | 117 | .set_mode = decrementer_set_mode, |
@@ -913,31 +911,6 @@ static void decrementer_set_mode(enum clock_event_mode mode, | |||
913 | decrementer_set_next_event(DECREMENTER_MAX, dev); | 911 | decrementer_set_next_event(DECREMENTER_MAX, dev); |
914 | } | 912 | } |
915 | 913 | ||
916 | static inline uint64_t div_sc64(unsigned long ticks, unsigned long nsec, | ||
917 | int shift) | ||
918 | { | ||
919 | uint64_t tmp = ((uint64_t)ticks) << shift; | ||
920 | |||
921 | do_div(tmp, nsec); | ||
922 | return tmp; | ||
923 | } | ||
924 | |||
925 | static void __init setup_clockevent_multiplier(unsigned long hz) | ||
926 | { | ||
927 | u64 mult, shift = 32; | ||
928 | |||
929 | while (1) { | ||
930 | mult = div_sc64(hz, NSEC_PER_SEC, shift); | ||
931 | if (mult && (mult >> 32UL) == 0UL) | ||
932 | break; | ||
933 | |||
934 | shift--; | ||
935 | } | ||
936 | |||
937 | decrementer_clockevent.shift = shift; | ||
938 | decrementer_clockevent.mult = mult; | ||
939 | } | ||
940 | |||
941 | static void register_decrementer_clockevent(int cpu) | 914 | static void register_decrementer_clockevent(int cpu) |
942 | { | 915 | { |
943 | struct clock_event_device *dec = &per_cpu(decrementers, cpu).event; | 916 | struct clock_event_device *dec = &per_cpu(decrementers, cpu).event; |
@@ -955,7 +928,8 @@ static void __init init_decrementer_clockevent(void) | |||
955 | { | 928 | { |
956 | int cpu = smp_processor_id(); | 929 | int cpu = smp_processor_id(); |
957 | 930 | ||
958 | setup_clockevent_multiplier(ppc_tb_freq); | 931 | clockevents_calc_mult_shift(&decrementer_clockevent, ppc_tb_freq, 4); |
932 | |||
959 | decrementer_clockevent.max_delta_ns = | 933 | decrementer_clockevent.max_delta_ns = |
960 | clockevent_delta2ns(DECREMENTER_MAX, &decrementer_clockevent); | 934 | clockevent_delta2ns(DECREMENTER_MAX, &decrementer_clockevent); |
961 | decrementer_clockevent.min_delta_ns = | 935 | decrementer_clockevent.min_delta_ns = |