diff options
Diffstat (limited to 'arch/arc/kernel/intc-arcv2.c')
-rw-r--r-- | arch/arc/kernel/intc-arcv2.c | 17 |
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 | ||
140 | static struct irq_domain *root_domain; | ||
141 | 140 | ||
142 | static int __init | 141 | static int __init |
143 | init_onchip_IRQ(struct device_node *intc, struct device_node *parent) | 142 | init_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 | ||