Commit dd01b2fc79a567ae03d0c96ddf61eb4de729d36d

Authored by Russell King
Committed by Russell King
1 parent fd8e7af8d0

[ARM] pxa: fix PXA27x resume

When PXA27x wakes up, tick_resume_oneshot() tries to set a timer
interrupt to occur immediately.  Since PXA27x requires at least
MIN_OSCR_DELTA, this causes us to flag an error.

tick_program_event() then increments the next event time by
min_delta_ns.  However, by the time we get back to programming
the next event, the OSCR has incremented such that we fail again.
We repeatedly retry, but the OSCR is too fast for us - we never
catch up, so we never break out of the loop - resulting in us
never apparantly resuming.

Fix this by doubling min_delta_ns.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

arch/arm/mach-pxa/time.c
... ... @@ -169,7 +169,7 @@
169 169 ckevt_pxa_osmr0.max_delta_ns =
170 170 clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0);
171 171 ckevt_pxa_osmr0.min_delta_ns =
172   - clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1;
  172 + clockevent_delta2ns(MIN_OSCR_DELTA * 2, &ckevt_pxa_osmr0) + 1;
173 173  
174 174 cksrc_pxa_oscr0.mult =
175 175 clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift);