|
@@ -263,7 +263,7 @@ static int __init omap_init_irq_of(struct device_node *node)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int __init omap_init_irq_legacy(u32 base)
|
|
|
+static int __init omap_init_irq_legacy(u32 base, struct device_node *node)
|
|
|
{
|
|
|
int j, irq_base;
|
|
|
|
|
@@ -277,7 +277,7 @@ static int __init omap_init_irq_legacy(u32 base)
|
|
|
irq_base = 0;
|
|
|
}
|
|
|
|
|
|
- domain = irq_domain_add_legacy(NULL, omap_nr_irqs, irq_base, 0,
|
|
|
+ domain = irq_domain_add_legacy(node, omap_nr_irqs, irq_base, 0,
|
|
|
&irq_domain_simple_ops, NULL);
|
|
|
|
|
|
omap_irq_soft_reset();
|
|
@@ -301,10 +301,26 @@ static int __init omap_init_irq(u32 base, struct device_node *node)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- if (node)
|
|
|
+ /*
|
|
|
+ * FIXME legacy OMAP DMA driver sitting under arch/arm/plat-omap/dma.c
|
|
|
+ * depends is still not ready for linear IRQ domains; because of that
|
|
|
+ * we need to temporarily "blacklist" OMAP2 and OMAP3 devices from using
|
|
|
+ * linear IRQ Domain until that driver is finally fixed.
|
|
|
+ */
|
|
|
+ if (of_device_is_compatible(node, "ti,omap2-intc") ||
|
|
|
+ of_device_is_compatible(node, "ti,omap3-intc")) {
|
|
|
+ struct resource res;
|
|
|
+
|
|
|
+ if (of_address_to_resource(node, 0, &res))
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ base = res.start;
|
|
|
+ ret = omap_init_irq_legacy(base, node);
|
|
|
+ } else if (node) {
|
|
|
ret = omap_init_irq_of(node);
|
|
|
- else
|
|
|
- ret = omap_init_irq_legacy(base);
|
|
|
+ } else {
|
|
|
+ ret = omap_init_irq_legacy(base, NULL);
|
|
|
+ }
|
|
|
|
|
|
if (ret == 0)
|
|
|
omap_irq_enable_protection();
|