summaryrefslogtreecommitdiffstats
path: root/drivers/irqchip
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2015-01-29 06:14:09 -0500
committerRalf Baechle <ralf@linux-mips.org>2015-03-31 06:04:12 -0400
commit6429e2b6fc05d8640bb94f5b67c047e936707f31 (patch)
tree029162d8efc226f09e096d0bbbabc573f4159a02 /drivers/irqchip
parentb720fd8b66151a8bdf6ec1be32c338d73592ff15 (diff)
IRQCHIP: mips-gic: Add function for retrieving FDC IRQ
Add a function to the MIPS GIC driver for retrieving the Fast Debug Channel (FDC) interrupt number, similar to the existing ones for the timer and perf counter interrupts. This will be used by platform implementations of get_c0_fdc_int() if a GIC is present. A workaround exists for interAptiv and proAptiv which claim to be able to route the FDC interrupt but don't seem to be able to in practice (at least on Malta). [ralf@linux-mips.org: Fix conflict.] 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/9142/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'drivers/irqchip')
-rw-r--r--drivers/irqchip/irq-mips-gic.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index c8699eec3930..827cf9b9db39 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -227,6 +227,29 @@ int gic_get_c0_perfcount_int(void)
227 GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_PERFCTR)); 227 GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_PERFCTR));
228} 228}
229 229
230int gic_get_c0_fdc_int(void)
231{
232 if (!gic_local_irq_is_routable(GIC_LOCAL_INT_FDC)) {
233 /* Is the FDC IRQ even present? */
234 if (cp0_fdc_irq < 0)
235 return -1;
236 return MIPS_CPU_IRQ_BASE + cp0_fdc_irq;
237 }
238
239 /*
240 * Some cores claim the FDC is routable but it doesn't actually seem to
241 * be connected.
242 */
243 switch (current_cpu_type()) {
244 case CPU_INTERAPTIV:
245 case CPU_PROAPTIV:
246 return -1;
247 }
248
249 return irq_create_mapping(gic_irq_domain,
250 GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_FDC));
251}
252
230static void gic_handle_shared_int(void) 253static void gic_handle_shared_int(void)
231{ 254{
232 unsigned int i, intr, virq; 255 unsigned int i, intr, virq;