linux/arch/arm/mach-imx
Matt Reimer e2f04e1894 [ARM] 3546/1: PATCH: subtle lost interrupts bug on i.MX
Patch from Matt Reimer

There is a subtle bug in the GPIO interrupt status register
handling in arch/arm/mach-imx/irq.c:imx_gpio_ack_irq(). The
documentation states that a 1 should be written to the relevant bit to
acknowledge a GPIO interrupt, but that is not what the code does.

The problem is that the |= writes back 1s for all the *other*
interrupts represented in the register, so interrupts could get lost.
For example, if interrupts are pending for GPIO B10 and B12, ISR_B
would have the value 0x00001400. Then when the interrupt code handles
GPIO B10, it eventually calls imx_gpio_ack_irq(IRQ_GPIOB(10)), which
effectively does this:

ISR_B |= 1 << 10;

with the result that (0x00001400 | 0x00000400) is written, clearing
the interrupt status bits for *both* GPIO B10 and B12.

The fix is to write 1s only for the interrupts we want to clear.

The same problem seems to be occurring in the DMA code; this patch
does not address those issues.

Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Matt Reimer <mreimer@vpop.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-06-08 22:46:48 +01:00
..
Kconfig
Makefile
Makefile.boot
dma.c [ARM] 3444/1: i.MX: Scatter-gather DMA emulation for i.MX/MX1 2006-04-02 16:58:37 +01:00
generic.c [ARM] 3490/1: i.MX: move uart resources to board files 2006-05-04 14:07:42 +01:00
generic.h
irq.c [ARM] 3546/1: PATCH: subtle lost interrupts bug on i.MX 2006-06-08 22:46:48 +01:00
leds-mx1ads.c [ARM] Don't include mach-types.h unnecessarily 2005-09-29 11:15:51 +01:00
leds.c
leds.h
mx1ads.c [ARM] 3501/1: i.MX: fix lowlevel debug macros 2006-05-07 18:56:27 +01:00
time.c [PATCH] ARM: Add SA_TIMER flag to timer interrupts 2005-06-26 17:06:36 +01:00