|
@@ -27,8 +27,6 @@
|
|
|
|
|
|
#include "irqchip.h"
|
|
#include "irqchip.h"
|
|
|
|
|
|
-#include <asm/mach/irq.h>
|
|
|
|
-
|
|
|
|
/* Register offset in the L2 interrupt controller */
|
|
/* Register offset in the L2 interrupt controller */
|
|
#define IRQEN 0x00
|
|
#define IRQEN 0x00
|
|
#define IRQSTAT 0x04
|
|
#define IRQSTAT 0x04
|
|
@@ -51,19 +49,12 @@ static void bcm7120_l2_intc_irq_handle(unsigned int irq, struct irq_desc *desc)
|
|
chained_irq_enter(chip, desc);
|
|
chained_irq_enter(chip, desc);
|
|
|
|
|
|
status = __raw_readl(b->base + IRQSTAT);
|
|
status = __raw_readl(b->base + IRQSTAT);
|
|
-
|
|
|
|
- if (status == 0) {
|
|
|
|
- do_bad_IRQ(irq, desc);
|
|
|
|
- goto out;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- do {
|
|
|
|
|
|
+ while (status) {
|
|
irq = ffs(status) - 1;
|
|
irq = ffs(status) - 1;
|
|
status &= ~(1 << irq);
|
|
status &= ~(1 << irq);
|
|
generic_handle_irq(irq_find_mapping(b->domain, irq));
|
|
generic_handle_irq(irq_find_mapping(b->domain, irq));
|
|
- } while (status);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
-out:
|
|
|
|
chained_irq_exit(chip, desc);
|
|
chained_irq_exit(chip, desc);
|
|
}
|
|
}
|
|
|
|
|