You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[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: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
1603b5aca4
commit
1417836e81
@@ -103,9 +103,11 @@ void __init init_ioasic_irqs(int base)
|
||||
fast_iob();
|
||||
|
||||
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++)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ void __init init_kn02_irqs(int base)
|
||||
iob();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,8 @@ void emma2rh_irq_init(u32 irq_base)
|
||||
u32 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;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ void emma2rh_sw_irq_init(u32 irq_base)
|
||||
u32 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;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ void __init init_r4030_ints(void)
|
||||
int 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_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */
|
||||
|
||||
@@ -117,6 +117,7 @@ struct irq_chip msc_levelirq_type = {
|
||||
.mask = mask_msc_irq,
|
||||
.mask_ack = level_mask_and_ack_msc_irq,
|
||||
.unmask = unmask_msc_irq,
|
||||
.eoi = unmask_msc_irq,
|
||||
.end = end_msc_irq,
|
||||
};
|
||||
|
||||
@@ -126,6 +127,7 @@ struct irq_chip msc_edgeirq_type = {
|
||||
.mask = mask_msc_irq,
|
||||
.mask_ack = edge_mask_and_ack_msc_irq,
|
||||
.unmask = unmask_msc_irq,
|
||||
.eoi = unmask_msc_irq,
|
||||
.end = end_msc_irq,
|
||||
};
|
||||
|
||||
|
||||
@@ -114,7 +114,8 @@ void __init mv64340_irq_init(unsigned int base)
|
||||
int 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;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,8 @@ void __init rm7k_cpu_irq_init(int base)
|
||||
clear_c0_intcontrol(0x00000f00); /* Mask all */
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -117,10 +117,12 @@ void __init rm9k_cpu_irq_init(int base)
|
||||
clear_c0_intcontrol(0x0000f000); /* Mask all */
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ static struct irq_chip mips_cpu_irq_controller = {
|
||||
.mask = mask_mips_irq,
|
||||
.mask_ack = mask_mips_irq,
|
||||
.unmask = unmask_mips_irq,
|
||||
.eoi = unmask_mips_irq,
|
||||
.end = mips_cpu_irq_end,
|
||||
};
|
||||
|
||||
@@ -104,6 +105,7 @@ static struct irq_chip mips_mt_cpu_irq_controller = {
|
||||
.mask = mask_mips_mt_irq,
|
||||
.mask_ack = mips_mt_cpu_irq_ack,
|
||||
.unmask = unmask_mips_mt_irq,
|
||||
.eoi = unmask_mips_mt_irq,
|
||||
.end = mips_mt_cpu_irq_end,
|
||||
};
|
||||
|
||||
@@ -124,7 +126,8 @@ void __init mips_cpu_irq_init(int irq_base)
|
||||
set_irq_chip(i, &mips_mt_cpu_irq_controller);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -278,7 +278,9 @@ void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
|
||||
/* need to mark IPI's as 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;
|
||||
set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1009,6 +1009,7 @@ void setup_cross_vpe_interrupts(void)
|
||||
setup_irq_smtc(cpu_ipi_irq, &irq_ipi, (0x100 << MIPS_CPU_IPI_IRQ));
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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 = {
|
||||
.mask = disable_atlas_irq,
|
||||
.mask_ack = disable_atlas_irq,
|
||||
.unmask = enable_atlas_irq,
|
||||
.eoi = enable_atlas_irq,
|
||||
.end = end_atlas_irq,
|
||||
};
|
||||
|
||||
@@ -207,7 +208,7 @@ static inline void init_atlas_irqs (int base)
|
||||
atlas_hw0_icregs->intrsten = 0xffffffff;
|
||||
|
||||
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 = {
|
||||
|
||||
@@ -288,6 +288,7 @@ void __init plat_timer_setup(struct irqaction *irq)
|
||||
The effect is that the int remains disabled on the second cpu.
|
||||
Mark the interrupt with IRQ_PER_CPU to avoid any confusion */
|
||||
irq_desc[mips_cpu_timer_irq].status |= IRQ_PER_CPU;
|
||||
set_irq_handler(mips_cpu_timer_irq, handle_percpu_irq);
|
||||
#endif
|
||||
|
||||
/* to generate the first timer interrupt */
|
||||
|
||||
@@ -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.
|
||||
The effect is that the int remains disabled on the second cpu.
|
||||
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
|
||||
|
||||
/* to generate the first timer interrupt */
|
||||
|
||||
@@ -106,5 +106,5 @@ void cpci_irq_init(void)
|
||||
int 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 = {
|
||||
|
||||
void uart_irq_init(void)
|
||||
{
|
||||
set_irq_chip(80, &uart_irq_type);
|
||||
set_irq_chip(81, &uart_irq_type);
|
||||
set_irq_chip_and_handler(80, &uart_irq_type, handle_level_irq);
|
||||
set_irq_chip_and_handler(81, &uart_irq_type, handle_level_irq);
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ void __init arch_init_irq(void)
|
||||
int configPR;
|
||||
|
||||
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 */
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ void __init arch_init_irq(void)
|
||||
/* mask/priority is still 0 so we will not get any
|
||||
* 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 */
|
||||
@@ -238,19 +238,21 @@ void __init arch_init_irq(void)
|
||||
/* Set int vector table address */
|
||||
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);
|
||||
|
||||
/* init of Timer interrupts */
|
||||
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 */
|
||||
configPR = read_c0_config7();
|
||||
configPR |= 0x00000038;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@ void __init arch_init_irq(void)
|
||||
else
|
||||
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 */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user