diff options
Diffstat (limited to 'arch/sh/kernel/cpu/irq/intc.c')
-rw-r--r-- | arch/sh/kernel/cpu/irq/intc.c | 11 |
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, |