aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arc/kernel/intc-arcv2.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arc/kernel/intc-arcv2.c')
-rw-r--r--arch/arc/kernel/intc-arcv2.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c
index 942526322ae7..6c24faf48b16 100644
--- a/arch/arc/kernel/intc-arcv2.c
+++ b/arch/arc/kernel/intc-arcv2.c
@@ -137,23 +137,30 @@ static const struct irq_domain_ops arcv2_irq_ops = {
137 .map = arcv2_irq_map, 137 .map = arcv2_irq_map,
138}; 138};
139 139
140static struct irq_domain *root_domain;
141 140
142static int __init 141static int __init
143init_onchip_IRQ(struct device_node *intc, struct device_node *parent) 142init_onchip_IRQ(struct device_node *intc, struct device_node *parent)
144{ 143{
144 struct irq_domain *root_domain;
145
145 if (parent) 146 if (parent)
146 panic("DeviceTree incore intc not a root irq controller\n"); 147 panic("DeviceTree incore intc not a root irq controller\n");
147 148
148 root_domain = irq_domain_add_legacy(intc, NR_CPU_IRQS, 0, 0, 149 root_domain = irq_domain_add_linear(intc, NR_CPU_IRQS, &arcv2_irq_ops, NULL);
149 &arcv2_irq_ops, NULL);
150
151 if (!root_domain) 150 if (!root_domain)
152 panic("root irq domain not avail\n"); 151 panic("root irq domain not avail\n");
153 152
154 /* with this we don't need to export root_domain */ 153 /*
154 * Needed for primary domain lookup to succeed
155 * This is a primary irqchip, and can never have a parent
156 */
155 irq_set_default_host(root_domain); 157 irq_set_default_host(root_domain);
156 158
159#ifdef CONFIG_SMP
160 irq_create_mapping(root_domain, IPI_IRQ);
161#endif
162 irq_create_mapping(root_domain, SOFTIRQ_IRQ);
163
157 return 0; 164 return 0;
158} 165}
159 166