|
@@ -118,6 +118,7 @@ static struct irqaction sa1100_timer_irq = {
|
|
static void __init sa1100_timer_init(void)
|
|
static void __init sa1100_timer_init(void)
|
|
{
|
|
{
|
|
struct timespec tv;
|
|
struct timespec tv;
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
set_rtc = sa1100_set_rtc;
|
|
set_rtc = sa1100_set_rtc;
|
|
|
|
|
|
@@ -126,12 +127,12 @@ static void __init sa1100_timer_init(void)
|
|
do_settimeofday(&tv);
|
|
do_settimeofday(&tv);
|
|
|
|
|
|
OIER = 0; /* disable any timer interrupts */
|
|
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);
|
|
|
|
+ local_irq_save(flags);
|
|
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 */
|
|
|
|
|
|
+ OSMR0 = OSCR + LATCH; /* set initial match */
|
|
|
|
+ local_irq_restore(flags);
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_NO_IDLE_HZ
|
|
#ifdef CONFIG_NO_IDLE_HZ
|