aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2015-01-29 06:14:08 -0500
committerRalf Baechle <ralf@linux-mips.org>2015-03-31 06:04:12 -0400
commitb720fd8b66151a8bdf6ec1be32c338d73592ff15 (patch)
treeeaa54d5c015f9599155b5010c9b7eca051c39721
parent8f7ff027965619b17488141a5f39d14c850696ab (diff)
irqchip: mips-gic: Don't treat FDC IRQ as percpu devid
Treat the Fast Debug Channel (FDC) interrupt the same as the timer and performance counter interrupts. Like them, the FDC IRQ is also per-VPE, and also doesn't use a per-CPU device ID yet. Per-CPU device IDs don't seem to work with IRQF_SHARED which is needed for compatibility with cores which don't route the FDC IRQ through the GIC. For hardware which routes FDC IRQs through the GIC this is something that could be added later. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Andrew Bresticker <abrestic@chromium.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jason Cooper <jason@lakedaemon.net> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/9141/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r--drivers/irqchip/irq-mips-gic.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index ef09a914a3b6..c8699eec3930 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -592,15 +592,20 @@ static int gic_local_irq_domain_map(struct irq_domain *d, unsigned int virq,
592 * of the MIPS kernel code does not use the percpu IRQ API for 592 * of the MIPS kernel code does not use the percpu IRQ API for
593 * the CP0 timer and performance counter interrupts. 593 * the CP0 timer and performance counter interrupts.
594 */ 594 */
595 if (intr != GIC_LOCAL_INT_TIMER && intr != GIC_LOCAL_INT_PERFCTR) { 595 switch (intr) {
596 case GIC_LOCAL_INT_TIMER:
597 case GIC_LOCAL_INT_PERFCTR:
598 case GIC_LOCAL_INT_FDC:
599 irq_set_chip_and_handler(virq,
600 &gic_all_vpes_local_irq_controller,
601 handle_percpu_irq);
602 break;
603 default:
596 irq_set_chip_and_handler(virq, 604 irq_set_chip_and_handler(virq,
597 &gic_local_irq_controller, 605 &gic_local_irq_controller,
598 handle_percpu_devid_irq); 606 handle_percpu_devid_irq);
599 irq_set_percpu_devid(virq); 607 irq_set_percpu_devid(virq);
600 } else { 608 break;
601 irq_set_chip_and_handler(virq,
602 &gic_all_vpes_local_irq_controller,
603 handle_percpu_irq);
604 } 609 }
605 610
606 spin_lock_irqsave(&gic_lock, flags); 611 spin_lock_irqsave(&gic_lock, flags);