|
@@ -94,6 +94,24 @@ static struct irq_chip mips_mt_cpu_irq_controller = {
|
|
.irq_eoi = unmask_mips_irq,
|
|
.irq_eoi = unmask_mips_irq,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+asmlinkage void __weak plat_irq_dispatch(void)
|
|
|
|
+{
|
|
|
|
+ unsigned long pending = read_c0_cause() & read_c0_status() & ST0_IM;
|
|
|
|
+ int irq;
|
|
|
|
+
|
|
|
|
+ if (!pending) {
|
|
|
|
+ spurious_interrupt();
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pending >>= CAUSEB_IP;
|
|
|
|
+ while (pending) {
|
|
|
|
+ irq = fls(pending) - 1;
|
|
|
|
+ do_IRQ(MIPS_CPU_IRQ_BASE + irq);
|
|
|
|
+ pending &= ~BIT(irq);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
static int mips_cpu_intc_map(struct irq_domain *d, unsigned int irq,
|
|
static int mips_cpu_intc_map(struct irq_domain *d, unsigned int irq,
|
|
irq_hw_number_t hw)
|
|
irq_hw_number_t hw)
|
|
{
|
|
{
|