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 | ||
