Commit 6c1380c6 authored by Tony Lindgren's avatar Tony Lindgren

ARM: OMAP3: Fix get_irqnr_and_base to clear spurious interrupt bits

On omap24xx, INTCPS_SIR_IRQ_OFFSET bits [6:0] contains the current
active interrupt number.

However, on 34xx INTCPS_SIR_IRQ_OFFSET bits [31:7] also contains the
SPURIOUSIRQFLAG, which gets set if the interrupt sorting information
is invalid.

If the SPURIOUSIRQFLAG bits are not ignored, the interrupt code will
occasionally produce a bunch of confusing errors:

irq -33, desc: c02ddcc8, depth: 0, count: 0, unhandled: 0
->handle_irq():  c006f23c, handle_bad_irq+0x0/0x22c
->chip(): 00000000, 0x0
->action(): 00000000

Fix this by masking out only the ACTIVEIRQ bits. Also fix a
confusing comment.
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 4b20de38
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
#include <mach/omap34xx.h> #include <mach/omap34xx.h>
#endif #endif
#define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt number */ #define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt offset */
#define ACTIVEIRQ_MASK 0x7f /* Active interrupt bits */
.macro disable_fiq .macro disable_fiq
.endm .endm
...@@ -88,6 +89,7 @@ ...@@ -88,6 +89,7 @@
cmp \irqnr, #0x0 cmp \irqnr, #0x0
2222: 2222:
ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */
.endm .endm
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment