Skip to content

Commit

Permalink
davinci: timers: don't enable timer until clocksource is initialized
Browse files Browse the repository at this point in the history
On da830, when the same timer is used for clocksource and clockevent,
the timer can be started before the clockevent is
registered/initialzed.  This creates a window where a timer
interrupt might fire before the clockevent handler has been
setup and causes a crash.

This patch moves the actual enable/start of the timer after
the clockevent has ben registered.

Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
  • Loading branch information
Kevin Hilman committed Apr 5, 2010
1 parent 2eaa9cf commit d99c387
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions arch/arm/mach-davinci/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,6 @@ static void __init timer_init(void)
irq = USING_COMPARE(t) ? dtip[i].cmp_irq : irq;
setup_irq(irq, &t->irqaction);
}

timer32_config(&timers[i]);
}
}

Expand Down Expand Up @@ -331,6 +329,7 @@ static void __init davinci_timer_init(void)
unsigned int clocksource_id;
static char err[] __initdata = KERN_ERR
"%s: can't register clocksource!\n";
int i;

clockevent_id = soc_info->timer_info->clockevent_id;
clocksource_id = soc_info->timer_info->clocksource_id;
Expand Down Expand Up @@ -389,6 +388,9 @@ static void __init davinci_timer_init(void)

clockevent_davinci.cpumask = cpumask_of(0);
clockevents_register_device(&clockevent_davinci);

for (i=0; i< ARRAY_SIZE(timers); i++)
timer32_config(&timers[i]);
}

struct sys_timer davinci_timer = {
Expand Down

0 comments on commit d99c387

Please sign in to comment.