提交 1417836e 编写于 作者: A Atsushi Nemoto 提交者: Ralf Baechle

[MIPS] use generic_handle_irq, handle_level_irq, handle_percpu_irq

Further incorporation of generic irq framework.  Replacing __do_IRQ()
by proper flow handler would make the irq handling path a bit simpler
and faster.

* use generic_handle_irq() instead of __do_IRQ().
* use handle_level_irq for obvious level-type irq chips.
* use handle_percpu_irq for irqs marked as IRQ_PER_CPU.
* setup .eoi routine for irq chips possibly used with handle_percpu_irq.
Signed-off-by: NAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
上级 1603b5ac
...@@ -103,9 +103,11 @@ void __init init_ioasic_irqs(int base) ...@@ -103,9 +103,11 @@ void __init init_ioasic_irqs(int base)
fast_iob(); fast_iob();
for (i = base; i < base + IO_INR_DMA; i++) for (i = base; i < base + IO_INR_DMA; i++)
set_irq_chip(i, &ioasic_irq_type); set_irq_chip_and_handler(i, &ioasic_irq_type,
handle_level_irq);
for (; i < base + IO_IRQ_LINES; i++) for (; i < base + IO_IRQ_LINES; i++)
set_irq_chip(i, &ioasic_dma_irq_type); set_irq_chip_and_handler(i, &ioasic_dma_irq_type,
handle_level_irq);
ioasic_irq_base = base; ioasic_irq_base = base;
} }
...@@ -85,7 +85,7 @@ void __init init_kn02_irqs(int base) ...@@ -85,7 +85,7 @@ void __init init_kn02_irqs(int base)
iob(); iob();
for (i = base; i < base + KN02_IRQ_LINES; i++) for (i = base; i < base + KN02_IRQ_LINES; i++)
set_irq_chip(i, &kn02_irq_type); set_irq_chip_and_handler(i, &kn02_irq_type, handle_level_irq);
kn02_irq_base = base; kn02_irq_base = base;
} }
...@@ -76,7 +76,8 @@ void emma2rh_irq_init(u32 irq_base) ...@@ -76,7 +76,8 @@ void emma2rh_irq_init(u32 irq_base)
u32 i; u32 i;
for (i = irq_base; i < irq_base + NUM_EMMA2RH_IRQ; i++) for (i = irq_base; i < irq_base + NUM_EMMA2RH_IRQ; i++)
set_irq_chip(i, &emma2rh_irq_controller); set_irq_chip_and_handler(i, &emma2rh_irq_controller,
handle_level_irq);
emma2rh_irq_base = irq_base; emma2rh_irq_base = irq_base;
} }
......
...@@ -68,7 +68,8 @@ void emma2rh_sw_irq_init(u32 irq_base) ...@@ -68,7 +68,8 @@ void emma2rh_sw_irq_init(u32 irq_base)
u32 i; u32 i;
for (i = irq_base; i < irq_base + NUM_EMMA2RH_IRQ_SW; i++) for (i = irq_base; i < irq_base + NUM_EMMA2RH_IRQ_SW; i++)
set_irq_chip(i, &emma2rh_sw_irq_controller); set_irq_chip_and_handler(i, &emma2rh_sw_irq_controller,
handle_level_irq);
emma2rh_sw_irq_base = irq_base; emma2rh_sw_irq_base = irq_base;
} }
......
...@@ -59,7 +59,7 @@ void __init init_r4030_ints(void) ...@@ -59,7 +59,7 @@ void __init init_r4030_ints(void)
int i; int i;
for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++)
set_irq_chip(i, &r4030_irq_type); set_irq_chip_and_handler(i, &r4030_irq_type, handle_level_irq);
r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0);
r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */ r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */
......
...@@ -117,6 +117,7 @@ struct irq_chip msc_levelirq_type = { ...@@ -117,6 +117,7 @@ struct irq_chip msc_levelirq_type = {
.mask = mask_msc_irq, .mask = mask_msc_irq,
.mask_ack = level_mask_and_ack_msc_irq, .mask_ack = level_mask_and_ack_msc_irq,
.unmask = unmask_msc_irq, .unmask = unmask_msc_irq,
.eoi = unmask_msc_irq,
.end = end_msc_irq, .end = end_msc_irq,
}; };
...@@ -126,6 +127,7 @@ struct irq_chip msc_edgeirq_type = { ...@@ -126,6 +127,7 @@ struct irq_chip msc_edgeirq_type = {
.mask = mask_msc_irq, .mask = mask_msc_irq,
.mask_ack = edge_mask_and_ack_msc_irq, .mask_ack = edge_mask_and_ack_msc_irq,
.unmask = unmask_msc_irq, .unmask = unmask_msc_irq,
.eoi = unmask_msc_irq,
.end = end_msc_irq, .end = end_msc_irq,
}; };
......
...@@ -114,7 +114,8 @@ void __init mv64340_irq_init(unsigned int base) ...@@ -114,7 +114,8 @@ void __init mv64340_irq_init(unsigned int base)
int i; int i;
for (i = base; i < base + 64; i++) for (i = base; i < base + 64; i++)
set_irq_chip(i, &mv64340_irq_type); set_irq_chip_and_handler(i, &mv64340_irq_type,
handle_level_irq);
irq_base = base; irq_base = base;
} }
...@@ -51,7 +51,8 @@ void __init rm7k_cpu_irq_init(int base) ...@@ -51,7 +51,8 @@ void __init rm7k_cpu_irq_init(int base)
clear_c0_intcontrol(0x00000f00); /* Mask all */ clear_c0_intcontrol(0x00000f00); /* Mask all */
for (i = base; i < base + 4; i++) for (i = base; i < base + 4; i++)
set_irq_chip(i, &rm7k_irq_controller); set_irq_chip_and_handler(i, &rm7k_irq_controller,
handle_level_irq);
irq_base = base; irq_base = base;
} }
...@@ -117,10 +117,12 @@ void __init rm9k_cpu_irq_init(int base) ...@@ -117,10 +117,12 @@ void __init rm9k_cpu_irq_init(int base)
clear_c0_intcontrol(0x0000f000); /* Mask all */ clear_c0_intcontrol(0x0000f000); /* Mask all */
for (i = base; i < base + 4; i++) for (i = base; i < base + 4; i++)
set_irq_chip(i, &rm9k_irq_controller); set_irq_chip_and_handler(i, &rm9k_irq_controller,
handle_level_irq);
rm9000_perfcount_irq = base + 1; rm9000_perfcount_irq = base + 1;
set_irq_chip(rm9000_perfcount_irq, &rm9k_perfcounter_irq); set_irq_chip_and_handler(rm9000_perfcount_irq, &rm9k_perfcounter_irq,
handle_level_irq);
irq_base = base; irq_base = base;
} }
...@@ -62,6 +62,7 @@ static struct irq_chip mips_cpu_irq_controller = { ...@@ -62,6 +62,7 @@ static struct irq_chip mips_cpu_irq_controller = {
.mask = mask_mips_irq, .mask = mask_mips_irq,
.mask_ack = mask_mips_irq, .mask_ack = mask_mips_irq,
.unmask = unmask_mips_irq, .unmask = unmask_mips_irq,
.eoi = unmask_mips_irq,
.end = mips_cpu_irq_end, .end = mips_cpu_irq_end,
}; };
...@@ -104,6 +105,7 @@ static struct irq_chip mips_mt_cpu_irq_controller = { ...@@ -104,6 +105,7 @@ static struct irq_chip mips_mt_cpu_irq_controller = {
.mask = mask_mips_mt_irq, .mask = mask_mips_mt_irq,
.mask_ack = mips_mt_cpu_irq_ack, .mask_ack = mips_mt_cpu_irq_ack,
.unmask = unmask_mips_mt_irq, .unmask = unmask_mips_mt_irq,
.eoi = unmask_mips_mt_irq,
.end = mips_mt_cpu_irq_end, .end = mips_mt_cpu_irq_end,
}; };
...@@ -124,7 +126,8 @@ void __init mips_cpu_irq_init(int irq_base) ...@@ -124,7 +126,8 @@ void __init mips_cpu_irq_init(int irq_base)
set_irq_chip(i, &mips_mt_cpu_irq_controller); set_irq_chip(i, &mips_mt_cpu_irq_controller);
for (i = irq_base + 2; i < irq_base + 8; i++) for (i = irq_base + 2; i < irq_base + 8; i++)
set_irq_chip(i, &mips_cpu_irq_controller); set_irq_chip_and_handler(i, &mips_cpu_irq_controller,
handle_level_irq);
mips_cpu_irq_base = irq_base; mips_cpu_irq_base = irq_base;
} }
...@@ -278,7 +278,9 @@ void __init plat_prepare_cpus(unsigned int max_cpus) ...@@ -278,7 +278,9 @@ void __init plat_prepare_cpus(unsigned int max_cpus)
/* need to mark IPI's as IRQ_PER_CPU */ /* need to mark IPI's as IRQ_PER_CPU */
irq_desc[cpu_ipi_resched_irq].status |= IRQ_PER_CPU; irq_desc[cpu_ipi_resched_irq].status |= IRQ_PER_CPU;
set_irq_handler(cpu_ipi_resched_irq, handle_percpu_irq);
irq_desc[cpu_ipi_call_irq].status |= IRQ_PER_CPU; irq_desc[cpu_ipi_call_irq].status |= IRQ_PER_CPU;
set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq);
} }
/* /*
......
...@@ -1009,6 +1009,7 @@ void setup_cross_vpe_interrupts(void) ...@@ -1009,6 +1009,7 @@ void setup_cross_vpe_interrupts(void)
setup_irq_smtc(cpu_ipi_irq, &irq_ipi, (0x100 << MIPS_CPU_IPI_IRQ)); setup_irq_smtc(cpu_ipi_irq, &irq_ipi, (0x100 << MIPS_CPU_IPI_IRQ));
irq_desc[cpu_ipi_irq].status |= IRQ_PER_CPU; irq_desc[cpu_ipi_irq].status |= IRQ_PER_CPU;
set_irq_handler(cpu_ipi_irq, handle_percpu_irq);
} }
/* /*
......
...@@ -133,5 +133,5 @@ void __init arch_init_irq(void) ...@@ -133,5 +133,5 @@ void __init arch_init_irq(void)
} }
for (i = 0; i <= LASATINT_END; i++) for (i = 0; i <= LASATINT_END; i++)
set_irq_chip(i, &lasat_irq_type); set_irq_chip_and_handler(i, &lasat_irq_type, handle_level_irq);
} }
...@@ -74,6 +74,7 @@ static struct irq_chip atlas_irq_type = { ...@@ -74,6 +74,7 @@ static struct irq_chip atlas_irq_type = {
.mask = disable_atlas_irq, .mask = disable_atlas_irq,
.mask_ack = disable_atlas_irq, .mask_ack = disable_atlas_irq,
.unmask = enable_atlas_irq, .unmask = enable_atlas_irq,
.eoi = enable_atlas_irq,
.end = end_atlas_irq, .end = end_atlas_irq,
}; };
...@@ -207,7 +208,7 @@ static inline void init_atlas_irqs (int base) ...@@ -207,7 +208,7 @@ static inline void init_atlas_irqs (int base)
atlas_hw0_icregs->intrsten = 0xffffffff; atlas_hw0_icregs->intrsten = 0xffffffff;
for (i = ATLAS_INT_BASE; i <= ATLAS_INT_END; i++) for (i = ATLAS_INT_BASE; i <= ATLAS_INT_END; i++)
set_irq_chip(i, &atlas_irq_type); set_irq_chip_and_handler(i, &atlas_irq_type, handle_level_irq);
} }
static struct irqaction atlasirq = { static struct irqaction atlasirq = {
......
...@@ -288,6 +288,7 @@ void __init plat_timer_setup(struct irqaction *irq) ...@@ -288,6 +288,7 @@ void __init plat_timer_setup(struct irqaction *irq)
The effect is that the int remains disabled on the second cpu. The effect is that the int remains disabled on the second cpu.
Mark the interrupt with IRQ_PER_CPU to avoid any confusion */ Mark the interrupt with IRQ_PER_CPU to avoid any confusion */
irq_desc[mips_cpu_timer_irq].status |= IRQ_PER_CPU; irq_desc[mips_cpu_timer_irq].status |= IRQ_PER_CPU;
set_irq_handler(mips_cpu_timer_irq, handle_percpu_irq);
#endif #endif
/* to generate the first timer interrupt */ /* to generate the first timer interrupt */
......
...@@ -203,7 +203,8 @@ void __init plat_timer_setup(struct irqaction *irq) ...@@ -203,7 +203,8 @@ void __init plat_timer_setup(struct irqaction *irq)
on seperate cpu's the first one tries to handle the second interrupt. on seperate cpu's the first one tries to handle the second interrupt.
The effect is that the int remains disabled on the second cpu. The effect is that the int remains disabled on the second cpu.
Mark the interrupt with IRQ_PER_CPU to avoid any confusion */ Mark the interrupt with IRQ_PER_CPU to avoid any confusion */
irq_desc[mips_cpu_timer_irq].status |= IRQ_PER_CPU; irq_desc[mips_cpu_timer_irq].flags |= IRQ_PER_CPU;
set_irq_handler(mips_cpu_timer_irq, handle_percpu_irq);
#endif #endif
/* to generate the first timer interrupt */ /* to generate the first timer interrupt */
......
...@@ -106,5 +106,5 @@ void cpci_irq_init(void) ...@@ -106,5 +106,5 @@ void cpci_irq_init(void)
int i; int i;
for (i = CPCI_IRQ_BASE; i < (CPCI_IRQ_BASE + 8); i++) for (i = CPCI_IRQ_BASE; i < (CPCI_IRQ_BASE + 8); i++)
set_irq_chip(i, &cpci_irq_type); set_irq_chip_and_handler(i, &cpci_irq_type, handle_level_irq);
} }
...@@ -96,6 +96,6 @@ struct irq_chip uart_irq_type = { ...@@ -96,6 +96,6 @@ struct irq_chip uart_irq_type = {
void uart_irq_init(void) void uart_irq_init(void)
{ {
set_irq_chip(80, &uart_irq_type); set_irq_chip_and_handler(80, &uart_irq_type, handle_level_irq);
set_irq_chip(81, &uart_irq_type); set_irq_chip_and_handler(81, &uart_irq_type, handle_level_irq);
} }
...@@ -192,7 +192,7 @@ void __init arch_init_irq(void) ...@@ -192,7 +192,7 @@ void __init arch_init_irq(void)
int configPR; int configPR;
for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++) { for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++) {
set_irq_chip(i, &level_irq_type); set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq);
mask_irq(i); /* mask the irq just in case */ mask_irq(i); /* mask the irq just in case */
} }
...@@ -229,7 +229,7 @@ void __init arch_init_irq(void) ...@@ -229,7 +229,7 @@ void __init arch_init_irq(void)
/* mask/priority is still 0 so we will not get any /* mask/priority is still 0 so we will not get any
* interrupts until it is unmasked */ * interrupts until it is unmasked */
set_irq_chip(i, &level_irq_type); set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq);
} }
/* Priority level 0 */ /* Priority level 0 */
...@@ -238,19 +238,21 @@ void __init arch_init_irq(void) ...@@ -238,19 +238,21 @@ void __init arch_init_irq(void)
/* Set int vector table address */ /* Set int vector table address */
PNX8550_GIC_VECTOR_0 = PNX8550_GIC_VECTOR_1 = 0; PNX8550_GIC_VECTOR_0 = PNX8550_GIC_VECTOR_1 = 0;
set_irq_chip(MIPS_CPU_GIC_IRQ, &level_irq_type); set_irq_chip_and_handler(MIPS_CPU_GIC_IRQ, &level_irq_type,
handle_level_irq);
setup_irq(MIPS_CPU_GIC_IRQ, &gic_action); setup_irq(MIPS_CPU_GIC_IRQ, &gic_action);
/* init of Timer interrupts */ /* init of Timer interrupts */
for (i = PNX8550_INT_TIMER_MIN; i <= PNX8550_INT_TIMER_MAX; i++) for (i = PNX8550_INT_TIMER_MIN; i <= PNX8550_INT_TIMER_MAX; i++)
set_irq_chip(i, &level_irq_type); set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq);
/* Stop Timer 1-3 */ /* Stop Timer 1-3 */
configPR = read_c0_config7(); configPR = read_c0_config7();
configPR |= 0x00000038; configPR |= 0x00000038;
write_c0_config7(configPR); write_c0_config7(configPR);
set_irq_chip(MIPS_CPU_TIMER_IRQ, &level_irq_type); set_irq_chip_and_handler(MIPS_CPU_TIMER_IRQ, &level_irq_type,
handle_level_irq);
setup_irq(MIPS_CPU_TIMER_IRQ, &timer_action); setup_irq(MIPS_CPU_TIMER_IRQ, &timer_action);
} }
......
...@@ -358,7 +358,7 @@ void __init arch_init_irq(void) ...@@ -358,7 +358,7 @@ void __init arch_init_irq(void)
else else
handler = &ip22_local3_irq_type; handler = &ip22_local3_irq_type;
set_irq_chip(i, handler); set_irq_chip_and_handler(i, handler, handle_level_irq);
} }
/* vector handler. this register the IRQ as non-sharable */ /* vector handler. this register the IRQ as non-sharable */
......
...@@ -352,7 +352,7 @@ static struct irq_chip bridge_irq_type = { ...@@ -352,7 +352,7 @@ static struct irq_chip bridge_irq_type = {
void __devinit register_bridge_irq(unsigned int irq) void __devinit register_bridge_irq(unsigned int irq)
{ {
set_irq_chip(irq, &bridge_irq_type); set_irq_chip_and_handler(irq, &bridge_irq_type, handle_level_irq);
} }
int __devinit request_bridge_irq(struct bridge_controller *bc) int __devinit request_bridge_irq(struct bridge_controller *bc)
......
...@@ -190,6 +190,7 @@ static struct irq_chip rt_irq_type = { ...@@ -190,6 +190,7 @@ static struct irq_chip rt_irq_type = {
.mask = disable_rt_irq, .mask = disable_rt_irq,
.mask_ack = disable_rt_irq, .mask_ack = disable_rt_irq,
.unmask = enable_rt_irq, .unmask = enable_rt_irq,
.eoi = enable_rt_irq,
.end = end_rt_irq, .end = end_rt_irq,
}; };
...@@ -207,7 +208,7 @@ void __init plat_timer_setup(struct irqaction *irq) ...@@ -207,7 +208,7 @@ void __init plat_timer_setup(struct irqaction *irq)
if (irqno < 0) if (irqno < 0)
panic("Can't allocate interrupt number for timer interrupt"); panic("Can't allocate interrupt number for timer interrupt");
set_irq_chip(irqno, &rt_irq_type); set_irq_chip_and_handler(irqno, &rt_irq_type, handle_percpu_irq);
/* over-write the handler, we use our own way */ /* over-write the handler, we use our own way */
irq->handler = no_action; irq->handler = no_action;
......
...@@ -196,7 +196,8 @@ static void __init tx4927_irq_cp0_init(void) ...@@ -196,7 +196,8 @@ static void __init tx4927_irq_cp0_init(void)
TX4927_IRQ_CP0_BEG, TX4927_IRQ_CP0_END); TX4927_IRQ_CP0_BEG, TX4927_IRQ_CP0_END);
for (i = TX4927_IRQ_CP0_BEG; i <= TX4927_IRQ_CP0_END; i++) for (i = TX4927_IRQ_CP0_BEG; i <= TX4927_IRQ_CP0_END; i++)
set_irq_chip(i, &tx4927_irq_cp0_type); set_irq_chip_and_handler(i, &tx4927_irq_cp0_type,
handle_level_irq);
} }
static void tx4927_irq_cp0_enable(unsigned int irq) static void tx4927_irq_cp0_enable(unsigned int irq)
...@@ -350,7 +351,8 @@ static void __init tx4927_irq_pic_init(void) ...@@ -350,7 +351,8 @@ static void __init tx4927_irq_pic_init(void)
TX4927_IRQ_PIC_BEG, TX4927_IRQ_PIC_END); TX4927_IRQ_PIC_BEG, TX4927_IRQ_PIC_END);
for (i = TX4927_IRQ_PIC_BEG; i <= TX4927_IRQ_PIC_END; i++) for (i = TX4927_IRQ_PIC_BEG; i <= TX4927_IRQ_PIC_END; i++)
set_irq_chip(i, &tx4927_irq_pic_type); set_irq_chip_and_handler(i, &tx4927_irq_pic_type,
handle_level_irq);
setup_irq(TX4927_IRQ_NEST_PIC_ON_CP0, &tx4927_irq_pic_action); setup_irq(TX4927_IRQ_NEST_PIC_ON_CP0, &tx4927_irq_pic_action);
......
...@@ -342,7 +342,8 @@ static void __init toshiba_rbtx4927_irq_ioc_init(void) ...@@ -342,7 +342,8 @@ static void __init toshiba_rbtx4927_irq_ioc_init(void)
for (i = TOSHIBA_RBTX4927_IRQ_IOC_BEG; for (i = TOSHIBA_RBTX4927_IRQ_IOC_BEG;
i <= TOSHIBA_RBTX4927_IRQ_IOC_END; i++) i <= TOSHIBA_RBTX4927_IRQ_IOC_END; i++)
set_irq_chip(i, &toshiba_rbtx4927_irq_ioc_type); set_irq_chip_and_handler(i, &toshiba_rbtx4927_irq_ioc_type,
handle_level_irq);
setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_IOC_ON_PIC, setup_irq(TOSHIBA_RBTX4927_IRQ_NEST_IOC_ON_PIC,
&toshiba_rbtx4927_irq_ioc_action); &toshiba_rbtx4927_irq_ioc_action);
......
...@@ -88,7 +88,8 @@ tx4938_irq_cp0_init(void) ...@@ -88,7 +88,8 @@ tx4938_irq_cp0_init(void)
int i; int i;
for (i = TX4938_IRQ_CP0_BEG; i <= TX4938_IRQ_CP0_END; i++) for (i = TX4938_IRQ_CP0_BEG; i <= TX4938_IRQ_CP0_END; i++)
set_irq_chip(i, &tx4938_irq_cp0_type); set_irq_chip_and_handler(i, &tx4938_irq_cp0_type,
handle_level_irq);
} }
static void static void
...@@ -245,7 +246,8 @@ tx4938_irq_pic_init(void) ...@@ -245,7 +246,8 @@ tx4938_irq_pic_init(void)
int i; int i;
for (i = TX4938_IRQ_PIC_BEG; i <= TX4938_IRQ_PIC_END; i++) for (i = TX4938_IRQ_PIC_BEG; i <= TX4938_IRQ_PIC_END; i++)
set_irq_chip(i, &tx4938_irq_pic_type); set_irq_chip_and_handler(i, &tx4938_irq_pic_type,
handle_level_irq);
setup_irq(TX4938_IRQ_NEST_PIC_ON_CP0, &tx4938_irq_pic_action); setup_irq(TX4938_IRQ_NEST_PIC_ON_CP0, &tx4938_irq_pic_action);
......
...@@ -136,7 +136,8 @@ toshiba_rbtx4938_irq_ioc_init(void) ...@@ -136,7 +136,8 @@ toshiba_rbtx4938_irq_ioc_init(void)
for (i = TOSHIBA_RBTX4938_IRQ_IOC_BEG; for (i = TOSHIBA_RBTX4938_IRQ_IOC_BEG;
i <= TOSHIBA_RBTX4938_IRQ_IOC_END; i++) i <= TOSHIBA_RBTX4938_IRQ_IOC_END; i++)
set_irq_chip(i, &toshiba_rbtx4938_irq_ioc_type); set_irq_chip_and_handler(i, &toshiba_rbtx4938_irq_ioc_type,
handle_level_irq);
setup_irq(RBTX4938_IRQ_IOCINT, setup_irq(RBTX4938_IRQ_IOCINT,
&toshiba_rbtx4938_irq_ioc_action); &toshiba_rbtx4938_irq_ioc_action);
......
...@@ -701,10 +701,12 @@ static int __init vr41xx_icu_init(void) ...@@ -701,10 +701,12 @@ static int __init vr41xx_icu_init(void)
icu2_write(MGIUINTHREG, 0xffff); icu2_write(MGIUINTHREG, 0xffff);
for (i = SYSINT1_IRQ_BASE; i <= SYSINT1_IRQ_LAST; i++) for (i = SYSINT1_IRQ_BASE; i <= SYSINT1_IRQ_LAST; i++)
set_irq_chip(i, &sysint1_irq_type); set_irq_chip_and_handler(i, &sysint1_irq_type,
handle_level_irq);
for (i = SYSINT2_IRQ_BASE; i <= SYSINT2_IRQ_LAST; i++) for (i = SYSINT2_IRQ_BASE; i <= SYSINT2_IRQ_LAST; i++)
set_irq_chip(i, &sysint2_irq_type); set_irq_chip_and_handler(i, &sysint2_irq_type,
handle_level_irq);
cascade_irq(INT0_IRQ, icu_get_irq); cascade_irq(INT0_IRQ, icu_get_irq);
cascade_irq(INT1_IRQ, icu_get_irq); cascade_irq(INT1_IRQ, icu_get_irq);
......
...@@ -57,7 +57,7 @@ do { \ ...@@ -57,7 +57,7 @@ do { \
do { \ do { \
irq_enter(); \ irq_enter(); \
__DO_IRQ_SMTC_HOOK(); \ __DO_IRQ_SMTC_HOOK(); \
__do_IRQ((irq)); \ generic_handle_irq(irq); \
irq_exit(); \ irq_exit(); \
} while (0) } while (0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册