From: Lauri Leukkunen Date: Wed, 15 Oct 2008 11:51:51 +0000 (+0300) Subject: OMAP3: ack spurious IRQs in get_irqnr_and_base X-Git-Tag: v2.6.27-omap1~23 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=3da0e10243d075b905dfa8f1b4a6cb3694ab2ce0;p=linux-2.6-omap-h63xx.git OMAP3: ack spurious IRQs in get_irqnr_and_base This prevents spurious interrupts from repeating unacked and thus locking the system, while still allowing the spurious bad irq error message to be show on console. Signed-off-by: Lauri Leukkunen Signed-off-by: Tony Lindgren --- diff --git a/arch/arm/plat-omap/include/mach/entry-macro.S b/arch/arm/plat-omap/include/mach/entry-macro.S index a8fca9d9845..c88a4cb52e2 100644 --- a/arch/arm/plat-omap/include/mach/entry-macro.S +++ b/arch/arm/plat-omap/include/mach/entry-macro.S @@ -87,7 +87,26 @@ ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */ cmp \irqnr, #0x0 2222: - ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] +#if defined(CONFIG_ARCH_OMAP34XX) + mov \tmp, \irqnr +#endif + ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] +#if defined(CONFIG_ARCH_OMAP34XX) + mov \irqstat, \irqnr + bic \irqstat, \irqstat, #0x7f /* check for spurious flag */ + cmp \irqstat, #0x0 + beq 2223f + mov \irqstat, #0x1 /* Ack the spurious irq, this lets it + * generate a bad irq error message, + * but prevents infinitely repeating + * irq. + */ + str \irqstat, [\base, #0x48] /* INTC_CONTROL register */ +2223: + cmp \tmp, #0x0 /* set conditional back to what it was + * before spurious test + */ +#endif .endm