diff options
author | Michal Simek <monstr@monstr.eu> | 2010-06-10 10:04:05 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2010-08-04 04:22:39 -0400 |
commit | c8f77436d11190d0d9379f4fb2c6f22a155c8d8e (patch) | |
tree | 60a6b13d6d0f1dc86178400bc8ee789b4099fcde | |
parent | 615748aefa61066e8e5ec9d27521f37037b4c1a7 (diff) |
microblaze: Decrease time shifting values
Lower shifting values ensure that shifted 32bit counter
value doesn't exceed 64bit cycle variable too fast.
Signed-off-by: Michal Simek <monstr@monstr.eu>
-rw-r--r-- | arch/microblaze/kernel/timer.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c index 22e296eb871b..b1380ae93ae1 100644 --- a/arch/microblaze/kernel/timer.c +++ b/arch/microblaze/kernel/timer.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <asm/prom.h> | 28 | #include <asm/prom.h> |
29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
30 | #include <asm/system.h> | 30 | #include <asm/system.h> |
31 | #include <linux/cnt32_to_63.h> | ||
31 | 32 | ||
32 | #ifdef CONFIG_SELFMOD_TIMER | 33 | #ifdef CONFIG_SELFMOD_TIMER |
33 | #include <asm/selfmod.h> | 34 | #include <asm/selfmod.h> |
@@ -135,7 +136,7 @@ static void microblaze_timer_set_mode(enum clock_event_mode mode, | |||
135 | static struct clock_event_device clockevent_microblaze_timer = { | 136 | static struct clock_event_device clockevent_microblaze_timer = { |
136 | .name = "microblaze_clockevent", | 137 | .name = "microblaze_clockevent", |
137 | .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, | 138 | .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, |
138 | .shift = 24, | 139 | .shift = 8, |
139 | .rating = 300, | 140 | .rating = 300, |
140 | .set_next_event = microblaze_timer_set_next_event, | 141 | .set_next_event = microblaze_timer_set_next_event, |
141 | .set_mode = microblaze_timer_set_mode, | 142 | .set_mode = microblaze_timer_set_mode, |
@@ -195,7 +196,7 @@ static cycle_t microblaze_cc_read(const struct cyclecounter *cc) | |||
195 | static struct cyclecounter microblaze_cc = { | 196 | static struct cyclecounter microblaze_cc = { |
196 | .read = microblaze_cc_read, | 197 | .read = microblaze_cc_read, |
197 | .mask = CLOCKSOURCE_MASK(32), | 198 | .mask = CLOCKSOURCE_MASK(32), |
198 | .shift = 24, | 199 | .shift = 8, |
199 | }; | 200 | }; |
200 | 201 | ||
201 | int __init init_microblaze_timecounter(void) | 202 | int __init init_microblaze_timecounter(void) |
@@ -213,7 +214,7 @@ static struct clocksource clocksource_microblaze = { | |||
213 | .rating = 300, | 214 | .rating = 300, |
214 | .read = microblaze_read, | 215 | .read = microblaze_read, |
215 | .mask = CLOCKSOURCE_MASK(32), | 216 | .mask = CLOCKSOURCE_MASK(32), |
216 | .shift = 24, /* I can shift it */ | 217 | .shift = 8, /* I can shift it */ |
217 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 218 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
218 | }; | 219 | }; |
219 | 220 | ||
@@ -302,7 +303,7 @@ unsigned long long notrace sched_clock(void) | |||
302 | { | 303 | { |
303 | if (timer_initialized) { | 304 | if (timer_initialized) { |
304 | struct clocksource *cs = &clocksource_microblaze; | 305 | struct clocksource *cs = &clocksource_microblaze; |
305 | cycle_t cyc = cs->read(NULL); | 306 | cycle_t cyc = cnt32_to_63(cs->read(NULL)); |
306 | return clocksource_cyc2ns(cyc, cs->mult, cs->shift); | 307 | return clocksource_cyc2ns(cyc, cs->mult, cs->shift); |
307 | } | 308 | } |
308 | return 0; | 309 | return 0; |