diff options
Diffstat (limited to 'target/linux/amazon/files/arch')
-rw-r--r-- | target/linux/amazon/files/arch/mips/amazon/interrupt.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/target/linux/amazon/files/arch/mips/amazon/interrupt.c b/target/linux/amazon/files/arch/mips/amazon/interrupt.c index e264ca759..05ff1ee75 100644 --- a/target/linux/amazon/files/arch/mips/amazon/interrupt.c +++ b/target/linux/amazon/files/arch/mips/amazon/interrupt.c @@ -34,10 +34,11 @@ #include <asm/irq.h> #include <asm/time.h> -static void amazon_disable_irq(unsigned int irq_nr) +static void amazon_disable_irq(struct irq_data *d) { int i; u32 amazon_ier = AMAZON_ICU_IM0_IER; + unsigned int irq_nr = d->irq; if (irq_nr <= INT_NUM_IM0_IRL11 && irq_nr >= INT_NUM_IM0_IRL0) amazon_writel(amazon_readl(amazon_ier) & (~(AMAZON_DMA_H_MASK)), amazon_ier); @@ -53,11 +54,12 @@ static void amazon_disable_irq(unsigned int irq_nr) } } -static void amazon_mask_and_ack_irq(unsigned int irq_nr) +static void amazon_mask_and_ack_irq(struct irq_data *d) { int i; u32 amazon_ier = AMAZON_ICU_IM0_IER; u32 amazon_isr = AMAZON_ICU_IM0_ISR; + unsigned int irq_nr = d->irq; if (irq_nr <= INT_NUM_IM0_IRL11 && irq_nr >= INT_NUM_IM0_IRL0){ amazon_writel(amazon_readl(amazon_ier) & (~(AMAZON_DMA_H_MASK)), amazon_ier); @@ -77,10 +79,11 @@ static void amazon_mask_and_ack_irq(unsigned int irq_nr) } } -static void amazon_enable_irq(unsigned int irq_nr) +static void amazon_enable_irq(struct irq_data *d) { int i; u32 amazon_ier = AMAZON_ICU_IM0_IER; + unsigned int irq_nr = d->irq; if (irq_nr <= INT_NUM_IM0_IRL11 && irq_nr >= INT_NUM_IM0_IRL0) amazon_writel(amazon_readl(amazon_ier) | AMAZON_DMA_H_MASK, amazon_ier); @@ -96,29 +99,21 @@ static void amazon_enable_irq(unsigned int irq_nr) } } -static unsigned int amazon_startup_irq(unsigned int irq) +static unsigned int amazon_startup_irq(struct irq_data *d) { - amazon_enable_irq(irq); + amazon_enable_irq(d); return 0; } -static void amazon_end_irq(unsigned int irq) -{ - if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) { - amazon_enable_irq(irq); - } -} - static struct irq_chip amazon_irq_type = { .name = "AMAZON", - .startup = amazon_startup_irq, - .enable = amazon_enable_irq, - .disable = amazon_disable_irq, - .unmask = amazon_enable_irq, - .ack = amazon_mask_and_ack_irq, - .mask = amazon_disable_irq, - .mask_ack = amazon_mask_and_ack_irq, - .end = amazon_end_irq + .irq_startup = amazon_startup_irq, + .irq_enable = amazon_enable_irq, + .irq_disable = amazon_disable_irq, + .irq_unmask = amazon_enable_irq, + .irq_ack = amazon_mask_and_ack_irq, + .irq_mask = amazon_disable_irq, + .irq_mask_ack = amazon_mask_and_ack_irq, }; /* Cascaded interrupts from IM0-4 */ @@ -178,7 +173,7 @@ void __init arch_init_irq(void) } for (i = INT_NUM_IRQ0; i <= INT_NUM_IM4_IRL31; i++) - set_irq_chip_and_handler(i, &amazon_irq_type, + irq_set_chip_and_handler(i, &amazon_irq_type, handle_level_irq); set_c0_status(IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5); |