diff options
Diffstat (limited to 'arch/arm/mach-at91/at91rm9200_time.c')
-rw-r--r-- | arch/arm/mach-at91/at91rm9200_time.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index a72e798a2a40..1ff1bda0a894 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
@@ -141,6 +141,15 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev) | |||
141 | /* Use "raw" primitives so we behave correctly on RT kernels. */ | 141 | /* Use "raw" primitives so we behave correctly on RT kernels. */ |
142 | raw_local_irq_save(flags); | 142 | raw_local_irq_save(flags); |
143 | 143 | ||
144 | /* | ||
145 | * According to Thomas Gleixner irqs are already disabled here. Simply | ||
146 | * removing raw_local_irq_save above (and the matching | ||
147 | * raw_local_irq_restore) was not accepted. See | ||
148 | * http://thread.gmane.org/gmane.linux.ports.arm.kernel/41174 | ||
149 | * So for now (2008-11-20) just warn once if irqs were not disabled ... | ||
150 | */ | ||
151 | WARN_ON_ONCE(!raw_irqs_disabled_flags(flags)); | ||
152 | |||
144 | /* The alarm IRQ uses absolute time (now+delta), not the relative | 153 | /* The alarm IRQ uses absolute time (now+delta), not the relative |
145 | * time (delta) in our calling convention. Like all clockevents | 154 | * time (delta) in our calling convention. Like all clockevents |
146 | * using such "match" hardware, we have a race to defend against. | 155 | * using such "match" hardware, we have a race to defend against. |
@@ -169,7 +178,6 @@ static struct clock_event_device clkevt = { | |||
169 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 178 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
170 | .shift = 32, | 179 | .shift = 32, |
171 | .rating = 150, | 180 | .rating = 150, |
172 | .cpumask = CPU_MASK_CPU0, | ||
173 | .set_next_event = clkevt32k_next_event, | 181 | .set_next_event = clkevt32k_next_event, |
174 | .set_mode = clkevt32k_mode, | 182 | .set_mode = clkevt32k_mode, |
175 | }; | 183 | }; |
@@ -197,7 +205,7 @@ void __init at91rm9200_timer_init(void) | |||
197 | clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); | 205 | clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift); |
198 | clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt); | 206 | clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt); |
199 | clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1; | 207 | clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1; |
200 | clkevt.cpumask = cpumask_of_cpu(0); | 208 | clkevt.cpumask = cpumask_of(0); |
201 | clockevents_register_device(&clkevt); | 209 | clockevents_register_device(&clkevt); |
202 | 210 | ||
203 | /* register clocksource */ | 211 | /* register clocksource */ |