arm/{pxa,sa1100,nomadik}: Don't disable irqs in set_next_event and set_mode
[safe/jmp/linux-2.6] / arch / arm / mach-pxa / time.c
index 986d494..293e40a 100644 (file)
@@ -22,7 +22,7 @@
 #include <asm/div64.h>
 #include <asm/mach/irq.h>
 #include <asm/mach/time.h>
-#include <mach/pxa-regs.h>
+#include <mach/regs-ost.h>
 
 /*
  * This is PXA's sched_clock implementation. This has a resolution
@@ -76,14 +76,12 @@ pxa_ost0_interrupt(int irq, void *dev_id)
 static int
 pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev)
 {
-       unsigned long flags, next, oscr;
+       unsigned long next, oscr;
 
-       raw_local_irq_save(flags);
        OIER |= OIER_E0;
        next = OSCR + delta;
        OSMR0 = next;
        oscr = OSCR;
-       raw_local_irq_restore(flags);
 
        return (signed)(next - oscr) <= MIN_OSCR_DELTA ? -ETIME : 0;
 }
@@ -91,23 +89,17 @@ pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev)
 static void
 pxa_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *dev)
 {
-       unsigned long irqflags;
-
        switch (mode) {
        case CLOCK_EVT_MODE_ONESHOT:
-               raw_local_irq_save(irqflags);
                OIER &= ~OIER_E0;
                OSSR = OSSR_M0;
-               raw_local_irq_restore(irqflags);
                break;
 
        case CLOCK_EVT_MODE_UNUSED:
        case CLOCK_EVT_MODE_SHUTDOWN:
                /* initializing, released, or preparing for suspend */
-               raw_local_irq_save(irqflags);
                OIER &= ~OIER_E0;
                OSSR = OSSR_M0;
-               raw_local_irq_restore(irqflags);
                break;
 
        case CLOCK_EVT_MODE_RESUME:
@@ -121,12 +113,11 @@ static struct clock_event_device ckevt_pxa_osmr0 = {
        .features       = CLOCK_EVT_FEAT_ONESHOT,
        .shift          = 32,
        .rating         = 200,
-       .cpumask        = CPU_MASK_CPU0,
        .set_next_event = pxa_osmr0_set_next_event,
        .set_mode       = pxa_osmr0_set_mode,
 };
 
-static cycle_t pxa_read_oscr(void)
+static cycle_t pxa_read_oscr(struct clocksource *cs)
 {
        return OSCR;
 }
@@ -162,6 +153,7 @@ static void __init pxa_timer_init(void)
                clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0);
        ckevt_pxa_osmr0.min_delta_ns =
                clockevent_delta2ns(MIN_OSCR_DELTA * 2, &ckevt_pxa_osmr0) + 1;
+       ckevt_pxa_osmr0.cpumask = cpumask_of(0);
 
        cksrc_pxa_oscr0.mult =
                clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift);