Commit cdec12ae authored by Paul Mackerras's avatar Paul Mackerras

[POWERPC] Make clockevents work on PPC601 processors

In testing the new clocksource and clockevent code on a PPC601
processor, I discovered that the clockevent multiplier value for the
decrementer clockevent was overflowing.  Because the RTCL register in
the 601 effectively counts at 1GHz (it doesn't actually, but it
increases by 128 every 128ns), and the shift value was 32, that meant
the multiplier value had to be 2^32, which won't fit in an unsigned
long on 32-bit.  The same problem would arise on any platform where
the timebase frequency was 1GHz or more (not that we actually have any
such machines today).

This fixes it by reducing the shift value to 16.  Doing the
calculations with a resolution of 2^-16 nanoseconds (15 femtoseconds)
should be quite adequate.  :)
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent d968014b
...@@ -108,7 +108,7 @@ static void decrementer_set_mode(enum clock_event_mode mode, ...@@ -108,7 +108,7 @@ static void decrementer_set_mode(enum clock_event_mode mode,
static struct clock_event_device decrementer_clockevent = { static struct clock_event_device decrementer_clockevent = {
.name = "decrementer", .name = "decrementer",
.rating = 200, .rating = 200,
.shift = 32, .shift = 16,
.mult = 0, /* To be filled in */ .mult = 0, /* To be filled in */
.irq = 0, .irq = 0,
.set_next_event = decrementer_set_next_event, .set_next_event = decrementer_set_next_event,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment