diff options
Diffstat (limited to 'arch/arm/mach-ixp4xx/common.c')
-rw-r--r-- | arch/arm/mach-ixp4xx/common.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 0bce09799d18..4dbfcbb9163c 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
36 | #include <asm/page.h> | 36 | #include <asm/page.h> |
37 | #include <asm/irq.h> | 37 | #include <asm/irq.h> |
38 | #include <asm/sched_clock.h> | ||
38 | 39 | ||
39 | #include <asm/mach/map.h> | 40 | #include <asm/mach/map.h> |
40 | #include <asm/mach/irq.h> | 41 | #include <asm/mach/irq.h> |
@@ -399,6 +400,23 @@ void __init ixp4xx_sys_init(void) | |||
399 | } | 400 | } |
400 | 401 | ||
401 | /* | 402 | /* |
403 | * sched_clock() | ||
404 | */ | ||
405 | static DEFINE_CLOCK_DATA(cd); | ||
406 | |||
407 | unsigned long long notrace sched_clock(void) | ||
408 | { | ||
409 | u32 cyc = *IXP4XX_OSTS; | ||
410 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); | ||
411 | } | ||
412 | |||
413 | static void notrace ixp4xx_update_sched_clock(void) | ||
414 | { | ||
415 | u32 cyc = *IXP4XX_OSTS; | ||
416 | update_sched_clock(&cd, cyc, (u32)~0); | ||
417 | } | ||
418 | |||
419 | /* | ||
402 | * clocksource | 420 | * clocksource |
403 | */ | 421 | */ |
404 | static cycle_t ixp4xx_get_cycles(struct clocksource *cs) | 422 | static cycle_t ixp4xx_get_cycles(struct clocksource *cs) |
@@ -411,7 +429,6 @@ static struct clocksource clocksource_ixp4xx = { | |||
411 | .rating = 200, | 429 | .rating = 200, |
412 | .read = ixp4xx_get_cycles, | 430 | .read = ixp4xx_get_cycles, |
413 | .mask = CLOCKSOURCE_MASK(32), | 431 | .mask = CLOCKSOURCE_MASK(32), |
414 | .shift = 20, | ||
415 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 432 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
416 | }; | 433 | }; |
417 | 434 | ||
@@ -419,21 +436,9 @@ unsigned long ixp4xx_timer_freq = FREQ; | |||
419 | EXPORT_SYMBOL(ixp4xx_timer_freq); | 436 | EXPORT_SYMBOL(ixp4xx_timer_freq); |
420 | static void __init ixp4xx_clocksource_init(void) | 437 | static void __init ixp4xx_clocksource_init(void) |
421 | { | 438 | { |
422 | clocksource_ixp4xx.mult = | 439 | init_sched_clock(&cd, ixp4xx_update_sched_clock, 32, ixp4xx_timer_freq); |
423 | clocksource_hz2mult(ixp4xx_timer_freq, | ||
424 | clocksource_ixp4xx.shift); | ||
425 | clocksource_register(&clocksource_ixp4xx); | ||
426 | } | ||
427 | |||
428 | /* | ||
429 | * sched_clock() | ||
430 | */ | ||
431 | unsigned long long sched_clock(void) | ||
432 | { | ||
433 | cycle_t cyc = ixp4xx_get_cycles(NULL); | ||
434 | struct clocksource *cs = &clocksource_ixp4xx; | ||
435 | 440 | ||
436 | return clocksource_cyc2ns(cyc, cs->mult, cs->shift); | 441 | clocksource_register_hz(&clocksource_ixp4xx, ixp4xx_timer_freq); |
437 | } | 442 | } |
438 | 443 | ||
439 | /* | 444 | /* |