Switch to using the simple MMIO clocksource driver provided by
kernel.
Signed-off-by: Sekhar Nori <[email protected]>
---
arch/arm/Kconfig | 1 +
arch/arm/mach-davinci/time.c | 30 ++++++++----------------------
2 files changed, 9 insertions(+), 22 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 3304316..69e97e8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -927,6 +927,7 @@ config ARCH_DAVINCI
select HAVE_IDE
select HAVE_SCHED_CLOCK
select CLKDEV_LOOKUP
+ select CLKSRC_MMIO
select GENERIC_ALLOCATOR
select GENERIC_IRQ_CHIP
select ARCH_HAS_HOLES_MEMORYMODEL
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index f307b7d..876e5d7 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -264,20 +264,6 @@ static void __init timer_hw_init(void)
/*
* clocksource
*/
-static cycle_t read_cycles(struct clocksource *cs)
-{
- struct timer_s *t = &timers[TID_CLOCKSOURCE];
-
- return (cycles_t)timer32_read(t);
-}
-
-static struct clocksource clocksource_davinci = {
- .rating = 300,
- .read = read_cycles,
- .mask = CLOCKSOURCE_MASK(32),
- .flags = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
static DEFINE_CLOCK_DATA(cd);
/*
@@ -347,8 +333,6 @@ void __init davinci_timer_early_init(void)
struct davinci_soc_info *soc_info = &davinci_soc_info;
unsigned int clockevent_id;
unsigned int clocksource_id;
- static char err[] __initdata = KERN_ERR
- "%s: can't register clocksource!\n";
clockevent_id = soc_info->timer_info->clockevent_id;
clocksource_id = soc_info->timer_info->clocksource_id;
@@ -382,20 +366,16 @@ void __init davinci_timer_early_init(void)
timer_hw_init();
- /* setup clocksource */
- clocksource_davinci.read = read_cycles;
- clocksource_davinci.name = id_to_name[clocksource_id];
init_sched_clock(&cd, davinci_update_sched_clock, 32,
davinci_clock_tick_rate);
- if (clocksource_register_hz(&clocksource_davinci,
- davinci_clock_tick_rate))
- printk(err, clocksource_davinci.name);
}
static void __init davinci_timer_late_init(void)
{
struct davinci_soc_info *soc_info = &davinci_soc_info;
struct davinci_timer_instance *dtip = soc_info->timer_info->timers;
+ void __iomem *clocksource_reg = timers[TID_CLOCKSOURCE].base +
+ timers[TID_CLOCKSOURCE].tim_off;
int i;
for (i = 0; i < ARRAY_SIZE(timers); i++) {
@@ -418,6 +398,12 @@ static void __init davinci_timer_late_init(void)
}
}
+ /* setup clocksource */
+ clocksource_mmio_init(clocksource_reg,
+ id_to_name[timers[TID_CLOCKSOURCE].id],
+ davinci_clock_tick_rate, 300, 32,
+ clocksource_mmio_readl_up);
+
/* setup clockevent */
clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
--
1.7.0.4
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source