summaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/irq.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-10-04 21:47:03 +0200
committerPaul Mundt <lethal@linux-sh.org>2010-10-04 21:47:03 +0200
commitc1e30ad98fe210688edca872686db4a715c2fb23 (patch)
tree1ff151ccc9658d7a2d89da9cfc6a2d6817913a79 /arch/sh/kernel/irq.c
parentsh: intc: Implement reverse mapping for IRQs to per-controller IDs. (diff)
downloadlinux-c1e30ad98fe210688edca872686db4a715c2fb23.tar.xz
linux-c1e30ad98fe210688edca872686db4a715c2fb23.zip
sh: intc: Support virtual mappings for IRQ subgroups.
Many interrupts that share a single mask source but are on different hardware vectors will have an associated register tied to an INTEVT that denotes the precise cause for the interrupt exception being triggered. This introduces the concept of IRQ subgroups in the intc core, where a virtual IRQ map is constructed for each of the pre-defined cause bits, and a higher level chained handler takes control of the parent INTEVT. This enables CPUs with heavily muxed IRQ vectors (especially across disjoint blocks) to break things out in to a series of managed chained handlers while being able to dynamically lookup and adopt the IRQs created for them. This is largely an opt-in interface, requiring CPUs to manually submit IRQs for subgroup splitting, in addition to providing identifiers in their enum maps that can be used for lazy lookup via the radix tree. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/irq.c')
-rw-r--r--arch/sh/kernel/irq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c
index 257de1f0692b..c8e1409f20a2 100644
--- a/arch/sh/kernel/irq.c
+++ b/arch/sh/kernel/irq.c
@@ -283,6 +283,8 @@ void __init init_IRQ(void)
if (sh_mv.mv_init_irq)
sh_mv.mv_init_irq();
+ intc_finalize();
+
irq_ctx_init(smp_processor_id());
}