[ARM] 3135/1: harden SA11x0 and PXA2xx timer init code
Patch from Nicolas Pitre Make it completely deterministic and leave nothing to chance (even if it had at worst 0.001% probability of failing). Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
d07ad967e3
commit
5285eb57c9
2 changed files with 10 additions and 6 deletions
|
@ -132,11 +132,13 @@ static void __init pxa_timer_init(void)
|
||||||
tv.tv_sec = pxa_get_rtc_time();
|
tv.tv_sec = pxa_get_rtc_time();
|
||||||
do_settimeofday(&tv);
|
do_settimeofday(&tv);
|
||||||
|
|
||||||
OSMR0 = 0; /* set initial match at 0 */
|
OIER = 0; /* disable any timer interrupts */
|
||||||
|
OSCR = LATCH*2; /* push OSCR out of the way */
|
||||||
|
OSMR0 = LATCH; /* set initial match */
|
||||||
OSSR = 0xf; /* clear status on all timers */
|
OSSR = 0xf; /* clear status on all timers */
|
||||||
setup_irq(IRQ_OST0, &pxa_timer_irq);
|
setup_irq(IRQ_OST0, &pxa_timer_irq);
|
||||||
OIER |= OIER_E0; /* enable match on timer 0 to cause interrupts */
|
OIER = OIER_E0; /* enable match on timer 0 to cause interrupts */
|
||||||
OSCR = 0; /* initialize free-running timer, force first match */
|
OSCR = 0; /* initialize free-running timer */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NO_IDLE_HZ
|
#ifdef CONFIG_NO_IDLE_HZ
|
||||||
|
|
|
@ -124,11 +124,13 @@ static void __init sa1100_timer_init(void)
|
||||||
tv.tv_sec = sa1100_get_rtc_time();
|
tv.tv_sec = sa1100_get_rtc_time();
|
||||||
do_settimeofday(&tv);
|
do_settimeofday(&tv);
|
||||||
|
|
||||||
OSMR0 = 0; /* set initial match at 0 */
|
OIER = 0; /* disable any timer interrupts */
|
||||||
|
OSCR = LATCH*2; /* push OSCR out of the way */
|
||||||
|
OSMR0 = LATCH; /* set initial match */
|
||||||
OSSR = 0xf; /* clear status on all timers */
|
OSSR = 0xf; /* clear status on all timers */
|
||||||
setup_irq(IRQ_OST0, &sa1100_timer_irq);
|
setup_irq(IRQ_OST0, &sa1100_timer_irq);
|
||||||
OIER |= OIER_E0; /* enable match on timer 0 to cause interrupts */
|
OIER = OIER_E0; /* enable match on timer 0 to cause interrupts */
|
||||||
OSCR = 0; /* initialize free-running timer, force first match */
|
OSCR = 0; /* initialize free-running timer */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NO_IDLE_HZ
|
#ifdef CONFIG_NO_IDLE_HZ
|
||||||
|
|
Loading…
Reference in a new issue