diff --git a/arch/ppc/syslib/ppc4xx_pic.c b/arch/ppc/syslib/ppc4xx_pic.c index 08f06dd17e7b..05686fa73545 100644 --- a/arch/ppc/syslib/ppc4xx_pic.c +++ b/arch/ppc/syslib/ppc4xx_pic.c @@ -41,7 +41,10 @@ extern unsigned char ppc4xx_uic_ext_irq_cfg[] __attribute__ ((weak)); #define UIC_HANDLERS(n) \ static void ppc4xx_uic##n##_enable(unsigned int irq) \ { \ - ppc_cached_irq_mask[n] |= IRQ_MASK_UIC##n(irq); \ + u32 mask = IRQ_MASK_UIC##n(irq); \ + if (irq_desc[irq].status & IRQ_LEVEL) \ + mtdcr(DCRN_UIC_SR(UIC##n), mask); \ + ppc_cached_irq_mask[n] |= mask; \ mtdcr(DCRN_UIC_ER(UIC##n), ppc_cached_irq_mask[n]); \ } \ \