diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-01-23 07:34:16 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-01-26 10:07:57 -0500 |
commit | dd01b2fc79a567ae03d0c96ddf61eb4de729d36d (patch) | |
tree | 3595a660158448fdb2e119affe9ea56c3ff1d5f9 /arch/arm/mach-pxa/time.c | |
parent | fd8e7af8d0fd3febc87607214d5dd545089edc71 (diff) |
[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>
Diffstat (limited to 'arch/arm/mach-pxa/time.c')
-rw-r--r-- | arch/arm/mach-pxa/time.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c index ac0bbad35238..7b7c0179795b 100644 --- a/arch/arm/mach-pxa/time.c +++ b/arch/arm/mach-pxa/time.c | |||
@@ -169,7 +169,7 @@ static void __init pxa_timer_init(void) | |||
169 | ckevt_pxa_osmr0.max_delta_ns = | 169 | ckevt_pxa_osmr0.max_delta_ns = |
170 | clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0); | 170 | clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0); |
171 | ckevt_pxa_osmr0.min_delta_ns = | 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 | cksrc_pxa_oscr0.mult = | 174 | cksrc_pxa_oscr0.mult = |
175 | clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift); | 175 | clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift); |