aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/cpu/irq/intc.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/kernel/cpu/irq/intc.c')
-rw-r--r--arch/sh/kernel/cpu/irq/intc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/irq/intc.c b/arch/sh/kernel/cpu/irq/intc.c
index 6ac018c15e0355..2dfb7cf588985d 100644
--- a/arch/sh/kernel/cpu/irq/intc.c
+++ b/arch/sh/kernel/cpu/irq/intc.c
@@ -211,12 +211,23 @@ static void intc_disable(unsigned int irq)
unsigned long handle = (unsigned long) get_irq_chip_data(irq);
unsigned long addr;
unsigned int cpu;
+ unsigned int IRR0_var;
+ unsigned int IRR0 = 0xa4000004;
for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_D(handle)); cpu++) {
addr = INTC_REG(d, _INTC_ADDR_D(handle), cpu);
intc_disable_fns[_INTC_MODE(handle)](addr, handle,intc_reg_fns\
[_INTC_FN(handle)], irq);
}
+
+ #ifdef CONFIG_CPU_SUBTYPE_SH7709
+ /* need to mask out IRQ0->IRQ5 interrupt */
+ if ((irq < 37) && (irq > 31)) {
+ IRR0_var = ctrl_inb(IRR0);
+ IRR0_var &= ~(1 << (irq - 32));
+ ctrl_outb(IRR0_var, IRR0);
+ }
+ #endif
}
static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp,