diff options
Diffstat (limited to 'arch/arm')
138 files changed, 112 insertions, 1899 deletions
diff --git a/arch/arm/common/Kconfig b/arch/arm/common/Kconfig index 45ceeb0e93e0..9353184d730d 100644 --- a/arch/arm/common/Kconfig +++ b/arch/arm/common/Kconfig | |||
| @@ -1,26 +1,3 @@ | |||
| 1 | config ARM_GIC | ||
| 2 | bool | ||
| 3 | select IRQ_DOMAIN | ||
| 4 | select MULTI_IRQ_HANDLER | ||
| 5 | |||
| 6 | config GIC_NON_BANKED | ||
| 7 | bool | ||
| 8 | |||
| 9 | config ARM_VIC | ||
| 10 | bool | ||
| 11 | select IRQ_DOMAIN | ||
| 12 | select MULTI_IRQ_HANDLER | ||
| 13 | |||
| 14 | config ARM_VIC_NR | ||
| 15 | int | ||
| 16 | default 4 if ARCH_S5PV210 | ||
| 17 | default 3 if ARCH_S5PC100 | ||
| 18 | default 2 | ||
| 19 | depends on ARM_VIC | ||
| 20 | help | ||
| 21 | The maximum number of VICs available in the system, for | ||
| 22 | power management. | ||
| 23 | |||
| 24 | config ICST | 1 | config ICST |
| 25 | bool | 2 | bool |
| 26 | 3 | ||
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index e8a4e58f1b82..dc8dd0de5c0f 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile | |||
| @@ -2,8 +2,6 @@ | |||
| 2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_ARM_GIC) += gic.o | ||
| 6 | obj-$(CONFIG_ARM_VIC) += vic.o | ||
| 7 | obj-$(CONFIG_ICST) += icst.o | 5 | obj-$(CONFIG_ICST) += icst.o |
| 8 | obj-$(CONFIG_SA1111) += sa1111.o | 6 | obj-$(CONFIG_SA1111) += sa1111.o |
| 9 | obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o | 7 | obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o |
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c deleted file mode 100644 index 36ae03a3f5d1..000000000000 --- a/arch/arm/common/gic.c +++ /dev/null | |||
| @@ -1,811 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/common/gic.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 2002 ARM Limited, All Rights Reserved. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * Interrupt architecture for the GIC: | ||
| 11 | * | ||
| 12 | * o There is one Interrupt Distributor, which receives interrupts | ||
| 13 | * from system devices and sends them to the Interrupt Controllers. | ||
| 14 | * | ||
| 15 | * o There is one CPU Interface per CPU, which sends interrupts sent | ||
| 16 | * by the Distributor, and interrupts generated locally, to the | ||
| 17 | * associated CPU. The base address of the CPU interface is usually | ||
| 18 | * aliased so that the same address points to different chips depending | ||
| 19 | * on the CPU it is accessed from. | ||
| 20 | * | ||
| 21 | * Note that IRQs 0-31 are special - they are local to each CPU. | ||
| 22 | * As such, the enable set/clear, pending set/clear and active bit | ||
| 23 | * registers are banked per-cpu for these sources. | ||
| 24 | */ | ||
| 25 | #include <linux/init.h> | ||
| 26 | #include <linux/kernel.h> | ||
| 27 | #include <linux/err.h> | ||
| 28 | #include <linux/module.h> | ||
| 29 | #include <linux/list.h> | ||
| 30 | #include <linux/smp.h> | ||
| 31 | #include <linux/cpu_pm.h> | ||
| 32 | #include <linux/cpumask.h> | ||
| 33 | #include <linux/io.h> | ||
| 34 | #include <linux/of.h> | ||
| 35 | #include <linux/of_address.h> | ||
| 36 | #include <linux/of_irq.h> | ||
| 37 | #include <linux/irqdomain.h> | ||
| 38 | #include <linux/interrupt.h> | ||
| 39 | #include <linux/percpu.h> | ||
| 40 | #include <linux/slab.h> | ||
| 41 | |||
| 42 | #include <asm/irq.h> | ||
| 43 | #include <asm/exception.h> | ||
| 44 | #include <asm/smp_plat.h> | ||
| 45 | #include <asm/mach/irq.h> | ||
| 46 | #include <asm/hardware/gic.h> | ||
| 47 | |||
| 48 | union gic_base { | ||
| 49 | void __iomem *common_base; | ||
| 50 | void __percpu __iomem **percpu_base; | ||
| 51 | }; | ||
| 52 | |||
| 53 | struct gic_chip_data { | ||
| 54 | union gic_base dist_base; | ||
| 55 | union gic_base cpu_base; | ||
| 56 | #ifdef CONFIG_CPU_PM | ||
| 57 | u32 saved_spi_enable[DIV_ROUND_UP(1020, 32)]; | ||
| 58 | u32 saved_spi_conf[DIV_ROUND_UP(1020, 16)]; | ||
| 59 | u32 saved_spi_target[DIV_ROUND_UP(1020, 4)]; | ||
| 60 | u32 __percpu *saved_ppi_enable; | ||
| 61 | u32 __percpu *saved_ppi_conf; | ||
| 62 | #endif | ||
| 63 | struct irq_domain *domain; | ||
| 64 | unsigned int gic_irqs; | ||
| 65 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 66 | void __iomem *(*get_base)(union gic_base *); | ||
| 67 | #endif | ||
| 68 | }; | ||
| 69 | |||
| 70 | static DEFINE_RAW_SPINLOCK(irq_controller_lock); | ||
| 71 | |||
| 72 | /* | ||
| 73 | * The GIC mapping of CPU interfaces does not necessarily match | ||
| 74 | * the logical CPU numbering. Let's use a mapping as returned | ||
| 75 | * by the GIC itself. | ||
| 76 | */ | ||
| 77 | #define NR_GIC_CPU_IF 8 | ||
| 78 | static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly; | ||
| 79 | |||
| 80 | /* | ||
| 81 | * Supported arch specific GIC irq extension. | ||
| 82 | * Default make them NULL. | ||
| 83 | */ | ||
| 84 | struct irq_chip gic_arch_extn = { | ||
| 85 | .irq_eoi = NULL, | ||
| 86 | .irq_mask = NULL, | ||
| 87 | .irq_unmask = NULL, | ||
| 88 | .irq_retrigger = NULL, | ||
| 89 | .irq_set_type = NULL, | ||
| 90 | .irq_set_wake = NULL, | ||
| 91 | }; | ||
| 92 | |||
| 93 | #ifndef MAX_GIC_NR | ||
| 94 | #define MAX_GIC_NR 1 | ||
| 95 | #endif | ||
| 96 | |||
| 97 | static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly; | ||
| 98 | |||
| 99 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 100 | static void __iomem *gic_get_percpu_base(union gic_base *base) | ||
| 101 | { | ||
| 102 | return *__this_cpu_ptr(base->percpu_base); | ||
| 103 | } | ||
| 104 | |||
| 105 | static void __iomem *gic_get_common_base(union gic_base *base) | ||
| 106 | { | ||
| 107 | return base->common_base; | ||
| 108 | } | ||
| 109 | |||
| 110 | static inline void __iomem *gic_data_dist_base(struct gic_chip_data *data) | ||
| 111 | { | ||
| 112 | return data->get_base(&data->dist_base); | ||
| 113 | } | ||
| 114 | |||
| 115 | static inline void __iomem *gic_data_cpu_base(struct gic_chip_data *data) | ||
| 116 | { | ||
| 117 | return data->get_base(&data->cpu_base); | ||
| 118 | } | ||
| 119 | |||
| 120 | static inline void gic_set_base_accessor(struct gic_chip_data *data, | ||
| 121 | void __iomem *(*f)(union gic_base *)) | ||
| 122 | { | ||
| 123 | data->get_base = f; | ||
| 124 | } | ||
| 125 | #else | ||
| 126 | #define gic_data_dist_base(d) ((d)->dist_base.common_base) | ||
| 127 | #define gic_data_cpu_base(d) ((d)->cpu_base.common_base) | ||
| 128 | #define gic_set_base_accessor(d,f) | ||
| 129 | #endif | ||
| 130 | |||
| 131 | static inline void __iomem *gic_dist_base(struct irq_data *d) | ||
| 132 | { | ||
| 133 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | ||
| 134 | return gic_data_dist_base(gic_data); | ||
| 135 | } | ||
| 136 | |||
| 137 | static inline void __iomem *gic_cpu_base(struct irq_data *d) | ||
| 138 | { | ||
| 139 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | ||
| 140 | return gic_data_cpu_base(gic_data); | ||
| 141 | } | ||
| 142 | |||
| 143 | static inline unsigned int gic_irq(struct irq_data *d) | ||
| 144 | { | ||
| 145 | return d->hwirq; | ||
| 146 | } | ||
| 147 | |||
| 148 | /* | ||
| 149 | * Routines to acknowledge, disable and enable interrupts | ||
| 150 | */ | ||
| 151 | static void gic_mask_irq(struct irq_data *d) | ||
| 152 | { | ||
| 153 | u32 mask = 1 << (gic_irq(d) % 32); | ||
| 154 | |||
| 155 | raw_spin_lock(&irq_controller_lock); | ||
| 156 | writel_relaxed(mask, gic_dist_base(d) + GIC_DIST_ENABLE_CLEAR + (gic_irq(d) / 32) * 4); | ||
| 157 | if (gic_arch_extn.irq_mask) | ||
| 158 | gic_arch_extn.irq_mask(d); | ||
| 159 | raw_spin_unlock(&irq_controller_lock); | ||
| 160 | } | ||
| 161 | |||
| 162 | static void gic_unmask_irq(struct irq_data *d) | ||
| 163 | { | ||
| 164 | u32 mask = 1 << (gic_irq(d) % 32); | ||
| 165 | |||
| 166 | raw_spin_lock(&irq_controller_lock); | ||
| 167 | if (gic_arch_extn.irq_unmask) | ||
| 168 | gic_arch_extn.irq_unmask(d); | ||
| 169 | writel_relaxed(mask, gic_dist_base(d) + GIC_DIST_ENABLE_SET + (gic_irq(d) / 32) * 4); | ||
| 170 | raw_spin_unlock(&irq_controller_lock); | ||
| 171 | } | ||
| 172 | |||
| 173 | static void gic_eoi_irq(struct irq_data *d) | ||
| 174 | { | ||
| 175 | if (gic_arch_extn.irq_eoi) { | ||
| 176 | raw_spin_lock(&irq_controller_lock); | ||
| 177 | gic_arch_extn.irq_eoi(d); | ||
| 178 | raw_spin_unlock(&irq_controller_lock); | ||
| 179 | } | ||
| 180 | |||
| 181 | writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI); | ||
| 182 | } | ||
| 183 | |||
| 184 | static int gic_set_type(struct irq_data *d, unsigned int type) | ||
| 185 | { | ||
| 186 | void __iomem *base = gic_dist_base(d); | ||
| 187 | unsigned int gicirq = gic_irq(d); | ||
| 188 | u32 enablemask = 1 << (gicirq % 32); | ||
| 189 | u32 enableoff = (gicirq / 32) * 4; | ||
| 190 | u32 confmask = 0x2 << ((gicirq % 16) * 2); | ||
| 191 | u32 confoff = (gicirq / 16) * 4; | ||
| 192 | bool enabled = false; | ||
| 193 | u32 val; | ||
| 194 | |||
| 195 | /* Interrupt configuration for SGIs can't be changed */ | ||
| 196 | if (gicirq < 16) | ||
| 197 | return -EINVAL; | ||
| 198 | |||
| 199 | if (type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING) | ||
| 200 | return -EINVAL; | ||
| 201 | |||
| 202 | raw_spin_lock(&irq_controller_lock); | ||
| 203 | |||
| 204 | if (gic_arch_extn.irq_set_type) | ||
| 205 | gic_arch_extn.irq_set_type(d, type); | ||
| 206 | |||
| 207 | val = readl_relaxed(base + GIC_DIST_CONFIG + confoff); | ||
| 208 | if (type == IRQ_TYPE_LEVEL_HIGH) | ||
| 209 | val &= ~confmask; | ||
| 210 | else if (type == IRQ_TYPE_EDGE_RISING) | ||
| 211 | val |= confmask; | ||
| 212 | |||
| 213 | /* | ||
| 214 | * As recommended by the spec, disable the interrupt before changing | ||
| 215 | * the configuration | ||
| 216 | */ | ||
| 217 | if (readl_relaxed(base + GIC_DIST_ENABLE_SET + enableoff) & enablemask) { | ||
| 218 | writel_relaxed(enablemask, base + GIC_DIST_ENABLE_CLEAR + enableoff); | ||
| 219 | enabled = true; | ||
| 220 | } | ||
| 221 | |||
| 222 | writel_relaxed(val, base + GIC_DIST_CONFIG + confoff); | ||
| 223 | |||
| 224 | if (enabled) | ||
| 225 | writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + enableoff); | ||
| 226 | |||
| 227 | raw_spin_unlock(&irq_controller_lock); | ||
| 228 | |||
| 229 | return 0; | ||
| 230 | } | ||
| 231 | |||
| 232 | static int gic_retrigger(struct irq_data *d) | ||
| 233 | { | ||
| 234 | if (gic_arch_extn.irq_retrigger) | ||
| 235 | return gic_arch_extn.irq_retrigger(d); | ||
| 236 | |||
| 237 | return -ENXIO; | ||
| 238 | } | ||
| 239 | |||
| 240 | #ifdef CONFIG_SMP | ||
| 241 | static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, | ||
| 242 | bool force) | ||
| 243 | { | ||
| 244 | void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3); | ||
| 245 | unsigned int shift = (gic_irq(d) % 4) * 8; | ||
| 246 | unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask); | ||
| 247 | u32 val, mask, bit; | ||
| 248 | |||
| 249 | if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids) | ||
| 250 | return -EINVAL; | ||
| 251 | |||
| 252 | mask = 0xff << shift; | ||
| 253 | bit = gic_cpu_map[cpu] << shift; | ||
| 254 | |||
| 255 | raw_spin_lock(&irq_controller_lock); | ||
| 256 | val = readl_relaxed(reg) & ~mask; | ||
| 257 | writel_relaxed(val | bit, reg); | ||
| 258 | raw_spin_unlock(&irq_controller_lock); | ||
| 259 | |||
| 260 | return IRQ_SET_MASK_OK; | ||
| 261 | } | ||
| 262 | #endif | ||
| 263 | |||
| 264 | #ifdef CONFIG_PM | ||
| 265 | static int gic_set_wake(struct irq_data *d, unsigned int on) | ||
| 266 | { | ||
| 267 | int ret = -ENXIO; | ||
| 268 | |||
| 269 | if (gic_arch_extn.irq_set_wake) | ||
| 270 | ret = gic_arch_extn.irq_set_wake(d, on); | ||
| 271 | |||
| 272 | return ret; | ||
| 273 | } | ||
| 274 | |||
| 275 | #else | ||
| 276 | #define gic_set_wake NULL | ||
| 277 | #endif | ||
| 278 | |||
| 279 | asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) | ||
| 280 | { | ||
| 281 | u32 irqstat, irqnr; | ||
| 282 | struct gic_chip_data *gic = &gic_data[0]; | ||
| 283 | void __iomem *cpu_base = gic_data_cpu_base(gic); | ||
| 284 | |||
| 285 | do { | ||
| 286 | irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK); | ||
| 287 | irqnr = irqstat & ~0x1c00; | ||
| 288 | |||
| 289 | if (likely(irqnr > 15 && irqnr < 1021)) { | ||
| 290 | irqnr = irq_find_mapping(gic->domain, irqnr); | ||
| 291 | handle_IRQ(irqnr, regs); | ||
| 292 | continue; | ||
| 293 | } | ||
| 294 | if (irqnr < 16) { | ||
| 295 | writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI); | ||
| 296 | #ifdef CONFIG_SMP | ||
| 297 | handle_IPI(irqnr, regs); | ||
| 298 | #endif | ||
| 299 | continue; | ||
| 300 | } | ||
| 301 | break; | ||
| 302 | } while (1); | ||
| 303 | } | ||
| 304 | |||
| 305 | static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) | ||
| 306 | { | ||
| 307 | struct gic_chip_data *chip_data = irq_get_handler_data(irq); | ||
| 308 | struct irq_chip *chip = irq_get_chip(irq); | ||
| 309 | unsigned int cascade_irq, gic_irq; | ||
| 310 | unsigned long status; | ||
| 311 | |||
| 312 | chained_irq_enter(chip, desc); | ||
| 313 | |||
| 314 | raw_spin_lock(&irq_controller_lock); | ||
| 315 | status = readl_relaxed(gic_data_cpu_base(chip_data) + GIC_CPU_INTACK); | ||
| 316 | raw_spin_unlock(&irq_controller_lock); | ||
| 317 | |||
| 318 | gic_irq = (status & 0x3ff); | ||
| 319 | if (gic_irq == 1023) | ||
| 320 | goto out; | ||
| 321 | |||
| 322 | cascade_irq = irq_find_mapping(chip_data->domain, gic_irq); | ||
| 323 | if (unlikely(gic_irq < 32 || gic_irq > 1020)) | ||
| 324 | do_bad_IRQ(cascade_irq, desc); | ||
| 325 | else | ||
| 326 | generic_handle_irq(cascade_irq); | ||
| 327 | |||
| 328 | out: | ||
| 329 | chained_irq_exit(chip, desc); | ||
| 330 | } | ||
| 331 | |||
| 332 | static struct irq_chip gic_chip = { | ||
| 333 | .name = "GIC", | ||
| 334 | .irq_mask = gic_mask_irq, | ||
| 335 | .irq_unmask = gic_unmask_irq, | ||
| 336 | .irq_eoi = gic_eoi_irq, | ||
| 337 | .irq_set_type = gic_set_type, | ||
| 338 | .irq_retrigger = gic_retrigger, | ||
| 339 | #ifdef CONFIG_SMP | ||
| 340 | .irq_set_affinity = gic_set_affinity, | ||
| 341 | #endif | ||
| 342 | .irq_set_wake = gic_set_wake, | ||
| 343 | }; | ||
| 344 | |||
| 345 | void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq) | ||
| 346 | { | ||
| 347 | if (gic_nr >= MAX_GIC_NR) | ||
| 348 | BUG(); | ||
| 349 | if (irq_set_handler_data(irq, &gic_data[gic_nr]) != 0) | ||
| 350 | BUG(); | ||
| 351 | irq_set_chained_handler(irq, gic_handle_cascade_irq); | ||
| 352 | } | ||
| 353 | |||
| 354 | static void __init gic_dist_init(struct gic_chip_data *gic) | ||
| 355 | { | ||
| 356 | unsigned int i; | ||
| 357 | u32 cpumask; | ||
| 358 | unsigned int gic_irqs = gic->gic_irqs; | ||
| 359 | void __iomem *base = gic_data_dist_base(gic); | ||
| 360 | |||
| 361 | writel_relaxed(0, base + GIC_DIST_CTRL); | ||
| 362 | |||
| 363 | /* | ||
| 364 | * Set all global interrupts to be level triggered, active low. | ||
| 365 | */ | ||
| 366 | for (i = 32; i < gic_irqs; i += 16) | ||
| 367 | writel_relaxed(0, base + GIC_DIST_CONFIG + i * 4 / 16); | ||
| 368 | |||
| 369 | /* | ||
| 370 | * Set all global interrupts to this CPU only. | ||
| 371 | */ | ||
| 372 | cpumask = readl_relaxed(base + GIC_DIST_TARGET + 0); | ||
| 373 | for (i = 32; i < gic_irqs; i += 4) | ||
| 374 | writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4); | ||
| 375 | |||
| 376 | /* | ||
| 377 | * Set priority on all global interrupts. | ||
| 378 | */ | ||
| 379 | for (i = 32; i < gic_irqs; i += 4) | ||
| 380 | writel_relaxed(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4); | ||
| 381 | |||
| 382 | /* | ||
| 383 | * Disable all interrupts. Leave the PPI and SGIs alone | ||
| 384 | * as these enables are banked registers. | ||
| 385 | */ | ||
| 386 | for (i = 32; i < gic_irqs; i += 32) | ||
| 387 | writel_relaxed(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32); | ||
| 388 | |||
| 389 | writel_relaxed(1, base + GIC_DIST_CTRL); | ||
| 390 | } | ||
| 391 | |||
| 392 | static void __cpuinit gic_cpu_init(struct gic_chip_data *gic) | ||
| 393 | { | ||
| 394 | void __iomem *dist_base = gic_data_dist_base(gic); | ||
| 395 | void __iomem *base = gic_data_cpu_base(gic); | ||
| 396 | unsigned int cpu_mask, cpu = smp_processor_id(); | ||
| 397 | int i; | ||
| 398 | |||
| 399 | /* | ||
| 400 | * Get what the GIC says our CPU mask is. | ||
| 401 | */ | ||
| 402 | BUG_ON(cpu >= NR_GIC_CPU_IF); | ||
| 403 | cpu_mask = readl_relaxed(dist_base + GIC_DIST_TARGET + 0); | ||
| 404 | gic_cpu_map[cpu] = cpu_mask; | ||
| 405 | |||
| 406 | /* | ||
| 407 | * Clear our mask from the other map entries in case they're | ||
| 408 | * still undefined. | ||
| 409 | */ | ||
| 410 | for (i = 0; i < NR_GIC_CPU_IF; i++) | ||
| 411 | if (i != cpu) | ||
| 412 | gic_cpu_map[i] &= ~cpu_mask; | ||
| 413 | |||
| 414 | /* | ||
| 415 | * Deal with the banked PPI and SGI interrupts - disable all | ||
| 416 | * PPI interrupts, ensure all SGI interrupts are enabled. | ||
| 417 | */ | ||
| 418 | writel_relaxed(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR); | ||
| 419 | writel_relaxed(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET); | ||
| 420 | |||
| 421 | /* | ||
| 422 | * Set priority on PPI and SGI interrupts | ||
| 423 | */ | ||
| 424 | for (i = 0; i < 32; i += 4) | ||
| 425 | writel_relaxed(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4); | ||
| 426 | |||
| 427 | writel_relaxed(0xf0, base + GIC_CPU_PRIMASK); | ||
| 428 | writel_relaxed(1, base + GIC_CPU_CTRL); | ||
| 429 | } | ||
| 430 | |||
| 431 | #ifdef CONFIG_CPU_PM | ||
| 432 | /* | ||
| 433 | * Saves the GIC distributor registers during suspend or idle. Must be called | ||
| 434 | * with interrupts disabled but before powering down the GIC. After calling | ||
| 435 | * this function, no interrupts will be delivered by the GIC, and another | ||
| 436 | * platform-specific wakeup source must be enabled. | ||
| 437 | */ | ||
| 438 | static void gic_dist_save(unsigned int gic_nr) | ||
| 439 | { | ||
| 440 | unsigned int gic_irqs; | ||
| 441 | void __iomem *dist_base; | ||
| 442 | int i; | ||
| 443 | |||
| 444 | if (gic_nr >= MAX_GIC_NR) | ||
| 445 | BUG(); | ||
| 446 | |||
| 447 | gic_irqs = gic_data[gic_nr].gic_irqs; | ||
| 448 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); | ||
| 449 | |||
| 450 | if (!dist_base) | ||
| 451 | return; | ||
| 452 | |||
| 453 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 16); i++) | ||
| 454 | gic_data[gic_nr].saved_spi_conf[i] = | ||
| 455 | readl_relaxed(dist_base + GIC_DIST_CONFIG + i * 4); | ||
| 456 | |||
| 457 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++) | ||
| 458 | gic_data[gic_nr].saved_spi_target[i] = | ||
| 459 | readl_relaxed(dist_base + GIC_DIST_TARGET + i * 4); | ||
| 460 | |||
| 461 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 32); i++) | ||
| 462 | gic_data[gic_nr].saved_spi_enable[i] = | ||
| 463 | readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4); | ||
| 464 | } | ||
| 465 | |||
| 466 | /* | ||
| 467 | * Restores the GIC distributor registers during resume or when coming out of | ||
| 468 | * idle. Must be called before enabling interrupts. If a level interrupt | ||
| 469 | * that occured while the GIC was suspended is still present, it will be | ||
| 470 | * handled normally, but any edge interrupts that occured will not be seen by | ||
| 471 | * the GIC and need to be handled by the platform-specific wakeup source. | ||
| 472 | */ | ||
| 473 | static void gic_dist_restore(unsigned int gic_nr) | ||
| 474 | { | ||
| 475 | unsigned int gic_irqs; | ||
| 476 | unsigned int i; | ||
| 477 | void __iomem *dist_base; | ||
| 478 | |||
| 479 | if (gic_nr >= MAX_GIC_NR) | ||
| 480 | BUG(); | ||
| 481 | |||
| 482 | gic_irqs = gic_data[gic_nr].gic_irqs; | ||
| 483 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); | ||
| 484 | |||
| 485 | if (!dist_base) | ||
| 486 | return; | ||
| 487 | |||
| 488 | writel_relaxed(0, dist_base + GIC_DIST_CTRL); | ||
| 489 | |||
| 490 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 16); i++) | ||
| 491 | writel_relaxed(gic_data[gic_nr].saved_spi_conf[i], | ||
| 492 | dist_base + GIC_DIST_CONFIG + i * 4); | ||
| 493 | |||
| 494 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++) | ||
| 495 | writel_relaxed(0xa0a0a0a0, | ||
| 496 | dist_base + GIC_DIST_PRI + i * 4); | ||
| 497 | |||
| 498 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++) | ||
| 499 | writel_relaxed(gic_data[gic_nr].saved_spi_target[i], | ||
| 500 | dist_base + GIC_DIST_TARGET + i * 4); | ||
| 501 | |||
| 502 | for (i = 0; i < DIV_ROUND_UP(gic_irqs, 32); i++) | ||
| 503 | writel_relaxed(gic_data[gic_nr].saved_spi_enable[i], | ||
| 504 | dist_base + GIC_DIST_ENABLE_SET + i * 4); | ||
| 505 | |||
| 506 | writel_relaxed(1, dist_base + GIC_DIST_CTRL); | ||
| 507 | } | ||
| 508 | |||
| 509 | static void gic_cpu_save(unsigned int gic_nr) | ||
| 510 | { | ||
| 511 | int i; | ||
| 512 | u32 *ptr; | ||
| 513 | void __iomem *dist_base; | ||
| 514 | void __iomem *cpu_base; | ||
| 515 | |||
| 516 | if (gic_nr >= MAX_GIC_NR) | ||
| 517 | BUG(); | ||
| 518 | |||
| 519 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); | ||
| 520 | cpu_base = gic_data_cpu_base(&gic_data[gic_nr]); | ||
| 521 | |||
| 522 | if (!dist_base || !cpu_base) | ||
| 523 | return; | ||
| 524 | |||
| 525 | ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_enable); | ||
| 526 | for (i = 0; i < DIV_ROUND_UP(32, 32); i++) | ||
| 527 | ptr[i] = readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4); | ||
| 528 | |||
| 529 | ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_conf); | ||
| 530 | for (i = 0; i < DIV_ROUND_UP(32, 16); i++) | ||
| 531 | ptr[i] = readl_relaxed(dist_base + GIC_DIST_CONFIG + i * 4); | ||
| 532 | |||
| 533 | } | ||
| 534 | |||
| 535 | static void gic_cpu_restore(unsigned int gic_nr) | ||
| 536 | { | ||
| 537 | int i; | ||
| 538 | u32 *ptr; | ||
| 539 | void __iomem *dist_base; | ||
| 540 | void __iomem *cpu_base; | ||
| 541 | |||
| 542 | if (gic_nr >= MAX_GIC_NR) | ||
| 543 | BUG(); | ||
| 544 | |||
| 545 | dist_base = gic_data_dist_base(&gic_data[gic_nr]); | ||
| 546 | cpu_base = gic_data_cpu_base(&gic_data[gic_nr]); | ||
| 547 | |||
| 548 | if (!dist_base || !cpu_base) | ||
| 549 | return; | ||
| 550 | |||
| 551 | ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_enable); | ||
| 552 | for (i = 0; i < DIV_ROUND_UP(32, 32); i++) | ||
| 553 | writel_relaxed(ptr[i], dist_base + GIC_DIST_ENABLE_SET + i * 4); | ||
| 554 | |||
| 555 | ptr = __this_cpu_ptr(gic_data[gic_nr].saved_ppi_conf); | ||
| 556 | for (i = 0; i < DIV_ROUND_UP(32, 16); i++) | ||
| 557 | writel_relaxed(ptr[i], dist_base + GIC_DIST_CONFIG + i * 4); | ||
| 558 | |||
| 559 | for (i = 0; i < DIV_ROUND_UP(32, 4); i++) | ||
| 560 | writel_relaxed(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4); | ||
| 561 | |||
| 562 | writel_relaxed(0xf0, cpu_base + GIC_CPU_PRIMASK); | ||
| 563 | writel_relaxed(1, cpu_base + GIC_CPU_CTRL); | ||
| 564 | } | ||
| 565 | |||
| 566 | static int gic_notifier(struct notifier_block *self, unsigned long cmd, void *v) | ||
| 567 | { | ||
| 568 | int i; | ||
| 569 | |||
| 570 | for (i = 0; i < MAX_GIC_NR; i++) { | ||
| 571 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 572 | /* Skip over unused GICs */ | ||
| 573 | if (!gic_data[i].get_base) | ||
| 574 | continue; | ||
| 575 | #endif | ||
| 576 | switch (cmd) { | ||
| 577 | case CPU_PM_ENTER: | ||
| 578 | gic_cpu_save(i); | ||
| 579 | break; | ||
| 580 | case CPU_PM_ENTER_FAILED: | ||
| 581 | case CPU_PM_EXIT: | ||
| 582 | gic_cpu_restore(i); | ||
| 583 | break; | ||
| 584 | case CPU_CLUSTER_PM_ENTER: | ||
| 585 | gic_dist_save(i); | ||
| 586 | break; | ||
| 587 | case CPU_CLUSTER_PM_ENTER_FAILED: | ||
| 588 | case CPU_CLUSTER_PM_EXIT: | ||
| 589 | gic_dist_restore(i); | ||
| 590 | break; | ||
| 591 | } | ||
| 592 | } | ||
| 593 | |||
| 594 | return NOTIFY_OK; | ||
| 595 | } | ||
| 596 | |||
| 597 | static struct notifier_block gic_notifier_block = { | ||
| 598 | .notifier_call = gic_notifier, | ||
| 599 | }; | ||
| 600 | |||
| 601 | static void __init gic_pm_init(struct gic_chip_data *gic) | ||
| 602 | { | ||
| 603 | gic->saved_ppi_enable = __alloc_percpu(DIV_ROUND_UP(32, 32) * 4, | ||
| 604 | sizeof(u32)); | ||
| 605 | BUG_ON(!gic->saved_ppi_enable); | ||
| 606 | |||
| 607 | gic->saved_ppi_conf = __alloc_percpu(DIV_ROUND_UP(32, 16) * 4, | ||
| 608 | sizeof(u32)); | ||
| 609 | BUG_ON(!gic->saved_ppi_conf); | ||
| 610 | |||
| 611 | if (gic == &gic_data[0]) | ||
| 612 | cpu_pm_register_notifier(&gic_notifier_block); | ||
| 613 | } | ||
| 614 | #else | ||
| 615 | static void __init gic_pm_init(struct gic_chip_data *gic) | ||
| 616 | { | ||
| 617 | } | ||
| 618 | #endif | ||
| 619 | |||
| 620 | static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq, | ||
| 621 | irq_hw_number_t hw) | ||
| 622 | { | ||
| 623 | if (hw < 32) { | ||
| 624 | irq_set_percpu_devid(irq); | ||
| 625 | irq_set_chip_and_handler(irq, &gic_chip, | ||
| 626 | handle_percpu_devid_irq); | ||
| 627 | set_irq_flags(irq, IRQF_VALID | IRQF_NOAUTOEN); | ||
| 628 | } else { | ||
| 629 | irq_set_chip_and_handler(irq, &gic_chip, | ||
| 630 | handle_fasteoi_irq); | ||
| 631 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | ||
| 632 | } | ||
| 633 | irq_set_chip_data(irq, d->host_data); | ||
| 634 | return 0; | ||
| 635 | } | ||
| 636 | |||
| 637 | static int gic_irq_domain_xlate(struct irq_domain *d, | ||
| 638 | struct device_node *controller, | ||
| 639 | const u32 *intspec, unsigned int intsize, | ||
| 640 | unsigned long *out_hwirq, unsigned int *out_type) | ||
| 641 | { | ||
| 642 | if (d->of_node != controller) | ||
| 643 | return -EINVAL; | ||
| 644 | if (intsize < 3) | ||
| 645 | return -EINVAL; | ||
| 646 | |||
| 647 | /* Get the interrupt number and add 16 to skip over SGIs */ | ||
| 648 | *out_hwirq = intspec[1] + 16; | ||
| 649 | |||
| 650 | /* For SPIs, we need to add 16 more to get the GIC irq ID number */ | ||
| 651 | if (!intspec[0]) | ||
| 652 | *out_hwirq += 16; | ||
| 653 | |||
| 654 | *out_type = intspec[2] & IRQ_TYPE_SENSE_MASK; | ||
| 655 | return 0; | ||
| 656 | } | ||
| 657 | |||
| 658 | const struct irq_domain_ops gic_irq_domain_ops = { | ||
| 659 | .map = gic_irq_domain_map, | ||
| 660 | .xlate = gic_irq_domain_xlate, | ||
| 661 | }; | ||
| 662 | |||
| 663 | void __init gic_init_bases(unsigned int gic_nr, int irq_start, | ||
| 664 | void __iomem *dist_base, void __iomem *cpu_base, | ||
| 665 | u32 percpu_offset, struct device_node *node) | ||
| 666 | { | ||
| 667 | irq_hw_number_t hwirq_base; | ||
| 668 | struct gic_chip_data *gic; | ||
| 669 | int gic_irqs, irq_base, i; | ||
| 670 | |||
| 671 | BUG_ON(gic_nr >= MAX_GIC_NR); | ||
| 672 | |||
| 673 | gic = &gic_data[gic_nr]; | ||
| 674 | #ifdef CONFIG_GIC_NON_BANKED | ||
| 675 | if (percpu_offset) { /* Frankein-GIC without banked registers... */ | ||
| 676 | unsigned int cpu; | ||
| 677 | |||
| 678 | gic->dist_base.percpu_base = alloc_percpu(void __iomem *); | ||
| 679 | gic->cpu_base.percpu_base = alloc_percpu(void __iomem *); | ||
| 680 | if (WARN_ON(!gic->dist_base.percpu_base || | ||
| 681 | !gic->cpu_base.percpu_base)) { | ||
| 682 | free_percpu(gic->dist_base.percpu_base); | ||
| 683 | free_percpu(gic->cpu_base.percpu_base); | ||
| 684 | return; | ||
| 685 | } | ||
| 686 | |||
| 687 | for_each_possible_cpu(cpu) { | ||
| 688 | unsigned long offset = percpu_offset * cpu_logical_map(cpu); | ||
| 689 | *per_cpu_ptr(gic->dist_base.percpu_base, cpu) = dist_base + offset; | ||
| 690 | *per_cpu_ptr(gic->cpu_base.percpu_base, cpu) = cpu_base + offset; | ||
| 691 | } | ||
| 692 | |||
| 693 | gic_set_base_accessor(gic, gic_get_percpu_base); | ||
| 694 | } else | ||
| 695 | #endif | ||
| 696 | { /* Normal, sane GIC... */ | ||
| 697 | WARN(percpu_offset, | ||
| 698 | "GIC_NON_BANKED not enabled, ignoring %08x offset!", | ||
| 699 | percpu_offset); | ||
| 700 | gic->dist_base.common_base = dist_base; | ||
| 701 | gic->cpu_base.common_base = cpu_base; | ||
| 702 | gic_set_base_accessor(gic, gic_get_common_base); | ||
| 703 | } | ||
| 704 | |||
| 705 | /* | ||
| 706 | * Initialize the CPU interface map to all CPUs. | ||
| 707 | * It will be refined as each CPU probes its ID. | ||
| 708 | */ | ||
| 709 | for (i = 0; i < NR_GIC_CPU_IF; i++) | ||
| 710 | gic_cpu_map[i] = 0xff; | ||
| 711 | |||
| 712 | /* | ||
| 713 | * For primary GICs, skip over SGIs. | ||
| 714 | * For secondary GICs, skip over PPIs, too. | ||
| 715 | */ | ||
| 716 | if (gic_nr == 0 && (irq_start & 31) > 0) { | ||
| 717 | hwirq_base = 16; | ||
| 718 | if (irq_start != -1) | ||
| 719 | irq_start = (irq_start & ~31) + 16; | ||
| 720 | } else { | ||
| 721 | hwirq_base = 32; | ||
| 722 | } | ||
| 723 | |||
| 724 | /* | ||
| 725 | * Find out how many interrupts are supported. | ||
| 726 | * The GIC only supports up to 1020 interrupt sources. | ||
| 727 | */ | ||
| 728 | gic_irqs = readl_relaxed(gic_data_dist_base(gic) + GIC_DIST_CTR) & 0x1f; | ||
| 729 | gic_irqs = (gic_irqs + 1) * 32; | ||
| 730 | if (gic_irqs > 1020) | ||
| 731 | gic_irqs = 1020; | ||
| 732 | gic->gic_irqs = gic_irqs; | ||
| 733 | |||
| 734 | gic_irqs -= hwirq_base; /* calculate # of irqs to allocate */ | ||
| 735 | irq_base = irq_alloc_descs(irq_start, 16, gic_irqs, numa_node_id()); | ||
| 736 | if (IS_ERR_VALUE(irq_base)) { | ||
| 737 | WARN(1, "Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n", | ||
| 738 | irq_start); | ||
| 739 | irq_base = irq_start; | ||
| 740 | } | ||
| 741 | gic->domain = irq_domain_add_legacy(node, gic_irqs, irq_base, | ||
| 742 | hwirq_base, &gic_irq_domain_ops, gic); | ||
| 743 | if (WARN_ON(!gic->domain)) | ||
| 744 | return; | ||
| 745 | |||
| 746 | gic_chip.flags |= gic_arch_extn.flags; | ||
| 747 | gic_dist_init(gic); | ||
| 748 | gic_cpu_init(gic); | ||
| 749 | gic_pm_init(gic); | ||
| 750 | } | ||
| 751 | |||
| 752 | void __cpuinit gic_secondary_init(unsigned int gic_nr) | ||
| 753 | { | ||
| 754 | BUG_ON(gic_nr >= MAX_GIC_NR); | ||
| 755 | |||
| 756 | gic_cpu_init(&gic_data[gic_nr]); | ||
| 757 | } | ||
| 758 | |||
| 759 | #ifdef CONFIG_SMP | ||
| 760 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq) | ||
| 761 | { | ||
| 762 | int cpu; | ||
| 763 | unsigned long map = 0; | ||
| 764 | |||
| 765 | /* Convert our logical CPU mask into a physical one. */ | ||
| 766 | for_each_cpu(cpu, mask) | ||
| 767 | map |= gic_cpu_map[cpu]; | ||
| 768 | |||
| 769 | /* | ||
| 770 | * Ensure that stores to Normal memory are visible to the | ||
| 771 | * other CPUs before issuing the IPI. | ||
| 772 | */ | ||
| 773 | dsb(); | ||
| 774 | |||
| 775 | /* this always happens on GIC0 */ | ||
| 776 | writel_relaxed(map << 16 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT); | ||
| 777 | } | ||
| 778 | #endif | ||
| 779 | |||
| 780 | #ifdef CONFIG_OF | ||
| 781 | static int gic_cnt __initdata = 0; | ||
| 782 | |||
| 783 | int __init gic_of_init(struct device_node *node, struct device_node *parent) | ||
| 784 | { | ||
| 785 | void __iomem *cpu_base; | ||
| 786 | void __iomem *dist_base; | ||
| 787 | u32 percpu_offset; | ||
| 788 | int irq; | ||
| 789 | |||
| 790 | if (WARN_ON(!node)) | ||
| 791 | return -ENODEV; | ||
| 792 | |||
| 793 | dist_base = of_iomap(node, 0); | ||
| 794 | WARN(!dist_base, "unable to map gic dist registers\n"); | ||
| 795 | |||
| 796 | cpu_base = of_iomap(node, 1); | ||
| 797 | WARN(!cpu_base, "unable to map gic cpu registers\n"); | ||
| 798 | |||
| 799 | if (of_property_read_u32(node, "cpu-offset", &percpu_offset)) | ||
| 800 | percpu_offset = 0; | ||
| 801 | |||
| 802 | gic_init_bases(gic_cnt, -1, dist_base, cpu_base, percpu_offset, node); | ||
| 803 | |||
| 804 | if (parent) { | ||
| 805 | irq = irq_of_parse_and_map(node, 0); | ||
| 806 | gic_cascade_irq(gic_cnt, irq); | ||
| 807 | } | ||
| 808 | gic_cnt++; | ||
| 809 | return 0; | ||
| 810 | } | ||
| 811 | #endif | ||
diff --git a/arch/arm/common/vic.c b/arch/arm/common/vic.c deleted file mode 100644 index 8f324b99416e..000000000000 --- a/arch/arm/common/vic.c +++ /dev/null | |||
| @@ -1,464 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/arch/arm/common/vic.c | ||
| 3 | * | ||
| 4 | * Copyright (C) 1999 - 2003 ARM Limited | ||
| 5 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 20 | */ | ||
| 21 | |||
| 22 | #include <linux/export.h> | ||
| 23 | #include <linux/init.h> | ||
| 24 | #include <linux/list.h> | ||
| 25 | #include <linux/io.h> | ||
| 26 | #include <linux/irqdomain.h> | ||
| 27 | #include <linux/of.h> | ||
| 28 | #include <linux/of_address.h> | ||
| 29 | #include <linux/of_irq.h> | ||
| 30 | #include <linux/syscore_ops.h> | ||
| 31 | #include <linux/device.h> | ||
| 32 | #include <linux/amba/bus.h> | ||
| 33 | |||
| 34 | #include <asm/exception.h> | ||
| 35 | #include <asm/mach/irq.h> | ||
| 36 | #include <asm/hardware/vic.h> | ||
| 37 | |||
| 38 | /** | ||
| 39 | * struct vic_device - VIC PM device | ||
| 40 | * @irq: The IRQ number for the base of the VIC. | ||
| 41 | * @base: The register base for the VIC. | ||
| 42 | * @valid_sources: A bitmask of valid interrupts | ||
| 43 | * @resume_sources: A bitmask of interrupts for resume. | ||
| 44 | * @resume_irqs: The IRQs enabled for resume. | ||
| 45 | * @int_select: Save for VIC_INT_SELECT. | ||
| 46 | * @int_enable: Save for VIC_INT_ENABLE. | ||
| 47 | * @soft_int: Save for VIC_INT_SOFT. | ||
| 48 | * @protect: Save for VIC_PROTECT. | ||
| 49 | * @domain: The IRQ domain for the VIC. | ||
| 50 | */ | ||
| 51 | struct vic_device { | ||
| 52 | void __iomem *base; | ||
| 53 | int irq; | ||
| 54 | u32 valid_sources; | ||
| 55 | u32 resume_sources; | ||
| 56 | u32 resume_irqs; | ||
| 57 | u32 int_select; | ||
| 58 | u32 int_enable; | ||
| 59 | u32 soft_int; | ||
| 60 | u32 protect; | ||
| 61 | struct irq_domain *domain; | ||
| 62 | }; | ||
| 63 | |||
| 64 | /* we cannot allocate memory when VICs are initially registered */ | ||
| 65 | static struct vic_device vic_devices[CONFIG_ARM_VIC_NR]; | ||
| 66 | |||
| 67 | static int vic_id; | ||
| 68 | |||
| 69 | /** | ||
| 70 | * vic_init2 - common initialisation code | ||
| 71 | * @base: Base of the VIC. | ||
| 72 | * | ||
| 73 | * Common initialisation code for registration | ||
| 74 | * and resume. | ||
| 75 | */ | ||
| 76 | static void vic_init2(void __iomem *base) | ||
| 77 | { | ||
| 78 | int i; | ||
| 79 | |||
| 80 | for (i = 0; i < 16; i++) { | ||
| 81 | void __iomem *reg = base + VIC_VECT_CNTL0 + (i * 4); | ||
| 82 | writel(VIC_VECT_CNTL_ENABLE | i, reg); | ||
| 83 | } | ||
| 84 | |||
| 85 | writel(32, base + VIC_PL190_DEF_VECT_ADDR); | ||
| 86 | } | ||
| 87 | |||
| 88 | #ifdef CONFIG_PM | ||
| 89 | static void resume_one_vic(struct vic_device *vic) | ||
| 90 | { | ||
| 91 | void __iomem *base = vic->base; | ||
| 92 | |||
| 93 | printk(KERN_DEBUG "%s: resuming vic at %p\n", __func__, base); | ||
| 94 | |||
| 95 | /* re-initialise static settings */ | ||
| 96 | vic_init2(base); | ||
| 97 | |||
| 98 | writel(vic->int_select, base + VIC_INT_SELECT); | ||
| 99 | writel(vic->protect, base + VIC_PROTECT); | ||
| 100 | |||
| 101 | /* set the enabled ints and then clear the non-enabled */ | ||
| 102 | writel(vic->int_enable, base + VIC_INT_ENABLE); | ||
| 103 | writel(~vic->int_enable, base + VIC_INT_ENABLE_CLEAR); | ||
| 104 | |||
| 105 | /* and the same for the soft-int register */ | ||
| 106 | |||
| 107 | writel(vic->soft_int, base + VIC_INT_SOFT); | ||
| 108 | writel(~vic->soft_int, base + VIC_INT_SOFT_CLEAR); | ||
| 109 | } | ||
| 110 | |||
| 111 | static void vic_resume(void) | ||
| 112 | { | ||
| 113 | int id; | ||
| 114 | |||
| 115 | for (id = vic_id - 1; id >= 0; id--) | ||
| 116 | resume_one_vic(vic_devices + id); | ||
| 117 | } | ||
| 118 | |||
| 119 | static void suspend_one_vic(struct vic_device *vic) | ||
| 120 | { | ||
| 121 | void __iomem *base = vic->base; | ||
| 122 | |||
| 123 | printk(KERN_DEBUG "%s: suspending vic at %p\n", __func__, base); | ||
| 124 | |||
| 125 | vic->int_select = readl(base + VIC_INT_SELECT); | ||
| 126 | vic->int_enable = readl(base + VIC_INT_ENABLE); | ||
| 127 | vic->soft_int = readl(base + VIC_INT_SOFT); | ||
| 128 | vic->protect = readl(base + VIC_PROTECT); | ||
| 129 | |||
| 130 | /* set the interrupts (if any) that are used for | ||
| 131 | * resuming the system */ | ||
| 132 | |||
| 133 | writel(vic->resume_irqs, base + VIC_INT_ENABLE); | ||
| 134 | writel(~vic->resume_irqs, base + VIC_INT_ENABLE_CLEAR); | ||
| 135 | } | ||
| 136 | |||
| 137 | static int vic_suspend(void) | ||
| 138 | { | ||
| 139 | int id; | ||
| 140 | |||
| 141 | for (id = 0; id < vic_id; id++) | ||
| 142 | suspend_one_vic(vic_devices + id); | ||
| 143 | |||
| 144 | return 0; | ||
| 145 | } | ||
| 146 | |||
| 147 | struct syscore_ops vic_syscore_ops = { | ||
| 148 | .suspend = vic_suspend, | ||
| 149 | .resume = vic_resume, | ||
| 150 | }; | ||
| 151 | |||
| 152 | /** | ||
| 153 | * vic_pm_init - initicall to register VIC pm | ||
| 154 | * | ||
| 155 | * This is called via late_initcall() to register | ||
| 156 | * the resources for the VICs due to the early | ||
| 157 | * nature of the VIC's registration. | ||
| 158 | */ | ||
| 159 | static int __init vic_pm_init(void) | ||
| 160 | { | ||
| 161 | if (vic_id > 0) | ||
| 162 | register_syscore_ops(&vic_syscore_ops); | ||
| 163 | |||
| 164 | return 0; | ||
| 165 | } | ||
| 166 | late_initcall(vic_pm_init); | ||
| 167 | #endif /* CONFIG_PM */ | ||
| 168 | |||
| 169 | static struct irq_chip vic_chip; | ||
| 170 | |||
| 171 | static int vic_irqdomain_map(struct irq_domain *d, unsigned int irq, | ||
| 172 | irq_hw_number_t hwirq) | ||
| 173 | { | ||
| 174 | struct vic_device *v = d->host_data; | ||
| 175 | |||
| 176 | /* Skip invalid IRQs, only register handlers for the real ones */ | ||
| 177 | if (!(v->valid_sources & (1 << hwirq))) | ||
| 178 | return -ENOTSUPP; | ||
| 179 | irq_set_chip_and_handler(irq, &vic_chip, handle_level_irq); | ||
| 180 | irq_set_chip_data(irq, v->base); | ||
| 181 | set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); | ||
| 182 | return 0; | ||
| 183 | } | ||
| 184 | |||
| 185 | static struct irq_domain_ops vic_irqdomain_ops = { | ||
| 186 | .map = vic_irqdomain_map, | ||
| 187 | .xlate = irq_domain_xlate_onetwocell, | ||
| 188 | }; | ||
| 189 | |||
| 190 | /** | ||
| 191 | * vic_register() - Register a VIC. | ||
| 192 | * @base: The base address of the VIC. | ||
| 193 | * @irq: The base IRQ for the VIC. | ||
| 194 | * @valid_sources: bitmask of valid interrupts | ||
| 195 | * @resume_sources: bitmask of interrupts allowed for resume sources. | ||
| 196 | * @node: The device tree node associated with the VIC. | ||
| 197 | * | ||
| 198 | * Register the VIC with the system device tree so that it can be notified | ||
| 199 | * of suspend and resume requests and ensure that the correct actions are | ||
| 200 | * taken to re-instate the settings on resume. | ||
| 201 | * | ||
| 202 | * This also configures the IRQ domain for the VIC. | ||
| 203 | */ | ||
| 204 | static void __init vic_register(void __iomem *base, unsigned int irq, | ||
| 205 | u32 valid_sources, u32 resume_sources, | ||
| 206 | struct device_node *node) | ||
| 207 | { | ||
| 208 | struct vic_device *v; | ||
| 209 | int i; | ||
| 210 | |||
| 211 | if (vic_id >= ARRAY_SIZE(vic_devices)) { | ||
| 212 | printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__); | ||
| 213 | return; | ||
| 214 | } | ||
| 215 | |||
| 216 | v = &vic_devices[vic_id]; | ||
| 217 | v->base = base; | ||
| 218 | v->valid_sources = valid_sources; | ||
| 219 | v->resume_sources = resume_sources; | ||
| 220 | v->irq = irq; | ||
| 221 | vic_id++; | ||
| 222 | v->domain = irq_domain_add_simple(node, fls(valid_sources), irq, | ||
| 223 | &vic_irqdomain_ops, v); | ||
| 224 | /* create an IRQ mapping for each valid IRQ */ | ||
| 225 | for (i = 0; i < fls(valid_sources); i++) | ||
| 226 | if (valid_sources & (1 << i)) | ||
| 227 | irq_create_mapping(v->domain, i); | ||
| 228 | } | ||
| 229 | |||
| 230 | static void vic_ack_irq(struct irq_data *d) | ||
| 231 | { | ||
| 232 | void __iomem *base = irq_data_get_irq_chip_data(d); | ||
| 233 | unsigned int irq = d->hwirq; | ||
| 234 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); | ||
| 235 | /* moreover, clear the soft-triggered, in case it was the reason */ | ||
| 236 | writel(1 << irq, base + VIC_INT_SOFT_CLEAR); | ||
| 237 | } | ||
| 238 | |||
| 239 | static void vic_mask_irq(struct irq_data *d) | ||
| 240 | { | ||
| 241 | void __iomem *base = irq_data_get_irq_chip_data(d); | ||
| 242 | unsigned int irq = d->hwirq; | ||
| 243 | writel(1 << irq, base + VIC_INT_ENABLE_CLEAR); | ||
| 244 | } | ||
| 245 | |||
| 246 | static void vic_unmask_irq(struct irq_data *d) | ||
| 247 | { | ||
| 248 | void __iomem *base = irq_data_get_irq_chip_data(d); | ||
| 249 | unsigned int irq = d->hwirq; | ||
| 250 | writel(1 << irq, base + VIC_INT_ENABLE); | ||
| 251 | } | ||
| 252 | |||
| 253 | #if defined(CONFIG_PM) | ||
| 254 | static struct vic_device *vic_from_irq(unsigned int irq) | ||
| 255 | { | ||
| 256 | struct vic_device *v = vic_devices; | ||
| 257 | unsigned int base_irq = irq & ~31; | ||
| 258 | int id; | ||
| 259 | |||
| 260 | for (id = 0; id < vic_id; id++, v++) { | ||
| 261 | if (v->irq == base_irq) | ||
| 262 | return v; | ||
| 263 | } | ||
| 264 | |||
| 265 | return NULL; | ||
| 266 | } | ||
| 267 | |||
| 268 | static int vic_set_wake(struct irq_data *d, unsigned int on) | ||
| 269 | { | ||
| 270 | struct vic_device *v = vic_from_irq(d->irq); | ||
| 271 | unsigned int off = d->hwirq; | ||
| 272 | u32 bit = 1 << off; | ||
| 273 | |||
| 274 | if (!v) | ||
| 275 | return -EINVAL; | ||
| 276 | |||
| 277 | if (!(bit & v->resume_sources)) | ||
| 278 | return -EINVAL; | ||
| 279 | |||
| 280 | if (on) | ||
| 281 | v->resume_irqs |= bit; | ||
| 282 | else | ||
| 283 | v->resume_irqs &= ~bit; | ||
| 284 | |||
| 285 | return 0; | ||
| 286 | } | ||
| 287 | #else | ||
| 288 | #define vic_set_wake NULL | ||
| 289 | #endif /* CONFIG_PM */ | ||
| 290 | |||
| 291 | static struct irq_chip vic_chip = { | ||
| 292 | .name = "VIC", | ||
| 293 | .irq_ack = vic_ack_irq, | ||
| 294 | .irq_mask = vic_mask_irq, | ||
| 295 | .irq_unmask = vic_unmask_irq, | ||
| 296 | .irq_set_wake = vic_set_wake, | ||
| 297 | }; | ||
| 298 | |||
| 299 | static void __init vic_disable(void __iomem *base) | ||
| 300 | { | ||
| 301 | writel(0, base + VIC_INT_SELECT); | ||
| 302 | writel(0, base + VIC_INT_ENABLE); | ||
| 303 | writel(~0, base + VIC_INT_ENABLE_CLEAR); | ||
| 304 | writel(0, base + VIC_ITCR); | ||
| 305 | writel(~0, base + VIC_INT_SOFT_CLEAR); | ||
| 306 | } | ||
| 307 | |||
| 308 | static void __init vic_clear_interrupts(void __iomem *base) | ||
| 309 | { | ||
| 310 | unsigned int i; | ||
| 311 | |||
| 312 | writel(0, base + VIC_PL190_VECT_ADDR); | ||
| 313 | for (i = 0; i < 19; i++) { | ||
| 314 | unsigned int value; | ||
| 315 | |||
| 316 | value = readl(base + VIC_PL190_VECT_ADDR); | ||
| 317 | writel(value, base + VIC_PL190_VECT_ADDR); | ||
| 318 | } | ||
| 319 | } | ||
| 320 | |||
| 321 | /* | ||
| 322 | * The PL190 cell from ARM has been modified by ST to handle 64 interrupts. | ||
| 323 | * The original cell has 32 interrupts, while the modified one has 64, | ||
| 324 | * replocating two blocks 0x00..0x1f in 0x20..0x3f. In that case | ||
| 325 | * the probe function is called twice, with base set to offset 000 | ||
| 326 | * and 020 within the page. We call this "second block". | ||
| 327 | */ | ||
| 328 | static void __init vic_init_st(void __iomem *base, unsigned int irq_start, | ||
| 329 | u32 vic_sources, struct device_node *node) | ||
| 330 | { | ||
| 331 | unsigned int i; | ||
| 332 | int vic_2nd_block = ((unsigned long)base & ~PAGE_MASK) != 0; | ||
| 333 | |||
| 334 | /* Disable all interrupts initially. */ | ||
| 335 | vic_disable(base); | ||
| 336 | |||
| 337 | /* | ||
| 338 | * Make sure we clear all existing interrupts. The vector registers | ||
| 339 | * in this cell are after the second block of general registers, | ||
| 340 | * so we can address them using standard offsets, but only from | ||
| 341 | * the second base address, which is 0x20 in the page | ||
| 342 | */ | ||
| 343 | if (vic_2nd_block) { | ||
| 344 | vic_clear_interrupts(base); | ||
| 345 | |||
| 346 | /* ST has 16 vectors as well, but we don't enable them by now */ | ||
| 347 | for (i = 0; i < 16; i++) { | ||
| 348 | void __iomem *reg = base + VIC_VECT_CNTL0 + (i * 4); | ||
| 349 | writel(0, reg); | ||
| 350 | } | ||
| 351 | |||
| 352 | writel(32, base + VIC_PL190_DEF_VECT_ADDR); | ||
| 353 | } | ||
| 354 | |||
| 355 | vic_register(base, irq_start, vic_sources, 0, node); | ||
| 356 | } | ||
| 357 | |||
| 358 | void __init __vic_init(void __iomem *base, int irq_start, | ||
| 359 | u32 vic_sources, u32 resume_sources, | ||
| 360 | struct device_node *node) | ||
| 361 | { | ||
| 362 | unsigned int i; | ||
| 363 | u32 cellid = 0; | ||
| 364 | enum amba_vendor vendor; | ||
| 365 | |||
| 366 | /* Identify which VIC cell this one is, by reading the ID */ | ||
| 367 | for (i = 0; i < 4; i++) { | ||
| 368 | void __iomem *addr; | ||
| 369 | addr = (void __iomem *)((u32)base & PAGE_MASK) + 0xfe0 + (i * 4); | ||
| 370 | cellid |= (readl(addr) & 0xff) << (8 * i); | ||
| 371 | } | ||
| 372 | vendor = (cellid >> 12) & 0xff; | ||
| 373 | printk(KERN_INFO "VIC @%p: id 0x%08x, vendor 0x%02x\n", | ||
| 374 | base, cellid, vendor); | ||
| 375 | |||
| 376 | switch(vendor) { | ||
| 377 | case AMBA_VENDOR_ST: | ||
| 378 | vic_init_st(base, irq_start, vic_sources, node); | ||
| 379 | return; | ||
| 380 | default: | ||
| 381 | printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n"); | ||
| 382 | /* fall through */ | ||
| 383 | case AMBA_VENDOR_ARM: | ||
| 384 | break; | ||
| 385 | } | ||
| 386 | |||
| 387 | /* Disable all interrupts initially. */ | ||
| 388 | vic_disable(base); | ||
| 389 | |||
| 390 | /* Make sure we clear all existing interrupts */ | ||
| 391 | vic_clear_interrupts(base); | ||
| 392 | |||
| 393 | vic_init2(base); | ||
| 394 | |||
| 395 | vic_register(base, irq_start, vic_sources, resume_sources, node); | ||
| 396 | } | ||
| 397 | |||
| 398 | /** | ||
| 399 | * vic_init() - initialise a vectored interrupt controller | ||
| 400 | * @base: iomem base address | ||
| 401 | * @irq_start: starting interrupt number, must be muliple of 32 | ||
| 402 | * @vic_sources: bitmask of interrupt sources to allow | ||
| 403 | * @resume_sources: bitmask of interrupt sources to allow for resume | ||
| 404 | */ | ||
| 405 | void __init vic_init(void __iomem *base, unsigned int irq_start, | ||
| 406 | u32 vic_sources, u32 resume_sources) | ||
| 407 | { | ||
| 408 | __vic_init(base, irq_start, vic_sources, resume_sources, NULL); | ||
| 409 | } | ||
| 410 | |||
| 411 | #ifdef CONFIG_OF | ||
| 412 | int __init vic_of_init(struct device_node *node, struct device_node *parent) | ||
| 413 | { | ||
| 414 | void __iomem *regs; | ||
| 415 | |||
| 416 | if (WARN(parent, "non-root VICs are not supported")) | ||
| 417 | return -EINVAL; | ||
| 418 | |||
| 419 | regs = of_iomap(node, 0); | ||
| 420 | if (WARN_ON(!regs)) | ||
| 421 | return -EIO; | ||
| 422 | |||
| 423 | /* | ||
| 424 | * Passing 0 as first IRQ makes the simple domain allocate descriptors | ||
| 425 | */ | ||
| 426 | __vic_init(regs, 0, ~0, ~0, node); | ||
| 427 | |||
| 428 | return 0; | ||
| 429 | } | ||
| 430 | #endif /* CONFIG OF */ | ||
| 431 | |||
| 432 | /* | ||
| 433 | * Handle each interrupt in a single VIC. Returns non-zero if we've | ||
| 434 | * handled at least one interrupt. This reads the status register | ||
| 435 | * before handling each interrupt, which is necessary given that | ||
| 436 | * handle_IRQ may briefly re-enable interrupts for soft IRQ handling. | ||
| 437 | */ | ||
| 438 | static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs) | ||
| 439 | { | ||
| 440 | u32 stat, irq; | ||
| 441 | int handled = 0; | ||
| 442 | |||
| 443 | while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) { | ||
| 444 | irq = ffs(stat) - 1; | ||
| 445 | handle_IRQ(irq_find_mapping(vic->domain, irq), regs); | ||
| 446 | handled = 1; | ||
| 447 | } | ||
| 448 | |||
| 449 | return handled; | ||
| 450 | } | ||
| 451 | |||
| 452 | /* | ||
| 453 | * Keep iterating over all registered VIC's until there are no pending | ||
| 454 | * interrupts. | ||
| 455 | */ | ||
| 456 | asmlinkage void __exception_irq_entry vic_handle_irq(struct pt_regs *regs) | ||
| 457 | { | ||
| 458 | int i, handled; | ||
| 459 | |||
| 460 | do { | ||
| 461 | for (i = 0, handled = 0; i < vic_id; ++i) | ||
| 462 | handled |= handle_one_vic(&vic_devices[i], regs); | ||
| 463 | } while (handled); | ||
| 464 | } | ||
diff --git a/arch/arm/include/asm/hardware/gic.h b/arch/arm/include/asm/hardware/gic.h deleted file mode 100644 index 4b1ce6cd477f..000000000000 --- a/arch/arm/include/asm/hardware/gic.h +++ /dev/null | |||
| @@ -1,57 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/gic.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2002 ARM Limited, All Rights Reserved. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | */ | ||
| 10 | #ifndef __ASM_ARM_HARDWARE_GIC_H | ||
| 11 | #define __ASM_ARM_HARDWARE_GIC_H | ||
| 12 | |||
| 13 | #include <linux/compiler.h> | ||
| 14 | |||
| 15 | #define GIC_CPU_CTRL 0x00 | ||
| 16 | #define GIC_CPU_PRIMASK 0x04 | ||
| 17 | #define GIC_CPU_BINPOINT 0x08 | ||
| 18 | #define GIC_CPU_INTACK 0x0c | ||
| 19 | #define GIC_CPU_EOI 0x10 | ||
| 20 | #define GIC_CPU_RUNNINGPRI 0x14 | ||
| 21 | #define GIC_CPU_HIGHPRI 0x18 | ||
| 22 | |||
| 23 | #define GIC_DIST_CTRL 0x000 | ||
| 24 | #define GIC_DIST_CTR 0x004 | ||
| 25 | #define GIC_DIST_ENABLE_SET 0x100 | ||
| 26 | #define GIC_DIST_ENABLE_CLEAR 0x180 | ||
| 27 | #define GIC_DIST_PENDING_SET 0x200 | ||
| 28 | #define GIC_DIST_PENDING_CLEAR 0x280 | ||
| 29 | #define GIC_DIST_ACTIVE_BIT 0x300 | ||
| 30 | #define GIC_DIST_PRI 0x400 | ||
| 31 | #define GIC_DIST_TARGET 0x800 | ||
| 32 | #define GIC_DIST_CONFIG 0xc00 | ||
| 33 | #define GIC_DIST_SOFTINT 0xf00 | ||
| 34 | |||
| 35 | #ifndef __ASSEMBLY__ | ||
| 36 | #include <linux/irqdomain.h> | ||
| 37 | struct device_node; | ||
| 38 | |||
| 39 | extern struct irq_chip gic_arch_extn; | ||
| 40 | |||
| 41 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, | ||
| 42 | u32 offset, struct device_node *); | ||
| 43 | int gic_of_init(struct device_node *node, struct device_node *parent); | ||
| 44 | void gic_secondary_init(unsigned int); | ||
| 45 | void gic_handle_irq(struct pt_regs *regs); | ||
| 46 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); | ||
| 47 | void gic_raise_softirq(const struct cpumask *mask, unsigned int irq); | ||
| 48 | |||
| 49 | static inline void gic_init(unsigned int nr, int start, | ||
| 50 | void __iomem *dist , void __iomem *cpu) | ||
| 51 | { | ||
| 52 | gic_init_bases(nr, start, dist, cpu, 0, NULL); | ||
| 53 | } | ||
| 54 | |||
| 55 | #endif | ||
| 56 | |||
| 57 | #endif | ||
diff --git a/arch/arm/include/asm/hardware/vic.h b/arch/arm/include/asm/hardware/vic.h deleted file mode 100644 index 2bebad36fc83..000000000000 --- a/arch/arm/include/asm/hardware/vic.h +++ /dev/null | |||
| @@ -1,57 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/hardware/vic.h | ||
| 3 | * | ||
| 4 | * Copyright (c) ARM Limited 2003. All rights reserved. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | #ifndef __ASM_ARM_HARDWARE_VIC_H | ||
| 21 | #define __ASM_ARM_HARDWARE_VIC_H | ||
| 22 | |||
| 23 | #define VIC_IRQ_STATUS 0x00 | ||
| 24 | #define VIC_FIQ_STATUS 0x04 | ||
| 25 | #define VIC_RAW_STATUS 0x08 | ||
| 26 | #define VIC_INT_SELECT 0x0c /* 1 = FIQ, 0 = IRQ */ | ||
| 27 | #define VIC_INT_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
| 28 | #define VIC_INT_ENABLE_CLEAR 0x14 | ||
| 29 | #define VIC_INT_SOFT 0x18 | ||
| 30 | #define VIC_INT_SOFT_CLEAR 0x1c | ||
| 31 | #define VIC_PROTECT 0x20 | ||
| 32 | #define VIC_PL190_VECT_ADDR 0x30 /* PL190 only */ | ||
| 33 | #define VIC_PL190_DEF_VECT_ADDR 0x34 /* PL190 only */ | ||
| 34 | |||
| 35 | #define VIC_VECT_ADDR0 0x100 /* 0 to 15 (0..31 PL192) */ | ||
| 36 | #define VIC_VECT_CNTL0 0x200 /* 0 to 15 (0..31 PL192) */ | ||
| 37 | #define VIC_ITCR 0x300 /* VIC test control register */ | ||
| 38 | |||
| 39 | #define VIC_VECT_CNTL_ENABLE (1 << 5) | ||
| 40 | |||
| 41 | #define VIC_PL192_VECT_ADDR 0xF00 | ||
| 42 | |||
| 43 | #ifndef __ASSEMBLY__ | ||
| 44 | #include <linux/compiler.h> | ||
| 45 | #include <linux/types.h> | ||
| 46 | |||
| 47 | struct device_node; | ||
| 48 | struct pt_regs; | ||
| 49 | |||
| 50 | void __vic_init(void __iomem *base, int irq_start, u32 vic_sources, | ||
| 51 | u32 resume_sources, struct device_node *node); | ||
| 52 | void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); | ||
| 53 | int vic_of_init(struct device_node *node, struct device_node *parent); | ||
| 54 | void vic_handle_irq(struct pt_regs *regs); | ||
| 55 | |||
| 56 | #endif /* __ASSEMBLY__ */ | ||
| 57 | #endif | ||
diff --git a/arch/arm/include/asm/mach/irq.h b/arch/arm/include/asm/mach/irq.h index 15cb035309f7..18c883023339 100644 --- a/arch/arm/include/asm/mach/irq.h +++ b/arch/arm/include/asm/mach/irq.h | |||
| @@ -22,6 +22,7 @@ extern int show_fiq_list(struct seq_file *, int); | |||
| 22 | 22 | ||
| 23 | #ifdef CONFIG_MULTI_IRQ_HANDLER | 23 | #ifdef CONFIG_MULTI_IRQ_HANDLER |
| 24 | extern void (*handle_arch_irq)(struct pt_regs *); | 24 | extern void (*handle_arch_irq)(struct pt_regs *); |
| 25 | extern void set_handle_irq(void (*handle_irq)(struct pt_regs *)); | ||
| 25 | #endif | 26 | #endif |
| 26 | 27 | ||
| 27 | /* | 28 | /* |
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 896165096d6a..8e4ef4c83a74 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c | |||
| @@ -117,6 +117,16 @@ void __init init_IRQ(void) | |||
| 117 | machine_desc->init_irq(); | 117 | machine_desc->init_irq(); |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | #ifdef CONFIG_MULTI_IRQ_HANDLER | ||
| 121 | void __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) | ||
| 122 | { | ||
| 123 | if (handle_arch_irq) | ||
| 124 | return; | ||
| 125 | |||
| 126 | handle_arch_irq = handle_irq; | ||
| 127 | } | ||
| 128 | #endif | ||
| 129 | |||
| 120 | #ifdef CONFIG_SPARSE_IRQ | 130 | #ifdef CONFIG_SPARSE_IRQ |
| 121 | int __init arch_probe_nr_irqs(void) | 131 | int __init arch_probe_nr_irqs(void) |
| 122 | { | 132 | { |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 84f4cbf652e5..3fc96db2a4b6 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -416,7 +416,8 @@ static void (*smp_cross_call)(const struct cpumask *, unsigned int); | |||
| 416 | 416 | ||
| 417 | void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) | 417 | void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int)) |
| 418 | { | 418 | { |
| 419 | smp_cross_call = fn; | 419 | if (!smp_cross_call) |
| 420 | smp_cross_call = fn; | ||
| 420 | } | 421 | } |
| 421 | 422 | ||
| 422 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) | 423 | void arch_send_call_function_ipi_mask(const struct cpumask *mask) |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index 49f335d301ba..dc9bb0146665 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | 24 | ||
| 25 | #include <asm/smp_twd.h> | 25 | #include <asm/smp_twd.h> |
| 26 | #include <asm/localtimer.h> | 26 | #include <asm/localtimer.h> |
| 27 | #include <asm/hardware/gic.h> | ||
| 28 | 27 | ||
| 29 | /* set up by the platform code */ | 28 | /* set up by the platform code */ |
| 30 | static void __iomem *twd_base; | 29 | static void __iomem *twd_base; |
diff --git a/arch/arm/mach-bcm/board_bcm.c b/arch/arm/mach-bcm/board_bcm.c index 3df68030cf68..f0f9abafad29 100644 --- a/arch/arm/mach-bcm/board_bcm.c +++ b/arch/arm/mach-bcm/board_bcm.c | |||
| @@ -11,30 +11,19 @@ | |||
| 11 | * GNU General Public License for more details. | 11 | * GNU General Public License for more details. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <linux/of_irq.h> | ||
| 15 | #include <linux/of_platform.h> | 14 | #include <linux/of_platform.h> |
| 16 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 17 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 18 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
| 18 | #include <linux/irqchip.h> | ||
| 19 | 19 | ||
| 20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | #include <asm/hardware/gic.h> | ||
| 22 | |||
| 23 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
| 24 | 22 | ||
| 25 | static const struct of_device_id irq_match[] = { | ||
| 26 | {.compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 27 | {} | ||
| 28 | }; | ||
| 29 | |||
| 30 | static void timer_init(void) | 23 | static void timer_init(void) |
| 31 | { | 24 | { |
| 32 | } | 25 | } |
| 33 | 26 | ||
| 34 | static void __init init_irq(void) | ||
| 35 | { | ||
| 36 | of_irq_init(irq_match); | ||
| 37 | } | ||
| 38 | 27 | ||
| 39 | static void __init board_init(void) | 28 | static void __init board_init(void) |
| 40 | { | 29 | { |
| @@ -45,9 +34,8 @@ static void __init board_init(void) | |||
| 45 | static const char * const bcm11351_dt_compat[] = { "bcm,bcm11351", NULL, }; | 34 | static const char * const bcm11351_dt_compat[] = { "bcm,bcm11351", NULL, }; |
| 46 | 35 | ||
| 47 | DT_MACHINE_START(BCM11351_DT, "Broadcom Application Processor") | 36 | DT_MACHINE_START(BCM11351_DT, "Broadcom Application Processor") |
| 48 | .init_irq = init_irq, | 37 | .init_irq = irqchip_init, |
| 49 | .init_time = timer_init, | 38 | .init_time = timer_init, |
| 50 | .init_machine = board_init, | 39 | .init_machine = board_init, |
| 51 | .dt_compat = bcm11351_dt_compat, | 40 | .dt_compat = bcm11351_dt_compat, |
| 52 | .handle_irq = gic_handle_irq, | ||
| 53 | MACHINE_END | 41 | MACHINE_END |
diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index 3c86f910b647..a71867e1d8d6 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <linux/usb/ohci_pdriver.h> | 28 | #include <linux/usb/ohci_pdriver.h> |
| 29 | #include <asm/setup.h> | 29 | #include <asm/setup.h> |
| 30 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
| 31 | #include <asm/hardware/gic.h> | ||
| 32 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 33 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 34 | #include <asm/mach/time.h> | 33 | #include <asm/mach/time.h> |
| @@ -251,7 +250,6 @@ MACHINE_START(CNS3420VB, "Cavium Networks CNS3420 Validation Board") | |||
| 251 | .map_io = cns3420_map_io, | 250 | .map_io = cns3420_map_io, |
| 252 | .init_irq = cns3xxx_init_irq, | 251 | .init_irq = cns3xxx_init_irq, |
| 253 | .init_time = cns3xxx_timer_init, | 252 | .init_time = cns3xxx_timer_init, |
| 254 | .handle_irq = gic_handle_irq, | ||
| 255 | .init_machine = cns3420_init, | 253 | .init_machine = cns3420_init, |
| 256 | .restart = cns3xxx_restart, | 254 | .restart = cns3xxx_restart, |
| 257 | MACHINE_END | 255 | MACHINE_END |
diff --git a/arch/arm/mach-cns3xxx/core.c b/arch/arm/mach-cns3xxx/core.c index 18b02d2707f7..e698f26cc0cb 100644 --- a/arch/arm/mach-cns3xxx/core.c +++ b/arch/arm/mach-cns3xxx/core.c | |||
| @@ -12,10 +12,10 @@ | |||
| 12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
| 13 | #include <linux/clockchips.h> | 13 | #include <linux/clockchips.h> |
| 14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 15 | #include <linux/irqchip/arm-gic.h> | ||
| 15 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
| 16 | #include <asm/mach/time.h> | 17 | #include <asm/mach/time.h> |
| 17 | #include <asm/mach/irq.h> | 18 | #include <asm/mach/irq.h> |
| 18 | #include <asm/hardware/gic.h> | ||
| 19 | #include <asm/hardware/cache-l2x0.h> | 19 | #include <asm/hardware/cache-l2x0.h> |
| 20 | #include <mach/cns3xxx.h> | 20 | #include <mach/cns3xxx.h> |
| 21 | #include "core.h" | 21 | #include "core.h" |
diff --git a/arch/arm/mach-ep93xx/adssphere.c b/arch/arm/mach-ep93xx/adssphere.c index 82d9c788535a..bda6c3a5c923 100644 --- a/arch/arm/mach-ep93xx/adssphere.c +++ b/arch/arm/mach-ep93xx/adssphere.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | 17 | ||
| 18 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 23 | 22 | ||
| @@ -39,7 +38,6 @@ MACHINE_START(ADSSPHERE, "ADS Sphere board") | |||
| 39 | .atag_offset = 0x100, | 38 | .atag_offset = 0x100, |
| 40 | .map_io = ep93xx_map_io, | 39 | .map_io = ep93xx_map_io, |
| 41 | .init_irq = ep93xx_init_irq, | 40 | .init_irq = ep93xx_init_irq, |
| 42 | .handle_irq = vic_handle_irq, | ||
| 43 | .init_time = ep93xx_timer_init, | 41 | .init_time = ep93xx_timer_init, |
| 44 | .init_machine = adssphere_init_machine, | 42 | .init_machine = adssphere_init_machine, |
| 45 | .init_late = ep93xx_init_late, | 43 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index ee27b4b0ab07..c49ed3dc1aea 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/i2c-gpio.h> | 34 | #include <linux/i2c-gpio.h> |
| 35 | #include <linux/spi/spi.h> | 35 | #include <linux/spi/spi.h> |
| 36 | #include <linux/export.h> | 36 | #include <linux/export.h> |
| 37 | #include <linux/irqchip/arm-vic.h> | ||
| 37 | 38 | ||
| 38 | #include <mach/hardware.h> | 39 | #include <mach/hardware.h> |
| 39 | #include <linux/platform_data/video-ep93xx.h> | 40 | #include <linux/platform_data/video-ep93xx.h> |
| @@ -44,8 +45,6 @@ | |||
| 44 | #include <asm/mach/map.h> | 45 | #include <asm/mach/map.h> |
| 45 | #include <asm/mach/time.h> | 46 | #include <asm/mach/time.h> |
| 46 | 47 | ||
| 47 | #include <asm/hardware/vic.h> | ||
| 48 | |||
| 49 | #include "soc.h" | 48 | #include "soc.h" |
| 50 | 49 | ||
| 51 | /************************************************************************* | 50 | /************************************************************************* |
diff --git a/arch/arm/mach-ep93xx/edb93xx.c b/arch/arm/mach-ep93xx/edb93xx.c index ac260519c9e9..27b14ae92c7e 100644 --- a/arch/arm/mach-ep93xx/edb93xx.c +++ b/arch/arm/mach-ep93xx/edb93xx.c | |||
| @@ -39,7 +39,6 @@ | |||
| 39 | #include <linux/platform_data/spi-ep93xx.h> | 39 | #include <linux/platform_data/spi-ep93xx.h> |
| 40 | #include <mach/gpio-ep93xx.h> | 40 | #include <mach/gpio-ep93xx.h> |
| 41 | 41 | ||
| 42 | #include <asm/hardware/vic.h> | ||
| 43 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
| 44 | #include <asm/mach/arch.h> | 43 | #include <asm/mach/arch.h> |
| 45 | 44 | ||
| @@ -276,7 +275,6 @@ MACHINE_START(EDB9301, "Cirrus Logic EDB9301 Evaluation Board") | |||
| 276 | .atag_offset = 0x100, | 275 | .atag_offset = 0x100, |
| 277 | .map_io = ep93xx_map_io, | 276 | .map_io = ep93xx_map_io, |
| 278 | .init_irq = ep93xx_init_irq, | 277 | .init_irq = ep93xx_init_irq, |
| 279 | .handle_irq = vic_handle_irq, | ||
| 280 | .init_time = ep93xx_timer_init, | 278 | .init_time = ep93xx_timer_init, |
| 281 | .init_machine = edb93xx_init_machine, | 279 | .init_machine = edb93xx_init_machine, |
| 282 | .init_late = ep93xx_init_late, | 280 | .init_late = ep93xx_init_late, |
| @@ -290,7 +288,6 @@ MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board") | |||
| 290 | .atag_offset = 0x100, | 288 | .atag_offset = 0x100, |
| 291 | .map_io = ep93xx_map_io, | 289 | .map_io = ep93xx_map_io, |
| 292 | .init_irq = ep93xx_init_irq, | 290 | .init_irq = ep93xx_init_irq, |
| 293 | .handle_irq = vic_handle_irq, | ||
| 294 | .init_time = ep93xx_timer_init, | 291 | .init_time = ep93xx_timer_init, |
| 295 | .init_machine = edb93xx_init_machine, | 292 | .init_machine = edb93xx_init_machine, |
| 296 | .init_late = ep93xx_init_late, | 293 | .init_late = ep93xx_init_late, |
| @@ -304,7 +301,6 @@ MACHINE_START(EDB9302A, "Cirrus Logic EDB9302A Evaluation Board") | |||
| 304 | .atag_offset = 0x100, | 301 | .atag_offset = 0x100, |
| 305 | .map_io = ep93xx_map_io, | 302 | .map_io = ep93xx_map_io, |
| 306 | .init_irq = ep93xx_init_irq, | 303 | .init_irq = ep93xx_init_irq, |
| 307 | .handle_irq = vic_handle_irq, | ||
| 308 | .init_time = ep93xx_timer_init, | 304 | .init_time = ep93xx_timer_init, |
| 309 | .init_machine = edb93xx_init_machine, | 305 | .init_machine = edb93xx_init_machine, |
| 310 | .init_late = ep93xx_init_late, | 306 | .init_late = ep93xx_init_late, |
| @@ -318,7 +314,6 @@ MACHINE_START(EDB9307, "Cirrus Logic EDB9307 Evaluation Board") | |||
| 318 | .atag_offset = 0x100, | 314 | .atag_offset = 0x100, |
| 319 | .map_io = ep93xx_map_io, | 315 | .map_io = ep93xx_map_io, |
| 320 | .init_irq = ep93xx_init_irq, | 316 | .init_irq = ep93xx_init_irq, |
| 321 | .handle_irq = vic_handle_irq, | ||
| 322 | .init_time = ep93xx_timer_init, | 317 | .init_time = ep93xx_timer_init, |
| 323 | .init_machine = edb93xx_init_machine, | 318 | .init_machine = edb93xx_init_machine, |
| 324 | .init_late = ep93xx_init_late, | 319 | .init_late = ep93xx_init_late, |
| @@ -332,7 +327,6 @@ MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board") | |||
| 332 | .atag_offset = 0x100, | 327 | .atag_offset = 0x100, |
| 333 | .map_io = ep93xx_map_io, | 328 | .map_io = ep93xx_map_io, |
| 334 | .init_irq = ep93xx_init_irq, | 329 | .init_irq = ep93xx_init_irq, |
| 335 | .handle_irq = vic_handle_irq, | ||
| 336 | .init_time = ep93xx_timer_init, | 330 | .init_time = ep93xx_timer_init, |
| 337 | .init_machine = edb93xx_init_machine, | 331 | .init_machine = edb93xx_init_machine, |
| 338 | .init_late = ep93xx_init_late, | 332 | .init_late = ep93xx_init_late, |
| @@ -346,7 +340,6 @@ MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board") | |||
| 346 | .atag_offset = 0x100, | 340 | .atag_offset = 0x100, |
| 347 | .map_io = ep93xx_map_io, | 341 | .map_io = ep93xx_map_io, |
| 348 | .init_irq = ep93xx_init_irq, | 342 | .init_irq = ep93xx_init_irq, |
| 349 | .handle_irq = vic_handle_irq, | ||
| 350 | .init_time = ep93xx_timer_init, | 343 | .init_time = ep93xx_timer_init, |
| 351 | .init_machine = edb93xx_init_machine, | 344 | .init_machine = edb93xx_init_machine, |
| 352 | .init_late = ep93xx_init_late, | 345 | .init_late = ep93xx_init_late, |
| @@ -360,7 +353,6 @@ MACHINE_START(EDB9315, "Cirrus Logic EDB9315 Evaluation Board") | |||
| 360 | .atag_offset = 0x100, | 353 | .atag_offset = 0x100, |
| 361 | .map_io = ep93xx_map_io, | 354 | .map_io = ep93xx_map_io, |
| 362 | .init_irq = ep93xx_init_irq, | 355 | .init_irq = ep93xx_init_irq, |
| 363 | .handle_irq = vic_handle_irq, | ||
| 364 | .init_time = ep93xx_timer_init, | 356 | .init_time = ep93xx_timer_init, |
| 365 | .init_machine = edb93xx_init_machine, | 357 | .init_machine = edb93xx_init_machine, |
| 366 | .init_late = ep93xx_init_late, | 358 | .init_late = ep93xx_init_late, |
| @@ -374,7 +366,6 @@ MACHINE_START(EDB9315A, "Cirrus Logic EDB9315A Evaluation Board") | |||
| 374 | .atag_offset = 0x100, | 366 | .atag_offset = 0x100, |
| 375 | .map_io = ep93xx_map_io, | 367 | .map_io = ep93xx_map_io, |
| 376 | .init_irq = ep93xx_init_irq, | 368 | .init_irq = ep93xx_init_irq, |
| 377 | .handle_irq = vic_handle_irq, | ||
| 378 | .init_time = ep93xx_timer_init, | 369 | .init_time = ep93xx_timer_init, |
| 379 | .init_machine = edb93xx_init_machine, | 370 | .init_machine = edb93xx_init_machine, |
| 380 | .init_late = ep93xx_init_late, | 371 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/gesbc9312.c b/arch/arm/mach-ep93xx/gesbc9312.c index 76c50f42bd71..0cca5b183309 100644 --- a/arch/arm/mach-ep93xx/gesbc9312.c +++ b/arch/arm/mach-ep93xx/gesbc9312.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | 17 | ||
| 18 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 23 | 22 | ||
| @@ -39,7 +38,6 @@ MACHINE_START(GESBC9312, "Glomation GESBC-9312-sx") | |||
| 39 | .atag_offset = 0x100, | 38 | .atag_offset = 0x100, |
| 40 | .map_io = ep93xx_map_io, | 39 | .map_io = ep93xx_map_io, |
| 41 | .init_irq = ep93xx_init_irq, | 40 | .init_irq = ep93xx_init_irq, |
| 42 | .handle_irq = vic_handle_irq, | ||
| 43 | .init_time = ep93xx_timer_init, | 41 | .init_time = ep93xx_timer_init, |
| 44 | .init_machine = gesbc9312_init_machine, | 42 | .init_machine = gesbc9312_init_machine, |
| 45 | .init_late = ep93xx_init_late, | 43 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/micro9.c b/arch/arm/mach-ep93xx/micro9.c index 777cd2170f8a..373583c29825 100644 --- a/arch/arm/mach-ep93xx/micro9.c +++ b/arch/arm/mach-ep93xx/micro9.c | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | 18 | ||
| 19 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
| 20 | 20 | ||
| 21 | #include <asm/hardware/vic.h> | ||
| 22 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 23 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| 24 | 23 | ||
| @@ -82,7 +81,6 @@ MACHINE_START(MICRO9, "Contec Micro9-High") | |||
| 82 | .atag_offset = 0x100, | 81 | .atag_offset = 0x100, |
| 83 | .map_io = ep93xx_map_io, | 82 | .map_io = ep93xx_map_io, |
| 84 | .init_irq = ep93xx_init_irq, | 83 | .init_irq = ep93xx_init_irq, |
| 85 | .handle_irq = vic_handle_irq, | ||
| 86 | .init_time = ep93xx_timer_init, | 84 | .init_time = ep93xx_timer_init, |
| 87 | .init_machine = micro9_init_machine, | 85 | .init_machine = micro9_init_machine, |
| 88 | .init_late = ep93xx_init_late, | 86 | .init_late = ep93xx_init_late, |
| @@ -96,7 +94,6 @@ MACHINE_START(MICRO9M, "Contec Micro9-Mid") | |||
| 96 | .atag_offset = 0x100, | 94 | .atag_offset = 0x100, |
| 97 | .map_io = ep93xx_map_io, | 95 | .map_io = ep93xx_map_io, |
| 98 | .init_irq = ep93xx_init_irq, | 96 | .init_irq = ep93xx_init_irq, |
| 99 | .handle_irq = vic_handle_irq, | ||
| 100 | .init_time = ep93xx_timer_init, | 97 | .init_time = ep93xx_timer_init, |
| 101 | .init_machine = micro9_init_machine, | 98 | .init_machine = micro9_init_machine, |
| 102 | .init_late = ep93xx_init_late, | 99 | .init_late = ep93xx_init_late, |
| @@ -110,7 +107,6 @@ MACHINE_START(MICRO9L, "Contec Micro9-Lite") | |||
| 110 | .atag_offset = 0x100, | 107 | .atag_offset = 0x100, |
| 111 | .map_io = ep93xx_map_io, | 108 | .map_io = ep93xx_map_io, |
| 112 | .init_irq = ep93xx_init_irq, | 109 | .init_irq = ep93xx_init_irq, |
| 113 | .handle_irq = vic_handle_irq, | ||
| 114 | .init_time = ep93xx_timer_init, | 110 | .init_time = ep93xx_timer_init, |
| 115 | .init_machine = micro9_init_machine, | 111 | .init_machine = micro9_init_machine, |
| 116 | .init_late = ep93xx_init_late, | 112 | .init_late = ep93xx_init_late, |
| @@ -124,7 +120,6 @@ MACHINE_START(MICRO9S, "Contec Micro9-Slim") | |||
| 124 | .atag_offset = 0x100, | 120 | .atag_offset = 0x100, |
| 125 | .map_io = ep93xx_map_io, | 121 | .map_io = ep93xx_map_io, |
| 126 | .init_irq = ep93xx_init_irq, | 122 | .init_irq = ep93xx_init_irq, |
| 127 | .handle_irq = vic_handle_irq, | ||
| 128 | .init_time = ep93xx_timer_init, | 123 | .init_time = ep93xx_timer_init, |
| 129 | .init_machine = micro9_init_machine, | 124 | .init_machine = micro9_init_machine, |
| 130 | .init_late = ep93xx_init_late, | 125 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/simone.c b/arch/arm/mach-ep93xx/simone.c index 6ff39ee2ad5d..36f22c1a31fe 100644 --- a/arch/arm/mach-ep93xx/simone.c +++ b/arch/arm/mach-ep93xx/simone.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/platform_data/video-ep93xx.h> | 25 | #include <linux/platform_data/video-ep93xx.h> |
| 26 | #include <mach/gpio-ep93xx.h> | 26 | #include <mach/gpio-ep93xx.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 29 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 31 | 30 | ||
| @@ -83,7 +82,6 @@ MACHINE_START(SIM_ONE, "Simplemachines Sim.One Board") | |||
| 83 | .atag_offset = 0x100, | 82 | .atag_offset = 0x100, |
| 84 | .map_io = ep93xx_map_io, | 83 | .map_io = ep93xx_map_io, |
| 85 | .init_irq = ep93xx_init_irq, | 84 | .init_irq = ep93xx_init_irq, |
| 86 | .handle_irq = vic_handle_irq, | ||
| 87 | .init_time = ep93xx_timer_init, | 85 | .init_time = ep93xx_timer_init, |
| 88 | .init_machine = simone_init_machine, | 86 | .init_machine = simone_init_machine, |
| 89 | .init_late = ep93xx_init_late, | 87 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/snappercl15.c b/arch/arm/mach-ep93xx/snappercl15.c index 6434c07dbf96..aa86f86638dd 100644 --- a/arch/arm/mach-ep93xx/snappercl15.c +++ b/arch/arm/mach-ep93xx/snappercl15.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <linux/platform_data/video-ep93xx.h> | 31 | #include <linux/platform_data/video-ep93xx.h> |
| 32 | #include <mach/gpio-ep93xx.h> | 32 | #include <mach/gpio-ep93xx.h> |
| 33 | 33 | ||
| 34 | #include <asm/hardware/vic.h> | ||
| 35 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 36 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
| 37 | 36 | ||
| @@ -176,7 +175,6 @@ MACHINE_START(SNAPPER_CL15, "Bluewater Systems Snapper CL15") | |||
| 176 | .atag_offset = 0x100, | 175 | .atag_offset = 0x100, |
| 177 | .map_io = ep93xx_map_io, | 176 | .map_io = ep93xx_map_io, |
| 178 | .init_irq = ep93xx_init_irq, | 177 | .init_irq = ep93xx_init_irq, |
| 179 | .handle_irq = vic_handle_irq, | ||
| 180 | .init_time = ep93xx_timer_init, | 178 | .init_time = ep93xx_timer_init, |
| 181 | .init_machine = snappercl15_init_machine, | 179 | .init_machine = snappercl15_init_machine, |
| 182 | .init_late = ep93xx_init_late, | 180 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index e4fa0d3760a5..61f4b5dc4d7d 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | 22 | ||
| 23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
| 24 | 24 | ||
| 25 | #include <asm/hardware/vic.h> | ||
| 26 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| 27 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 28 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
| @@ -246,7 +245,6 @@ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") | |||
| 246 | .atag_offset = 0x100, | 245 | .atag_offset = 0x100, |
| 247 | .map_io = ts72xx_map_io, | 246 | .map_io = ts72xx_map_io, |
| 248 | .init_irq = ep93xx_init_irq, | 247 | .init_irq = ep93xx_init_irq, |
| 249 | .handle_irq = vic_handle_irq, | ||
| 250 | .init_time = ep93xx_timer_init, | 248 | .init_time = ep93xx_timer_init, |
| 251 | .init_machine = ts72xx_init_machine, | 249 | .init_machine = ts72xx_init_machine, |
| 252 | .init_late = ep93xx_init_late, | 250 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-ep93xx/vision_ep9307.c b/arch/arm/mach-ep93xx/vision_ep9307.c index 8610ba293991..605956fd07a2 100644 --- a/arch/arm/mach-ep93xx/vision_ep9307.c +++ b/arch/arm/mach-ep93xx/vision_ep9307.c | |||
| @@ -34,7 +34,6 @@ | |||
| 34 | #include <linux/platform_data/spi-ep93xx.h> | 34 | #include <linux/platform_data/spi-ep93xx.h> |
| 35 | #include <mach/gpio-ep93xx.h> | 35 | #include <mach/gpio-ep93xx.h> |
| 36 | 36 | ||
| 37 | #include <asm/hardware/vic.h> | ||
| 38 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
| 39 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
| 40 | #include <asm/mach/arch.h> | 39 | #include <asm/mach/arch.h> |
| @@ -364,7 +363,6 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307") | |||
| 364 | .atag_offset = 0x100, | 363 | .atag_offset = 0x100, |
| 365 | .map_io = vision_map_io, | 364 | .map_io = vision_map_io, |
| 366 | .init_irq = ep93xx_init_irq, | 365 | .init_irq = ep93xx_init_irq, |
| 367 | .handle_irq = vic_handle_irq, | ||
| 368 | .init_time = ep93xx_timer_init, | 366 | .init_time = ep93xx_timer_init, |
| 369 | .init_machine = vision_init_machine, | 367 | .init_machine = vision_init_machine, |
| 370 | .init_late = ep93xx_init_late, | 368 | .init_late = ep93xx_init_late, |
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 1a89824a5f78..4ea80bc4ef9b 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
| @@ -22,12 +22,13 @@ | |||
| 22 | #include <linux/of_irq.h> | 22 | #include <linux/of_irq.h> |
| 23 | #include <linux/export.h> | 23 | #include <linux/export.h> |
| 24 | #include <linux/irqdomain.h> | 24 | #include <linux/irqdomain.h> |
| 25 | #include <linux/irqchip.h> | ||
| 25 | #include <linux/of_address.h> | 26 | #include <linux/of_address.h> |
| 27 | #include <linux/irqchip/arm-gic.h> | ||
| 26 | 28 | ||
| 27 | #include <asm/proc-fns.h> | 29 | #include <asm/proc-fns.h> |
| 28 | #include <asm/exception.h> | 30 | #include <asm/exception.h> |
| 29 | #include <asm/hardware/cache-l2x0.h> | 31 | #include <asm/hardware/cache-l2x0.h> |
| 30 | #include <asm/hardware/gic.h> | ||
| 31 | #include <asm/mach/map.h> | 32 | #include <asm/mach/map.h> |
| 32 | #include <asm/mach/irq.h> | 33 | #include <asm/mach/irq.h> |
| 33 | #include <asm/cacheflush.h> | 34 | #include <asm/cacheflush.h> |
| @@ -644,8 +645,6 @@ static int __init combiner_of_init(struct device_node *np, | |||
| 644 | } | 645 | } |
| 645 | 646 | ||
| 646 | static const struct of_device_id exynos_dt_irq_match[] = { | 647 | static const struct of_device_id exynos_dt_irq_match[] = { |
| 647 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 648 | { .compatible = "arm,cortex-a15-gic", .data = gic_of_init, }, | ||
| 649 | { .compatible = "samsung,exynos4210-combiner", | 648 | { .compatible = "samsung,exynos4210-combiner", |
| 650 | .data = combiner_of_init, }, | 649 | .data = combiner_of_init, }, |
| 651 | {}, | 650 | {}, |
| @@ -661,8 +660,10 @@ void __init exynos4_init_irq(void) | |||
| 661 | if (!of_have_populated_dt()) | 660 | if (!of_have_populated_dt()) |
| 662 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset, NULL); | 661 | gic_init_bases(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU, gic_bank_offset, NULL); |
| 663 | #ifdef CONFIG_OF | 662 | #ifdef CONFIG_OF |
| 664 | else | 663 | else { |
| 664 | irqchip_init(); | ||
| 665 | of_irq_init(exynos_dt_irq_match); | 665 | of_irq_init(exynos_dt_irq_match); |
| 666 | } | ||
| 666 | #endif | 667 | #endif |
| 667 | 668 | ||
| 668 | if (!of_have_populated_dt()) | 669 | if (!of_have_populated_dt()) |
| @@ -679,6 +680,7 @@ void __init exynos4_init_irq(void) | |||
| 679 | void __init exynos5_init_irq(void) | 680 | void __init exynos5_init_irq(void) |
| 680 | { | 681 | { |
| 681 | #ifdef CONFIG_OF | 682 | #ifdef CONFIG_OF |
| 683 | irqchip_init(); | ||
| 682 | of_irq_init(exynos_dt_irq_match); | 684 | of_irq_init(exynos_dt_irq_match); |
| 683 | #endif | 685 | #endif |
| 684 | /* | 686 | /* |
diff --git a/arch/arm/mach-exynos/include/mach/regs-irq.h b/arch/arm/mach-exynos/include/mach/regs-irq.h index 9c7b4bfd546f..f2b50506b9f6 100644 --- a/arch/arm/mach-exynos/include/mach/regs-irq.h +++ b/arch/arm/mach-exynos/include/mach/regs-irq.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | #ifndef __ASM_ARCH_REGS_IRQ_H | 13 | #ifndef __ASM_ARCH_REGS_IRQ_H |
| 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ | 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ |
| 15 | 15 | ||
| 16 | #include <asm/hardware/gic.h> | 16 | #include <linux/irqchip/arm-gic.h> |
| 17 | #include <mach/map.h> | 17 | #include <mach/map.h> |
| 18 | 18 | ||
| 19 | #endif /* __ASM_ARCH_REGS_IRQ_H */ | 19 | #endif /* __ASM_ARCH_REGS_IRQ_H */ |
diff --git a/arch/arm/mach-exynos/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c index 2f18130d0d10..685f29173afa 100644 --- a/arch/arm/mach-exynos/mach-armlex4210.c +++ b/arch/arm/mach-exynos/mach-armlex4210.c | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <linux/smsc911x.h> | 16 | #include <linux/smsc911x.h> |
| 17 | 17 | ||
| 18 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
| 21 | 20 | ||
| 22 | #include <plat/cpu.h> | 21 | #include <plat/cpu.h> |
| @@ -201,7 +200,6 @@ MACHINE_START(ARMLEX4210, "ARMLEX4210") | |||
| 201 | .smp = smp_ops(exynos_smp_ops), | 200 | .smp = smp_ops(exynos_smp_ops), |
| 202 | .init_irq = exynos4_init_irq, | 201 | .init_irq = exynos4_init_irq, |
| 203 | .map_io = armlex4210_map_io, | 202 | .map_io = armlex4210_map_io, |
| 204 | .handle_irq = gic_handle_irq, | ||
| 205 | .init_machine = armlex4210_machine_init, | 203 | .init_machine = armlex4210_machine_init, |
| 206 | .init_late = exynos_init_late, | 204 | .init_late = exynos_init_late, |
| 207 | .init_time = exynos4_timer_init, | 205 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-exynos4-dt.c b/arch/arm/mach-exynos/mach-exynos4-dt.c index 160030168b19..112d10e53d20 100644 --- a/arch/arm/mach-exynos/mach-exynos4-dt.c +++ b/arch/arm/mach-exynos/mach-exynos4-dt.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/serial_core.h> | 15 | #include <linux/serial_core.h> |
| 16 | 16 | ||
| 17 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| 18 | #include <asm/hardware/gic.h> | ||
| 19 | #include <mach/map.h> | 18 | #include <mach/map.h> |
| 20 | 19 | ||
| 21 | #include <plat/cpu.h> | 20 | #include <plat/cpu.h> |
| @@ -107,7 +106,6 @@ DT_MACHINE_START(EXYNOS4210_DT, "Samsung Exynos4 (Flattened Device Tree)") | |||
| 107 | .smp = smp_ops(exynos_smp_ops), | 106 | .smp = smp_ops(exynos_smp_ops), |
| 108 | .init_irq = exynos4_init_irq, | 107 | .init_irq = exynos4_init_irq, |
| 109 | .map_io = exynos4_dt_map_io, | 108 | .map_io = exynos4_dt_map_io, |
| 110 | .handle_irq = gic_handle_irq, | ||
| 111 | .init_machine = exynos4_dt_machine_init, | 109 | .init_machine = exynos4_dt_machine_init, |
| 112 | .init_late = exynos_init_late, | 110 | .init_late = exynos_init_late, |
| 113 | .init_time = exynos4_timer_init, | 111 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-exynos5-dt.c b/arch/arm/mach-exynos/mach-exynos5-dt.c index 4e074c67cc8b..0deeecffa3ae 100644 --- a/arch/arm/mach-exynos/mach-exynos5-dt.c +++ b/arch/arm/mach-exynos/mach-exynos5-dt.c | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | 17 | ||
| 18 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <mach/map.h> | 19 | #include <mach/map.h> |
| 21 | #include <mach/regs-pmu.h> | 20 | #include <mach/regs-pmu.h> |
| 22 | 21 | ||
| @@ -179,7 +178,6 @@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)") | |||
| 179 | .init_irq = exynos5_init_irq, | 178 | .init_irq = exynos5_init_irq, |
| 180 | .smp = smp_ops(exynos_smp_ops), | 179 | .smp = smp_ops(exynos_smp_ops), |
| 181 | .map_io = exynos5_dt_map_io, | 180 | .map_io = exynos5_dt_map_io, |
| 182 | .handle_irq = gic_handle_irq, | ||
| 183 | .init_machine = exynos5_dt_machine_init, | 181 | .init_machine = exynos5_dt_machine_init, |
| 184 | .init_late = exynos_init_late, | 182 | .init_late = exynos_init_late, |
| 185 | .init_time = exynos4_timer_init, | 183 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index dccd1d16b836..b8b3fbf0bae7 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c | |||
| @@ -39,7 +39,6 @@ | |||
| 39 | #include <media/v4l2-mediabus.h> | 39 | #include <media/v4l2-mediabus.h> |
| 40 | 40 | ||
| 41 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
| 42 | #include <asm/hardware/gic.h> | ||
| 43 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
| 44 | 43 | ||
| 45 | #include <plat/adc.h> | 44 | #include <plat/adc.h> |
| @@ -1379,7 +1378,6 @@ MACHINE_START(NURI, "NURI") | |||
| 1379 | .smp = smp_ops(exynos_smp_ops), | 1378 | .smp = smp_ops(exynos_smp_ops), |
| 1380 | .init_irq = exynos4_init_irq, | 1379 | .init_irq = exynos4_init_irq, |
| 1381 | .map_io = nuri_map_io, | 1380 | .map_io = nuri_map_io, |
| 1382 | .handle_irq = gic_handle_irq, | ||
| 1383 | .init_machine = nuri_machine_init, | 1381 | .init_machine = nuri_machine_init, |
| 1384 | .init_late = exynos_init_late, | 1382 | .init_late = exynos_init_late, |
| 1385 | .init_time = exynos4_timer_init, | 1383 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index 4e1156324562..579d2d171daa 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | #include <linux/platform_data/usb-exynos.h> | 29 | #include <linux/platform_data/usb-exynos.h> |
| 30 | 30 | ||
| 31 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 32 | #include <asm/hardware/gic.h> | ||
| 33 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 34 | 33 | ||
| 35 | #include <video/platform_lcd.h> | 34 | #include <video/platform_lcd.h> |
| @@ -814,7 +813,6 @@ MACHINE_START(ORIGEN, "ORIGEN") | |||
| 814 | .smp = smp_ops(exynos_smp_ops), | 813 | .smp = smp_ops(exynos_smp_ops), |
| 815 | .init_irq = exynos4_init_irq, | 814 | .init_irq = exynos4_init_irq, |
| 816 | .map_io = origen_map_io, | 815 | .map_io = origen_map_io, |
| 817 | .handle_irq = gic_handle_irq, | ||
| 818 | .init_machine = origen_machine_init, | 816 | .init_machine = origen_machine_init, |
| 819 | .init_late = exynos_init_late, | 817 | .init_late = exynos_init_late, |
| 820 | .init_time = exynos4_timer_init, | 818 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c index e9c9c2995f09..fe6149624b84 100644 --- a/arch/arm/mach-exynos/mach-smdk4x12.c +++ b/arch/arm/mach-exynos/mach-smdk4x12.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/platform_data/s3c-hsotg.h> | 25 | #include <linux/platform_data/s3c-hsotg.h> |
| 26 | 26 | ||
| 27 | #include <asm/mach/arch.h> | 27 | #include <asm/mach/arch.h> |
| 28 | #include <asm/hardware/gic.h> | ||
| 29 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 30 | 29 | ||
| 31 | #include <video/samsung_fimd.h> | 30 | #include <video/samsung_fimd.h> |
| @@ -376,7 +375,6 @@ MACHINE_START(SMDK4212, "SMDK4212") | |||
| 376 | .smp = smp_ops(exynos_smp_ops), | 375 | .smp = smp_ops(exynos_smp_ops), |
| 377 | .init_irq = exynos4_init_irq, | 376 | .init_irq = exynos4_init_irq, |
| 378 | .map_io = smdk4x12_map_io, | 377 | .map_io = smdk4x12_map_io, |
| 379 | .handle_irq = gic_handle_irq, | ||
| 380 | .init_machine = smdk4x12_machine_init, | 378 | .init_machine = smdk4x12_machine_init, |
| 381 | .init_time = exynos4_timer_init, | 379 | .init_time = exynos4_timer_init, |
| 382 | .restart = exynos4_restart, | 380 | .restart = exynos4_restart, |
| @@ -390,7 +388,6 @@ MACHINE_START(SMDK4412, "SMDK4412") | |||
| 390 | .smp = smp_ops(exynos_smp_ops), | 388 | .smp = smp_ops(exynos_smp_ops), |
| 391 | .init_irq = exynos4_init_irq, | 389 | .init_irq = exynos4_init_irq, |
| 392 | .map_io = smdk4x12_map_io, | 390 | .map_io = smdk4x12_map_io, |
| 393 | .handle_irq = gic_handle_irq, | ||
| 394 | .init_machine = smdk4x12_machine_init, | 391 | .init_machine = smdk4x12_machine_init, |
| 395 | .init_late = exynos_init_late, | 392 | .init_late = exynos_init_late, |
| 396 | .init_time = exynos4_timer_init, | 393 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index b228ab9bda0b..d71672922b19 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include <linux/platform_data/usb-exynos.h> | 26 | #include <linux/platform_data/usb-exynos.h> |
| 27 | 27 | ||
| 28 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 29 | #include <asm/hardware/gic.h> | ||
| 30 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 31 | 30 | ||
| 32 | #include <video/platform_lcd.h> | 31 | #include <video/platform_lcd.h> |
| @@ -423,7 +422,6 @@ MACHINE_START(SMDKV310, "SMDKV310") | |||
| 423 | .smp = smp_ops(exynos_smp_ops), | 422 | .smp = smp_ops(exynos_smp_ops), |
| 424 | .init_irq = exynos4_init_irq, | 423 | .init_irq = exynos4_init_irq, |
| 425 | .map_io = smdkv310_map_io, | 424 | .map_io = smdkv310_map_io, |
| 426 | .handle_irq = gic_handle_irq, | ||
| 427 | .init_machine = smdkv310_machine_init, | 425 | .init_machine = smdkv310_machine_init, |
| 428 | .init_time = exynos4_timer_init, | 426 | .init_time = exynos4_timer_init, |
| 429 | .reserve = &smdkv310_reserve, | 427 | .reserve = &smdkv310_reserve, |
| @@ -436,7 +434,6 @@ MACHINE_START(SMDKC210, "SMDKC210") | |||
| 436 | .smp = smp_ops(exynos_smp_ops), | 434 | .smp = smp_ops(exynos_smp_ops), |
| 437 | .init_irq = exynos4_init_irq, | 435 | .init_irq = exynos4_init_irq, |
| 438 | .map_io = smdkv310_map_io, | 436 | .map_io = smdkv310_map_io, |
| 439 | .handle_irq = gic_handle_irq, | ||
| 440 | .init_machine = smdkv310_machine_init, | 437 | .init_machine = smdkv310_machine_init, |
| 441 | .init_late = exynos_init_late, | 438 | .init_late = exynos_init_late, |
| 442 | .init_time = exynos4_timer_init, | 439 | .init_time = exynos4_timer_init, |
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 866f29a9beee..c9d33a43103e 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | #include <drm/exynos_drm.h> | 29 | #include <drm/exynos_drm.h> |
| 30 | 30 | ||
| 31 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 32 | #include <asm/hardware/gic.h> | ||
| 33 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 34 | 33 | ||
| 35 | #include <video/samsung_fimd.h> | 34 | #include <video/samsung_fimd.h> |
| @@ -1151,7 +1150,6 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210") | |||
| 1151 | .smp = smp_ops(exynos_smp_ops), | 1150 | .smp = smp_ops(exynos_smp_ops), |
| 1152 | .init_irq = exynos4_init_irq, | 1151 | .init_irq = exynos4_init_irq, |
| 1153 | .map_io = universal_map_io, | 1152 | .map_io = universal_map_io, |
| 1154 | .handle_irq = gic_handle_irq, | ||
| 1155 | .init_machine = universal_machine_init, | 1153 | .init_machine = universal_machine_init, |
| 1156 | .init_late = exynos_init_late, | 1154 | .init_late = exynos_init_late, |
| 1157 | .init_time = s5p_timer_init, | 1155 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-exynos/mct.c b/arch/arm/mach-exynos/mct.c index 577ee1b03ff4..c9d6650f9b5d 100644 --- a/arch/arm/mach-exynos/mct.c +++ b/arch/arm/mach-exynos/mct.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/of.h> | 22 | #include <linux/of.h> |
| 23 | 23 | ||
| 24 | #include <asm/arch_timer.h> | 24 | #include <asm/arch_timer.h> |
| 25 | #include <asm/hardware/gic.h> | ||
| 26 | #include <asm/localtimer.h> | 25 | #include <asm/localtimer.h> |
| 27 | 26 | ||
| 28 | #include <plat/cpu.h> | 27 | #include <plat/cpu.h> |
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index c5c840e947b8..60f7c5be057d 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
| @@ -20,9 +20,9 @@ | |||
| 20 | #include <linux/jiffies.h> | 20 | #include <linux/jiffies.h> |
| 21 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/irqchip/arm-gic.h> | ||
| 23 | 24 | ||
| 24 | #include <asm/cacheflush.h> | 25 | #include <asm/cacheflush.h> |
| 25 | #include <asm/hardware/gic.h> | ||
| 26 | #include <asm/smp_plat.h> | 26 | #include <asm/smp_plat.h> |
| 27 | #include <asm/smp_scu.h> | 27 | #include <asm/smp_scu.h> |
| 28 | 28 | ||
| @@ -149,7 +149,7 @@ static int __cpuinit exynos_boot_secondary(unsigned int cpu, struct task_struct | |||
| 149 | 149 | ||
| 150 | __raw_writel(virt_to_phys(exynos4_secondary_startup), | 150 | __raw_writel(virt_to_phys(exynos4_secondary_startup), |
| 151 | cpu_boot_reg(phys_cpu)); | 151 | cpu_boot_reg(phys_cpu)); |
| 152 | gic_raise_softirq(cpumask_of(cpu), 0); | 152 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 153 | 153 | ||
| 154 | if (pen_release == -1) | 154 | if (pen_release == -1) |
| 155 | break; | 155 | break; |
| @@ -190,8 +190,6 @@ static void __init exynos_smp_init_cpus(void) | |||
| 190 | 190 | ||
| 191 | for (i = 0; i < ncores; i++) | 191 | for (i = 0; i < ncores; i++) |
| 192 | set_cpu_possible(i, true); | 192 | set_cpu_possible(i, true); |
| 193 | |||
| 194 | set_smp_cross_call(gic_raise_softirq); | ||
| 195 | } | 193 | } |
| 196 | 194 | ||
| 197 | static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) | 195 | static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c index 41e254cac1ac..fd630bccbd31 100644 --- a/arch/arm/mach-highbank/highbank.c +++ b/arch/arm/mach-highbank/highbank.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/dma-mapping.h> | 18 | #include <linux/dma-mapping.h> |
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | #include <linux/irqchip.h> | ||
| 21 | #include <linux/irqdomain.h> | 22 | #include <linux/irqdomain.h> |
| 22 | #include <linux/of.h> | 23 | #include <linux/of.h> |
| 23 | #include <linux/of_irq.h> | 24 | #include <linux/of_irq.h> |
| @@ -32,7 +33,6 @@ | |||
| 32 | #include <asm/smp_twd.h> | 33 | #include <asm/smp_twd.h> |
| 33 | #include <asm/hardware/arm_timer.h> | 34 | #include <asm/hardware/arm_timer.h> |
| 34 | #include <asm/hardware/timer-sp.h> | 35 | #include <asm/hardware/timer-sp.h> |
| 35 | #include <asm/hardware/gic.h> | ||
| 36 | #include <asm/hardware/cache-l2x0.h> | 36 | #include <asm/hardware/cache-l2x0.h> |
| 37 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
| 38 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
| @@ -66,12 +66,6 @@ void highbank_set_cpu_jump(int cpu, void *jump_addr) | |||
| 66 | HB_JUMP_TABLE_PHYS(cpu) + 15); | 66 | HB_JUMP_TABLE_PHYS(cpu) + 15); |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | const static struct of_device_id irq_match[] = { | ||
| 70 | { .compatible = "arm,cortex-a15-gic", .data = gic_of_init, }, | ||
| 71 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 72 | {} | ||
| 73 | }; | ||
| 74 | |||
| 75 | #ifdef CONFIG_CACHE_L2X0 | 69 | #ifdef CONFIG_CACHE_L2X0 |
| 76 | static void highbank_l2x0_disable(void) | 70 | static void highbank_l2x0_disable(void) |
| 77 | { | 71 | { |
| @@ -82,7 +76,7 @@ static void highbank_l2x0_disable(void) | |||
| 82 | 76 | ||
| 83 | static void __init highbank_init_irq(void) | 77 | static void __init highbank_init_irq(void) |
| 84 | { | 78 | { |
| 85 | of_irq_init(irq_match); | 79 | irqchip_init(); |
| 86 | 80 | ||
| 87 | if (of_find_compatible_node(NULL, NULL, "arm,cortex-a9")) | 81 | if (of_find_compatible_node(NULL, NULL, "arm,cortex-a9")) |
| 88 | highbank_scu_map_io(); | 82 | highbank_scu_map_io(); |
| @@ -206,7 +200,6 @@ DT_MACHINE_START(HIGHBANK, "Highbank") | |||
| 206 | .map_io = debug_ll_io_init, | 200 | .map_io = debug_ll_io_init, |
| 207 | .init_irq = highbank_init_irq, | 201 | .init_irq = highbank_init_irq, |
| 208 | .init_time = highbank_timer_init, | 202 | .init_time = highbank_timer_init, |
| 209 | .handle_irq = gic_handle_irq, | ||
| 210 | .init_machine = highbank_init, | 203 | .init_machine = highbank_init, |
| 211 | .dt_compat = highbank_match, | 204 | .dt_compat = highbank_match, |
| 212 | .restart = highbank_restart, | 205 | .restart = highbank_restart, |
diff --git a/arch/arm/mach-highbank/platsmp.c b/arch/arm/mach-highbank/platsmp.c index 4ecc864ac8b9..8797a7001720 100644 --- a/arch/arm/mach-highbank/platsmp.c +++ b/arch/arm/mach-highbank/platsmp.c | |||
| @@ -17,9 +17,9 @@ | |||
| 17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | #include <linux/irqchip/arm-gic.h> | ||
| 20 | 21 | ||
| 21 | #include <asm/smp_scu.h> | 22 | #include <asm/smp_scu.h> |
| 22 | #include <asm/hardware/gic.h> | ||
| 23 | 23 | ||
| 24 | #include "core.h" | 24 | #include "core.h" |
| 25 | 25 | ||
| @@ -33,7 +33,7 @@ static void __cpuinit highbank_secondary_init(unsigned int cpu) | |||
| 33 | static int __cpuinit highbank_boot_secondary(unsigned int cpu, struct task_struct *idle) | 33 | static int __cpuinit highbank_boot_secondary(unsigned int cpu, struct task_struct *idle) |
| 34 | { | 34 | { |
| 35 | highbank_set_cpu_jump(cpu, secondary_startup); | 35 | highbank_set_cpu_jump(cpu, secondary_startup); |
| 36 | gic_raise_softirq(cpumask_of(cpu), 0); | 36 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 37 | return 0; | 37 | return 0; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| @@ -56,8 +56,6 @@ static void __init highbank_smp_init_cpus(void) | |||
| 56 | 56 | ||
| 57 | for (i = 0; i < ncores; i++) | 57 | for (i = 0; i < ncores; i++) |
| 58 | set_cpu_possible(i, true); | 58 | set_cpu_possible(i, true); |
| 59 | |||
| 60 | set_smp_cross_call(gic_raise_softirq); | ||
| 61 | } | 59 | } |
| 62 | 60 | ||
| 63 | static void __init highbank_smp_prepare_cpus(unsigned int max_cpus) | 61 | static void __init highbank_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index 7191ab4434e5..b0164da63b0c 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h | |||
| @@ -112,7 +112,6 @@ void tzic_handle_irq(struct pt_regs *); | |||
| 112 | #define imx50_handle_irq tzic_handle_irq | 112 | #define imx50_handle_irq tzic_handle_irq |
| 113 | #define imx51_handle_irq tzic_handle_irq | 113 | #define imx51_handle_irq tzic_handle_irq |
| 114 | #define imx53_handle_irq tzic_handle_irq | 114 | #define imx53_handle_irq tzic_handle_irq |
| 115 | #define imx6q_handle_irq gic_handle_irq | ||
| 116 | 115 | ||
| 117 | extern void imx_enable_cpu(int cpu, bool enable); | 116 | extern void imx_enable_cpu(int cpu, bool enable); |
| 118 | extern void imx_set_cpu_jump(int cpu, void *jump_addr); | 117 | extern void imx_set_cpu_jump(int cpu, void *jump_addr); |
diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c index e1537f9e45b8..ff24920699e4 100644 --- a/arch/arm/mach-imx/gpc.c +++ b/arch/arm/mach-imx/gpc.c | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/of_address.h> | 16 | #include <linux/of_address.h> |
| 17 | #include <linux/of_irq.h> | 17 | #include <linux/of_irq.h> |
| 18 | #include <asm/hardware/gic.h> | 18 | #include <linux/irqchip/arm-gic.h> |
| 19 | 19 | ||
| 20 | #define GPC_IMR1 0x008 | 20 | #define GPC_IMR1 0x008 |
| 21 | #define GPC_PGC_CPU_PDN 0x2a0 | 21 | #define GPC_PGC_CPU_PDN 0x2a0 |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index cd277a0f5b16..8d3d06e0e8a1 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | #include <linux/irqchip.h> | ||
| 21 | #include <linux/of.h> | 22 | #include <linux/of.h> |
| 22 | #include <linux/of_address.h> | 23 | #include <linux/of_address.h> |
| 23 | #include <linux/of_irq.h> | 24 | #include <linux/of_irq.h> |
| @@ -29,7 +30,6 @@ | |||
| 29 | #include <asm/cpuidle.h> | 30 | #include <asm/cpuidle.h> |
| 30 | #include <asm/smp_twd.h> | 31 | #include <asm/smp_twd.h> |
| 31 | #include <asm/hardware/cache-l2x0.h> | 32 | #include <asm/hardware/cache-l2x0.h> |
| 32 | #include <asm/hardware/gic.h> | ||
| 33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
| 35 | #include <asm/system_misc.h> | 35 | #include <asm/system_misc.h> |
| @@ -221,17 +221,12 @@ static void __init imx6q_map_io(void) | |||
| 221 | imx6q_clock_map_io(); | 221 | imx6q_clock_map_io(); |
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | static const struct of_device_id imx6q_irq_match[] __initconst = { | ||
| 225 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 226 | { /* sentinel */ } | ||
| 227 | }; | ||
| 228 | |||
| 229 | static void __init imx6q_init_irq(void) | 224 | static void __init imx6q_init_irq(void) |
| 230 | { | 225 | { |
| 231 | l2x0_of_init(0, ~0UL); | 226 | l2x0_of_init(0, ~0UL); |
| 232 | imx_src_init(); | 227 | imx_src_init(); |
| 233 | imx_gpc_init(); | 228 | imx_gpc_init(); |
| 234 | of_irq_init(imx6q_irq_match); | 229 | irqchip_init(); |
| 235 | } | 230 | } |
| 236 | 231 | ||
| 237 | static void __init imx6q_timer_init(void) | 232 | static void __init imx6q_timer_init(void) |
| @@ -250,7 +245,6 @@ DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)") | |||
| 250 | .smp = smp_ops(imx_smp_ops), | 245 | .smp = smp_ops(imx_smp_ops), |
| 251 | .map_io = imx6q_map_io, | 246 | .map_io = imx6q_map_io, |
| 252 | .init_irq = imx6q_init_irq, | 247 | .init_irq = imx6q_init_irq, |
| 253 | .handle_irq = imx6q_handle_irq, | ||
| 254 | .init_time = imx6q_timer_init, | 248 | .init_time = imx6q_timer_init, |
| 255 | .init_machine = imx6q_init_machine, | 249 | .init_machine = imx6q_init_machine, |
| 256 | .init_late = imx6q_init_late, | 250 | .init_late = imx6q_init_late, |
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 3777b805b76b..d35693117991 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c | |||
| @@ -12,9 +12,9 @@ | |||
| 12 | 12 | ||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 15 | #include <linux/irqchip/arm-gic.h> | ||
| 15 | #include <asm/page.h> | 16 | #include <asm/page.h> |
| 16 | #include <asm/smp_scu.h> | 17 | #include <asm/smp_scu.h> |
| 17 | #include <asm/hardware/gic.h> | ||
| 18 | #include <asm/mach/map.h> | 18 | #include <asm/mach/map.h> |
| 19 | 19 | ||
| 20 | #include "common.h" | 20 | #include "common.h" |
| @@ -71,8 +71,6 @@ static void __init imx_smp_init_cpus(void) | |||
| 71 | 71 | ||
| 72 | for (i = 0; i < ncores; i++) | 72 | for (i = 0; i < ncores; i++) |
| 73 | set_cpu_possible(i, true); | 73 | set_cpu_possible(i, true); |
| 74 | |||
| 75 | set_smp_cross_call(gic_raise_softirq); | ||
| 76 | } | 74 | } |
| 77 | 75 | ||
| 78 | void imx_smp_prepare(void) | 76 | void imx_smp_prepare(void) |
diff --git a/arch/arm/mach-msm/board-dt-8660.c b/arch/arm/mach-msm/board-dt-8660.c index 27c41eabfd12..7dcfc5300bbd 100644 --- a/arch/arm/mach-msm/board-dt-8660.c +++ b/arch/arm/mach-msm/board-dt-8660.c | |||
| @@ -11,26 +11,15 @@ | |||
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/irqchip.h> | ||
| 14 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 15 | #include <linux/of_irq.h> | ||
| 16 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
| 17 | 17 | ||
| 18 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | 19 | ||
| 21 | #include <mach/board.h> | 20 | #include <mach/board.h> |
| 22 | #include "common.h" | 21 | #include "common.h" |
| 23 | 22 | ||
| 24 | static const struct of_device_id msm_dt_gic_match[] __initconst = { | ||
| 25 | { .compatible = "qcom,msm-8660-qgic", .data = gic_of_init }, | ||
| 26 | {} | ||
| 27 | }; | ||
| 28 | |||
| 29 | static void __init msm8x60_init_irq(void) | ||
| 30 | { | ||
| 31 | of_irq_init(msm_dt_gic_match); | ||
| 32 | } | ||
| 33 | |||
| 34 | static void __init msm8x60_init_late(void) | 23 | static void __init msm8x60_init_late(void) |
| 35 | { | 24 | { |
| 36 | smd_debugfs_init(); | 25 | smd_debugfs_init(); |
| @@ -55,8 +44,7 @@ static const char *msm8x60_fluid_match[] __initdata = { | |||
| 55 | DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)") | 44 | DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)") |
| 56 | .smp = smp_ops(msm_smp_ops), | 45 | .smp = smp_ops(msm_smp_ops), |
| 57 | .map_io = msm_map_msm8x60_io, | 46 | .map_io = msm_map_msm8x60_io, |
| 58 | .init_irq = msm8x60_init_irq, | 47 | .init_irq = irqchip_init, |
| 59 | .handle_irq = gic_handle_irq, | ||
| 60 | .init_machine = msm8x60_dt_init, | 48 | .init_machine = msm8x60_dt_init, |
| 61 | .init_late = msm8x60_init_late, | 49 | .init_late = msm8x60_init_late, |
| 62 | .init_time = msm_dt_timer_init, | 50 | .init_time = msm_dt_timer_init, |
diff --git a/arch/arm/mach-msm/board-dt-8960.c b/arch/arm/mach-msm/board-dt-8960.c index 3226d5276962..73019363ffa4 100644 --- a/arch/arm/mach-msm/board-dt-8960.c +++ b/arch/arm/mach-msm/board-dt-8960.c | |||
| @@ -11,24 +11,13 @@ | |||
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/of_irq.h> | 14 | #include <linux/irqchip.h> |
| 15 | #include <linux/of_platform.h> | 15 | #include <linux/of_platform.h> |
| 16 | 16 | ||
| 17 | #include <asm/hardware/gic.h> | ||
| 18 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| 19 | 18 | ||
| 20 | #include "common.h" | 19 | #include "common.h" |
| 21 | 20 | ||
| 22 | static const struct of_device_id msm_dt_gic_match[] __initconst = { | ||
| 23 | { .compatible = "qcom,msm-qgic2", .data = gic_of_init }, | ||
| 24 | { } | ||
| 25 | }; | ||
| 26 | |||
| 27 | static void __init msm_dt_init_irq(void) | ||
| 28 | { | ||
| 29 | of_irq_init(msm_dt_gic_match); | ||
| 30 | } | ||
| 31 | |||
| 32 | static void __init msm_dt_init(void) | 21 | static void __init msm_dt_init(void) |
| 33 | { | 22 | { |
| 34 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 23 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
| @@ -42,9 +31,8 @@ static const char * const msm8960_dt_match[] __initconst = { | |||
| 42 | DT_MACHINE_START(MSM8960_DT, "Qualcomm MSM (Flattened Device Tree)") | 31 | DT_MACHINE_START(MSM8960_DT, "Qualcomm MSM (Flattened Device Tree)") |
| 43 | .smp = smp_ops(msm_smp_ops), | 32 | .smp = smp_ops(msm_smp_ops), |
| 44 | .map_io = msm_map_msm8960_io, | 33 | .map_io = msm_map_msm8960_io, |
| 45 | .init_irq = msm_dt_init_irq, | 34 | .init_irq = irqchip_init, |
| 46 | .init_time = msm_dt_timer_init, | 35 | .init_time = msm_dt_timer_init, |
| 47 | .init_machine = msm_dt_init, | 36 | .init_machine = msm_dt_init, |
| 48 | .dt_compat = msm8960_dt_match, | 37 | .dt_compat = msm8960_dt_match, |
| 49 | .handle_irq = gic_handle_irq, | ||
| 50 | MACHINE_END | 38 | MACHINE_END |
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c index 7ed69b69c87c..42932865416a 100644 --- a/arch/arm/mach-msm/platsmp.c +++ b/arch/arm/mach-msm/platsmp.c | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | #include <linux/jiffies.h> | 15 | #include <linux/jiffies.h> |
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
| 18 | #include <linux/irqchip/arm-gic.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/cacheflush.h> | 20 | #include <asm/cacheflush.h> |
| 21 | #include <asm/cputype.h> | 21 | #include <asm/cputype.h> |
| 22 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
| @@ -115,7 +115,7 @@ static int __cpuinit msm_boot_secondary(unsigned int cpu, struct task_struct *id | |||
| 115 | * the boot monitor to read the system wide flags register, | 115 | * the boot monitor to read the system wide flags register, |
| 116 | * and branch to the address found there. | 116 | * and branch to the address found there. |
| 117 | */ | 117 | */ |
| 118 | gic_raise_softirq(cpumask_of(cpu), 0); | 118 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 119 | 119 | ||
| 120 | timeout = jiffies + (1 * HZ); | 120 | timeout = jiffies + (1 * HZ); |
| 121 | while (time_before(jiffies, timeout)) { | 121 | while (time_before(jiffies, timeout)) { |
| @@ -153,8 +153,6 @@ static void __init msm_smp_init_cpus(void) | |||
| 153 | 153 | ||
| 154 | for (i = 0; i < ncores; i++) | 154 | for (i = 0; i < ncores; i++) |
| 155 | set_cpu_possible(i, true); | 155 | set_cpu_possible(i, true); |
| 156 | |||
| 157 | set_smp_cross_call(gic_raise_softirq); | ||
| 158 | } | 156 | } |
| 159 | 157 | ||
| 160 | static void __init msm_smp_prepare_cpus(unsigned int max_cpus) | 158 | static void __init msm_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index dc8864cd3a16..2969027f02fa 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/of_irq.h> | 25 | #include <linux/of_irq.h> |
| 26 | 26 | ||
| 27 | #include <asm/mach/time.h> | 27 | #include <asm/mach/time.h> |
| 28 | #include <asm/hardware/gic.h> | ||
| 29 | #include <asm/localtimer.h> | 28 | #include <asm/localtimer.h> |
| 30 | #include <asm/sched_clock.h> | 29 | #include <asm/sched_clock.h> |
| 31 | 30 | ||
diff --git a/arch/arm/mach-netx/generic.c b/arch/arm/mach-netx/generic.c index aa627465d914..27c2cb7ab813 100644 --- a/arch/arm/mach-netx/generic.c +++ b/arch/arm/mach-netx/generic.c | |||
| @@ -23,9 +23,9 @@ | |||
| 23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
| 24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
| 26 | #include <linux/irqchip/arm-vic.h> | ||
| 26 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 27 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
| 28 | #include <asm/hardware/vic.h> | ||
| 29 | #include <mach/netx-regs.h> | 29 | #include <mach/netx-regs.h> |
| 30 | #include <asm/mach/irq.h> | 30 | #include <asm/mach/irq.h> |
| 31 | 31 | ||
diff --git a/arch/arm/mach-netx/nxdb500.c b/arch/arm/mach-netx/nxdb500.c index 241e1b9c58cb..9b558eb3070f 100644 --- a/arch/arm/mach-netx/nxdb500.c +++ b/arch/arm/mach-netx/nxdb500.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 32 | #include <mach/netx-regs.h> | 31 | #include <mach/netx-regs.h> |
| 33 | #include <linux/platform_data/eth-netx.h> | 32 | #include <linux/platform_data/eth-netx.h> |
| 34 | 33 | ||
| @@ -204,7 +203,6 @@ MACHINE_START(NXDB500, "Hilscher nxdb500") | |||
| 204 | .atag_offset = 0x100, | 203 | .atag_offset = 0x100, |
| 205 | .map_io = netx_map_io, | 204 | .map_io = netx_map_io, |
| 206 | .init_irq = netx_init_irq, | 205 | .init_irq = netx_init_irq, |
| 207 | .handle_irq = vic_handle_irq, | ||
| 208 | .init_time = netx_timer_init, | 206 | .init_time = netx_timer_init, |
| 209 | .init_machine = nxdb500_init, | 207 | .init_machine = nxdb500_init, |
| 210 | .restart = netx_restart, | 208 | .restart = netx_restart, |
diff --git a/arch/arm/mach-netx/nxdkn.c b/arch/arm/mach-netx/nxdkn.c index 055aeecedde2..a5e86cd365e7 100644 --- a/arch/arm/mach-netx/nxdkn.c +++ b/arch/arm/mach-netx/nxdkn.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 32 | #include <mach/netx-regs.h> | 31 | #include <mach/netx-regs.h> |
| 33 | #include <linux/platform_data/eth-netx.h> | 32 | #include <linux/platform_data/eth-netx.h> |
| 34 | 33 | ||
| @@ -97,7 +96,6 @@ MACHINE_START(NXDKN, "Hilscher nxdkn") | |||
| 97 | .atag_offset = 0x100, | 96 | .atag_offset = 0x100, |
| 98 | .map_io = netx_map_io, | 97 | .map_io = netx_map_io, |
| 99 | .init_irq = netx_init_irq, | 98 | .init_irq = netx_init_irq, |
| 100 | .handle_irq = vic_handle_irq, | ||
| 101 | .init_time = netx_timer_init, | 99 | .init_time = netx_timer_init, |
| 102 | .init_machine = nxdkn_init, | 100 | .init_machine = nxdkn_init, |
| 103 | .restart = netx_restart, | 101 | .restart = netx_restart, |
diff --git a/arch/arm/mach-netx/nxeb500hmi.c b/arch/arm/mach-netx/nxeb500hmi.c index 018e91c55b00..ad17885d0159 100644 --- a/arch/arm/mach-netx/nxeb500hmi.c +++ b/arch/arm/mach-netx/nxeb500hmi.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <mach/hardware.h> | 28 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 32 | #include <mach/netx-regs.h> | 31 | #include <mach/netx-regs.h> |
| 33 | #include <linux/platform_data/eth-netx.h> | 32 | #include <linux/platform_data/eth-netx.h> |
| 34 | 33 | ||
| @@ -181,7 +180,6 @@ MACHINE_START(NXEB500HMI, "Hilscher nxeb500hmi") | |||
| 181 | .atag_offset = 0x100, | 180 | .atag_offset = 0x100, |
| 182 | .map_io = netx_map_io, | 181 | .map_io = netx_map_io, |
| 183 | .init_irq = netx_init_irq, | 182 | .init_irq = netx_init_irq, |
| 184 | .handle_irq = vic_handle_irq, | ||
| 185 | .init_time = netx_timer_init, | 183 | .init_time = netx_timer_init, |
| 186 | .init_machine = nxeb500hmi_init, | 184 | .init_machine = nxeb500hmi_init, |
| 187 | .restart = netx_restart, | 185 | .restart = netx_restart, |
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index c9015ba647a2..aaed48d94374 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <linux/pinctrl/machine.h> | 27 | #include <linux/pinctrl/machine.h> |
| 28 | #include <linux/platform_data/pinctrl-nomadik.h> | 28 | #include <linux/platform_data/pinctrl-nomadik.h> |
| 29 | #include <linux/platform_data/clocksource-nomadik-mtu.h> | 29 | #include <linux/platform_data/clocksource-nomadik-mtu.h> |
| 30 | #include <asm/hardware/vic.h> | ||
| 31 | #include <asm/sizes.h> | 30 | #include <asm/sizes.h> |
| 32 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 33 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| @@ -348,7 +347,6 @@ MACHINE_START(NOMADIK, "NHK8815") | |||
| 348 | .atag_offset = 0x100, | 347 | .atag_offset = 0x100, |
| 349 | .map_io = cpu8815_map_io, | 348 | .map_io = cpu8815_map_io, |
| 350 | .init_irq = cpu8815_init_irq, | 349 | .init_irq = cpu8815_init_irq, |
| 351 | .handle_irq = vic_handle_irq, | ||
| 352 | .init_time = nomadik_timer_init, | 350 | .init_time = nomadik_timer_init, |
| 353 | .init_machine = nhk8815_platform_init, | 351 | .init_machine = nhk8815_platform_init, |
| 354 | .restart = cpu8815_restart, | 352 | .restart = cpu8815_restart, |
diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index 1273931303fb..351404673f6c 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c | |||
| @@ -25,13 +25,13 @@ | |||
| 25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
| 26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
| 27 | #include <linux/dma-mapping.h> | 27 | #include <linux/dma-mapping.h> |
| 28 | #include <linux/irqchip/arm-vic.h> | ||
| 28 | #include <linux/platform_data/clk-nomadik.h> | 29 | #include <linux/platform_data/clk-nomadik.h> |
| 29 | #include <linux/platform_data/pinctrl-nomadik.h> | 30 | #include <linux/platform_data/pinctrl-nomadik.h> |
| 30 | 31 | ||
| 31 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
| 32 | #include <mach/irqs.h> | 33 | #include <mach/irqs.h> |
| 33 | #include <asm/mach/map.h> | 34 | #include <asm/mach/map.h> |
| 34 | #include <asm/hardware/vic.h> | ||
| 35 | 35 | ||
| 36 | #include <asm/cacheflush.h> | 36 | #include <asm/cacheflush.h> |
| 37 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index f5d5f5941d7d..f8eeef40efe8 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c | |||
| @@ -26,10 +26,10 @@ | |||
| 26 | #include <linux/regulator/fixed.h> | 26 | #include <linux/regulator/fixed.h> |
| 27 | #include <linux/leds.h> | 27 | #include <linux/leds.h> |
| 28 | #include <linux/leds_pwm.h> | 28 | #include <linux/leds_pwm.h> |
| 29 | #include <linux/irqchip/arm-gic.h> | ||
| 29 | #include <linux/platform_data/omap4-keypad.h> | 30 | #include <linux/platform_data/omap4-keypad.h> |
| 30 | #include <linux/usb/musb.h> | 31 | #include <linux/usb/musb.h> |
| 31 | 32 | ||
| 32 | #include <asm/hardware/gic.h> | ||
| 33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
| 34 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
| 35 | #include <asm/mach/map.h> | 35 | #include <asm/mach/map.h> |
| @@ -722,7 +722,6 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board") | |||
| 722 | .map_io = omap4_map_io, | 722 | .map_io = omap4_map_io, |
| 723 | .init_early = omap4430_init_early, | 723 | .init_early = omap4430_init_early, |
| 724 | .init_irq = gic_init_irq, | 724 | .init_irq = gic_init_irq, |
| 725 | .handle_irq = gic_handle_irq, | ||
| 726 | .init_machine = omap_4430sdp_init, | 725 | .init_machine = omap_4430sdp_init, |
| 727 | .init_late = omap4430_init_late, | 726 | .init_late = omap4430_init_late, |
| 728 | .init_time = omap4_local_timer_init, | 727 | .init_time = omap4_local_timer_init, |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 8a5f814613c6..2590463e4b57 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
| 17 | #include <linux/irqdomain.h> | 17 | #include <linux/irqdomain.h> |
| 18 | 18 | ||
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
| 21 | 20 | ||
| 22 | #include "common.h" | 21 | #include "common.h" |
| @@ -156,7 +155,6 @@ DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)") | |||
| 156 | .map_io = omap4_map_io, | 155 | .map_io = omap4_map_io, |
| 157 | .init_early = omap4430_init_early, | 156 | .init_early = omap4430_init_early, |
| 158 | .init_irq = omap_gic_of_init, | 157 | .init_irq = omap_gic_of_init, |
| 159 | .handle_irq = gic_handle_irq, | ||
| 160 | .init_machine = omap_generic_init, | 158 | .init_machine = omap_generic_init, |
| 161 | .init_late = omap4430_init_late, | 159 | .init_late = omap4430_init_late, |
| 162 | .init_time = omap4_local_timer_init, | 160 | .init_time = omap4_local_timer_init, |
| @@ -177,7 +175,6 @@ DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)") | |||
| 177 | .map_io = omap5_map_io, | 175 | .map_io = omap5_map_io, |
| 178 | .init_early = omap5_init_early, | 176 | .init_early = omap5_init_early, |
| 179 | .init_irq = omap_gic_of_init, | 177 | .init_irq = omap_gic_of_init, |
| 180 | .handle_irq = gic_handle_irq, | ||
| 181 | .init_machine = omap_generic_init, | 178 | .init_machine = omap_generic_init, |
| 182 | .init_time = omap5_realtime_timer_init, | 179 | .init_time = omap5_realtime_timer_init, |
| 183 | .dt_compat = omap5_boards_compat, | 180 | .dt_compat = omap5_boards_compat, |
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index ed8240c1a9b9..22838fa44a60 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c | |||
| @@ -31,9 +31,9 @@ | |||
| 31 | #include <linux/ti_wilink_st.h> | 31 | #include <linux/ti_wilink_st.h> |
| 32 | #include <linux/usb/musb.h> | 32 | #include <linux/usb/musb.h> |
| 33 | #include <linux/wl12xx.h> | 33 | #include <linux/wl12xx.h> |
| 34 | #include <linux/irqchip/arm-gic.h> | ||
| 34 | #include <linux/platform_data/omap-abe-twl6040.h> | 35 | #include <linux/platform_data/omap-abe-twl6040.h> |
| 35 | 36 | ||
| 36 | #include <asm/hardware/gic.h> | ||
| 37 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
| 38 | #include <asm/mach/arch.h> | 38 | #include <asm/mach/arch.h> |
| 39 | #include <asm/mach/map.h> | 39 | #include <asm/mach/map.h> |
| @@ -453,7 +453,6 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") | |||
| 453 | .map_io = omap4_map_io, | 453 | .map_io = omap4_map_io, |
| 454 | .init_early = omap4430_init_early, | 454 | .init_early = omap4430_init_early, |
| 455 | .init_irq = gic_init_irq, | 455 | .init_irq = gic_init_irq, |
| 456 | .handle_irq = gic_handle_irq, | ||
| 457 | .init_machine = omap4_panda_init, | 456 | .init_machine = omap4_panda_init, |
| 458 | .init_late = omap4430_init_late, | 457 | .init_late = omap4430_init_late, |
| 459 | .init_time = omap4_local_timer_init, | 458 | .init_time = omap4_local_timer_init, |
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index cd42d921940d..361677983af0 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
| @@ -19,9 +19,9 @@ | |||
| 19 | #include <linux/device.h> | 19 | #include <linux/device.h> |
| 20 | #include <linux/smp.h> | 20 | #include <linux/smp.h> |
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | #include <linux/irqchip/arm-gic.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/cacheflush.h> | 24 | #include <asm/cacheflush.h> |
| 24 | #include <asm/hardware/gic.h> | ||
| 25 | #include <asm/smp_scu.h> | 25 | #include <asm/smp_scu.h> |
| 26 | 26 | ||
| 27 | #include "omap-secure.h" | 27 | #include "omap-secure.h" |
| @@ -157,7 +157,7 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct * | |||
| 157 | booted = true; | 157 | booted = true; |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | gic_raise_softirq(cpumask_of(cpu), 0); | 160 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 161 | 161 | ||
| 162 | /* | 162 | /* |
| 163 | * Now the secondary core is starting up let it run its | 163 | * Now the secondary core is starting up let it run its |
| @@ -231,8 +231,6 @@ static void __init omap4_smp_init_cpus(void) | |||
| 231 | 231 | ||
| 232 | for (i = 0; i < ncores; i++) | 232 | for (i = 0; i < ncores; i++) |
| 233 | set_cpu_possible(i, true); | 233 | set_cpu_possible(i, true); |
| 234 | |||
| 235 | set_smp_cross_call(gic_raise_softirq); | ||
| 236 | } | 234 | } |
| 237 | 235 | ||
| 238 | static void __init omap4_smp_prepare_cpus(unsigned int max_cpus) | 236 | static void __init omap4_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c index 5d3b4f4f81ae..8c5b5e3e3541 100644 --- a/arch/arm/mach-omap2/omap-wakeupgen.c +++ b/arch/arm/mach-omap2/omap-wakeupgen.c | |||
| @@ -24,8 +24,7 @@ | |||
| 24 | #include <linux/cpu.h> | 24 | #include <linux/cpu.h> |
| 25 | #include <linux/notifier.h> | 25 | #include <linux/notifier.h> |
| 26 | #include <linux/cpu_pm.h> | 26 | #include <linux/cpu_pm.h> |
| 27 | 27 | #include <linux/irqchip/arm-gic.h> | |
| 28 | #include <asm/hardware/gic.h> | ||
| 29 | 28 | ||
| 30 | #include "omap-wakeupgen.h" | 29 | #include "omap-wakeupgen.h" |
| 31 | #include "omap-secure.h" | 30 | #include "omap-secure.h" |
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 6897ae21bb82..547094883606 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c | |||
| @@ -15,13 +15,14 @@ | |||
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
| 18 | #include <linux/irqchip.h> | ||
| 18 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
| 19 | #include <linux/memblock.h> | 20 | #include <linux/memblock.h> |
| 20 | #include <linux/of_irq.h> | 21 | #include <linux/of_irq.h> |
| 21 | #include <linux/of_platform.h> | 22 | #include <linux/of_platform.h> |
| 22 | #include <linux/export.h> | 23 | #include <linux/export.h> |
| 24 | #include <linux/irqchip/arm-gic.h> | ||
| 23 | 25 | ||
| 24 | #include <asm/hardware/gic.h> | ||
| 25 | #include <asm/hardware/cache-l2x0.h> | 26 | #include <asm/hardware/cache-l2x0.h> |
| 26 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
| 27 | #include <asm/memblock.h> | 28 | #include <asm/memblock.h> |
| @@ -255,16 +256,10 @@ static int __init omap4_sar_ram_init(void) | |||
| 255 | } | 256 | } |
| 256 | early_initcall(omap4_sar_ram_init); | 257 | early_initcall(omap4_sar_ram_init); |
| 257 | 258 | ||
| 258 | static struct of_device_id irq_match[] __initdata = { | ||
| 259 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 260 | { .compatible = "arm,cortex-a15-gic", .data = gic_of_init, }, | ||
| 261 | { } | ||
| 262 | }; | ||
| 263 | |||
| 264 | void __init omap_gic_of_init(void) | 259 | void __init omap_gic_of_init(void) |
| 265 | { | 260 | { |
| 266 | omap_wakeupgen_init(); | 261 | omap_wakeupgen_init(); |
| 267 | of_irq_init(irq_match); | 262 | irqchip_init(); |
| 268 | } | 263 | } |
| 269 | 264 | ||
| 270 | #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) | 265 | #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) |
diff --git a/arch/arm/mach-picoxcell/common.c b/arch/arm/mach-picoxcell/common.c index 518c59bdbcda..70b441ad1d18 100644 --- a/arch/arm/mach-picoxcell/common.c +++ b/arch/arm/mach-picoxcell/common.c | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | */ | 9 | */ |
| 10 | #include <linux/delay.h> | 10 | #include <linux/delay.h> |
| 11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
| 12 | #include <linux/irqchip.h> | ||
| 12 | #include <linux/irqdomain.h> | 13 | #include <linux/irqdomain.h> |
| 13 | #include <linux/of.h> | 14 | #include <linux/of.h> |
| 14 | #include <linux/of_address.h> | 15 | #include <linux/of_address.h> |
| @@ -17,7 +18,6 @@ | |||
| 17 | #include <linux/dw_apb_timer.h> | 18 | #include <linux/dw_apb_timer.h> |
| 18 | 19 | ||
| 19 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach/map.h> | 21 | #include <asm/mach/map.h> |
| 22 | 22 | ||
| 23 | #include "common.h" | 23 | #include "common.h" |
| @@ -70,16 +70,6 @@ static const char *picoxcell_dt_match[] = { | |||
| 70 | NULL | 70 | NULL |
| 71 | }; | 71 | }; |
| 72 | 72 | ||
| 73 | static const struct of_device_id vic_of_match[] __initconst = { | ||
| 74 | { .compatible = "arm,pl192-vic", .data = vic_of_init, }, | ||
| 75 | { /* Sentinel */ } | ||
| 76 | }; | ||
| 77 | |||
| 78 | static void __init picoxcell_init_irq(void) | ||
| 79 | { | ||
| 80 | of_irq_init(vic_of_match); | ||
| 81 | } | ||
| 82 | |||
| 83 | static void picoxcell_wdt_restart(char mode, const char *cmd) | 73 | static void picoxcell_wdt_restart(char mode, const char *cmd) |
| 84 | { | 74 | { |
| 85 | /* | 75 | /* |
| @@ -97,8 +87,7 @@ static void picoxcell_wdt_restart(char mode, const char *cmd) | |||
| 97 | DT_MACHINE_START(PICOXCELL, "Picochip picoXcell") | 87 | DT_MACHINE_START(PICOXCELL, "Picochip picoXcell") |
| 98 | .map_io = picoxcell_map_io, | 88 | .map_io = picoxcell_map_io, |
| 99 | .nr_irqs = NR_IRQS_LEGACY, | 89 | .nr_irqs = NR_IRQS_LEGACY, |
| 100 | .init_irq = picoxcell_init_irq, | 90 | .init_irq = irqchip_init, |
| 101 | .handle_irq = vic_handle_irq, | ||
| 102 | .init_time = dw_apb_timer_init, | 91 | .init_time = dw_apb_timer_init, |
| 103 | .init_machine = picoxcell_init_machine, | 92 | .init_machine = picoxcell_init_machine, |
| 104 | .dt_compat = picoxcell_dt_match, | 93 | .dt_compat = picoxcell_dt_match, |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 682467480588..1d5ee5c9a1dc 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
| @@ -42,7 +42,6 @@ | |||
| 42 | #include <asm/mach/irq.h> | 42 | #include <asm/mach/irq.h> |
| 43 | #include <asm/mach/map.h> | 43 | #include <asm/mach/map.h> |
| 44 | 44 | ||
| 45 | #include <asm/hardware/gic.h> | ||
| 46 | 45 | ||
| 47 | #include <mach/platform.h> | 46 | #include <mach/platform.h> |
| 48 | #include <mach/irqs.h> | 47 | #include <mach/irqs.h> |
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index 300f7064465d..98e3052b7933 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 15 | 15 | ||
| 16 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
| 17 | #include <asm/hardware/gic.h> | ||
| 18 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
| 19 | #include <asm/smp_scu.h> | 18 | #include <asm/smp_scu.h> |
| 20 | 19 | ||
| @@ -59,8 +58,6 @@ static void __init realview_smp_init_cpus(void) | |||
| 59 | 58 | ||
| 60 | for (i = 0; i < ncores; i++) | 59 | for (i = 0; i < ncores; i++) |
| 61 | set_cpu_possible(i, true); | 60 | set_cpu_possible(i, true); |
| 62 | |||
| 63 | set_smp_cross_call(gic_raise_softirq); | ||
| 64 | } | 61 | } |
| 65 | 62 | ||
| 66 | static void __init realview_smp_prepare_cpus(unsigned int max_cpus) | 63 | static void __init realview_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index f892862fd6ae..5b1c8bfe6fa9 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
| @@ -27,13 +27,13 @@ | |||
| 27 | #include <linux/amba/mmci.h> | 27 | #include <linux/amba/mmci.h> |
| 28 | #include <linux/amba/pl022.h> | 28 | #include <linux/amba/pl022.h> |
| 29 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 30 | #include <linux/irqchip/arm-gic.h> | ||
| 30 | #include <linux/platform_data/clk-realview.h> | 31 | #include <linux/platform_data/clk-realview.h> |
| 31 | 32 | ||
| 32 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
| 33 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 34 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
| 35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
| 36 | #include <asm/hardware/gic.h> | ||
| 37 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
| 38 | #include <asm/smp_twd.h> | 38 | #include <asm/smp_twd.h> |
| 39 | 39 | ||
| @@ -469,7 +469,6 @@ MACHINE_START(REALVIEW_EB, "ARM-RealView EB") | |||
| 469 | .init_early = realview_init_early, | 469 | .init_early = realview_init_early, |
| 470 | .init_irq = gic_init_irq, | 470 | .init_irq = gic_init_irq, |
| 471 | .init_time = realview_eb_timer_init, | 471 | .init_time = realview_eb_timer_init, |
| 472 | .handle_irq = gic_handle_irq, | ||
| 473 | .init_machine = realview_eb_init, | 472 | .init_machine = realview_eb_init, |
| 474 | #ifdef CONFIG_ZONE_DMA | 473 | #ifdef CONFIG_ZONE_DMA |
| 475 | .dma_zone_size = SZ_256M, | 474 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index 6a4524b93fc6..d5e83a1f6982 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c | |||
| @@ -29,13 +29,13 @@ | |||
| 29 | #include <linux/mtd/physmap.h> | 29 | #include <linux/mtd/physmap.h> |
| 30 | #include <linux/mtd/partitions.h> | 30 | #include <linux/mtd/partitions.h> |
| 31 | #include <linux/io.h> | 31 | #include <linux/io.h> |
| 32 | #include <linux/irqchip/arm-gic.h> | ||
| 32 | #include <linux/platform_data/clk-realview.h> | 33 | #include <linux/platform_data/clk-realview.h> |
| 33 | 34 | ||
| 34 | #include <mach/hardware.h> | 35 | #include <mach/hardware.h> |
| 35 | #include <asm/irq.h> | 36 | #include <asm/irq.h> |
| 36 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
| 37 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> |
| 38 | #include <asm/hardware/gic.h> | ||
| 39 | #include <asm/hardware/cache-l2x0.h> | 39 | #include <asm/hardware/cache-l2x0.h> |
| 40 | 40 | ||
| 41 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
| @@ -381,7 +381,6 @@ MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") | |||
| 381 | .init_early = realview_init_early, | 381 | .init_early = realview_init_early, |
| 382 | .init_irq = gic_init_irq, | 382 | .init_irq = gic_init_irq, |
| 383 | .init_time = realview_pb1176_timer_init, | 383 | .init_time = realview_pb1176_timer_init, |
| 384 | .handle_irq = gic_handle_irq, | ||
| 385 | .init_machine = realview_pb1176_init, | 384 | .init_machine = realview_pb1176_init, |
| 386 | #ifdef CONFIG_ZONE_DMA | 385 | #ifdef CONFIG_ZONE_DMA |
| 387 | .dma_zone_size = SZ_256M, | 386 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index 502f6e6c6913..c3cfe213b5e6 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c | |||
| @@ -27,13 +27,13 @@ | |||
| 27 | #include <linux/amba/mmci.h> | 27 | #include <linux/amba/mmci.h> |
| 28 | #include <linux/amba/pl022.h> | 28 | #include <linux/amba/pl022.h> |
| 29 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 30 | #include <linux/irqchip/arm-gic.h> | ||
| 30 | #include <linux/platform_data/clk-realview.h> | 31 | #include <linux/platform_data/clk-realview.h> |
| 31 | 32 | ||
| 32 | #include <mach/hardware.h> | 33 | #include <mach/hardware.h> |
| 33 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| 34 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
| 35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
| 36 | #include <asm/hardware/gic.h> | ||
| 37 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
| 38 | #include <asm/smp_twd.h> | 38 | #include <asm/smp_twd.h> |
| 39 | 39 | ||
| @@ -364,7 +364,6 @@ MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore") | |||
| 364 | .init_early = realview_init_early, | 364 | .init_early = realview_init_early, |
| 365 | .init_irq = gic_init_irq, | 365 | .init_irq = gic_init_irq, |
| 366 | .init_time = realview_pb11mp_timer_init, | 366 | .init_time = realview_pb11mp_timer_init, |
| 367 | .handle_irq = gic_handle_irq, | ||
| 368 | .init_machine = realview_pb11mp_init, | 367 | .init_machine = realview_pb11mp_init, |
| 369 | #ifdef CONFIG_ZONE_DMA | 368 | #ifdef CONFIG_ZONE_DMA |
| 370 | .dma_zone_size = SZ_256M, | 369 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pba8.c b/arch/arm/mach-realview/realview_pba8.c index 85c81aaa05e8..dde652a59620 100644 --- a/arch/arm/mach-realview/realview_pba8.c +++ b/arch/arm/mach-realview/realview_pba8.c | |||
| @@ -27,12 +27,12 @@ | |||
| 27 | #include <linux/amba/mmci.h> | 27 | #include <linux/amba/mmci.h> |
| 28 | #include <linux/amba/pl022.h> | 28 | #include <linux/amba/pl022.h> |
| 29 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 30 | #include <linux/irqchip/arm-gic.h> | ||
| 30 | #include <linux/platform_data/clk-realview.h> | 31 | #include <linux/platform_data/clk-realview.h> |
| 31 | 32 | ||
| 32 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 33 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 34 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
| 35 | #include <asm/hardware/gic.h> | ||
| 36 | 36 | ||
| 37 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
| 38 | #include <asm/mach/map.h> | 38 | #include <asm/mach/map.h> |
| @@ -305,7 +305,6 @@ MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8") | |||
| 305 | .init_early = realview_init_early, | 305 | .init_early = realview_init_early, |
| 306 | .init_irq = gic_init_irq, | 306 | .init_irq = gic_init_irq, |
| 307 | .init_time = realview_pba8_timer_init, | 307 | .init_time = realview_pba8_timer_init, |
| 308 | .handle_irq = gic_handle_irq, | ||
| 309 | .init_machine = realview_pba8_init, | 308 | .init_machine = realview_pba8_init, |
| 310 | #ifdef CONFIG_ZONE_DMA | 309 | #ifdef CONFIG_ZONE_DMA |
| 311 | .dma_zone_size = SZ_256M, | 310 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index a15a7b0be29b..54f0185b01e3 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
| @@ -26,13 +26,13 @@ | |||
| 26 | #include <linux/amba/mmci.h> | 26 | #include <linux/amba/mmci.h> |
| 27 | #include <linux/amba/pl022.h> | 27 | #include <linux/amba/pl022.h> |
| 28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
| 29 | #include <linux/irqchip/arm-gic.h> | ||
| 29 | #include <linux/platform_data/clk-realview.h> | 30 | #include <linux/platform_data/clk-realview.h> |
| 30 | 31 | ||
| 31 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
| 33 | #include <asm/smp_twd.h> | 34 | #include <asm/smp_twd.h> |
| 34 | #include <asm/pgtable.h> | 35 | #include <asm/pgtable.h> |
| 35 | #include <asm/hardware/gic.h> | ||
| 36 | #include <asm/hardware/cache-l2x0.h> | 36 | #include <asm/hardware/cache-l2x0.h> |
| 37 | 37 | ||
| 38 | #include <asm/mach/arch.h> | 38 | #include <asm/mach/arch.h> |
| @@ -401,7 +401,6 @@ MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX") | |||
| 401 | .init_early = realview_init_early, | 401 | .init_early = realview_init_early, |
| 402 | .init_irq = gic_init_irq, | 402 | .init_irq = gic_init_irq, |
| 403 | .init_time = realview_pbx_timer_init, | 403 | .init_time = realview_pbx_timer_init, |
| 404 | .handle_irq = gic_handle_irq, | ||
| 405 | .init_machine = realview_pbx_init, | 404 | .init_machine = realview_pbx_init, |
| 406 | #ifdef CONFIG_ZONE_DMA | 405 | #ifdef CONFIG_ZONE_DMA |
| 407 | .dma_zone_size = SZ_256M, | 406 | .dma_zone_size = SZ_256M, |
diff --git a/arch/arm/mach-s3c64xx/common.c b/arch/arm/mach-s3c64xx/common.c index aef303b8997e..0b9c0ba44834 100644 --- a/arch/arm/mach-s3c64xx/common.c +++ b/arch/arm/mach-s3c64xx/common.c | |||
| @@ -25,10 +25,10 @@ | |||
| 25 | #include <linux/dma-mapping.h> | 25 | #include <linux/dma-mapping.h> |
| 26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
| 27 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
| 28 | #include <linux/irqchip/arm-vic.h> | ||
| 28 | 29 | ||
| 29 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
| 31 | #include <asm/hardware/vic.h> | ||
| 32 | #include <asm/system_misc.h> | 32 | #include <asm/system_misc.h> |
| 33 | 33 | ||
| 34 | #include <mach/map.h> | 34 | #include <mach/map.h> |
diff --git a/arch/arm/mach-s3c64xx/include/mach/regs-irq.h b/arch/arm/mach-s3c64xx/include/mach/regs-irq.h index bcce68a0bb75..6a1127891c87 100644 --- a/arch/arm/mach-s3c64xx/include/mach/regs-irq.h +++ b/arch/arm/mach-s3c64xx/include/mach/regs-irq.h | |||
| @@ -15,6 +15,5 @@ | |||
| 15 | #ifndef __ASM_ARCH_REGS_IRQ_H | 15 | #ifndef __ASM_ARCH_REGS_IRQ_H |
| 16 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ | 16 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ |
| 17 | 17 | ||
| 18 | #include <asm/hardware/vic.h> | ||
| 19 | 18 | ||
| 20 | #endif /* __ASM_ARCH_6400_REGS_IRQ_H */ | 19 | #endif /* __ASM_ARCH_6400_REGS_IRQ_H */ |
diff --git a/arch/arm/mach-s3c64xx/include/mach/tick.h b/arch/arm/mach-s3c64xx/include/mach/tick.h index ebe18a9469b8..db9c1b1d56a4 100644 --- a/arch/arm/mach-s3c64xx/include/mach/tick.h +++ b/arch/arm/mach-s3c64xx/include/mach/tick.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #ifndef __ASM_ARCH_TICK_H | 15 | #ifndef __ASM_ARCH_TICK_H |
| 16 | #define __ASM_ARCH_TICK_H __FILE__ | 16 | #define __ASM_ARCH_TICK_H __FILE__ |
| 17 | 17 | ||
| 18 | #include <linux/irqchip/arm-vic.h> | ||
| 19 | |||
| 18 | /* note, the timer interrutps turn up in 2 places, the vic and then | 20 | /* note, the timer interrutps turn up in 2 places, the vic and then |
| 19 | * the timer block. We take the VIC as the base at the moment. | 21 | * the timer block. We take the VIC as the base at the moment. |
| 20 | */ | 22 | */ |
diff --git a/arch/arm/mach-s3c64xx/mach-anw6410.c b/arch/arm/mach-s3c64xx/mach-anw6410.c index 75cbc67f628e..afeae0b5bb28 100644 --- a/arch/arm/mach-s3c64xx/mach-anw6410.c +++ b/arch/arm/mach-s3c64xx/mach-anw6410.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <video/platform_lcd.h> | 31 | #include <video/platform_lcd.h> |
| 32 | #include <video/samsung_fimd.h> | 32 | #include <video/samsung_fimd.h> |
| 33 | 33 | ||
| 34 | #include <asm/hardware/vic.h> | ||
| 35 | #include <asm/mach/arch.h> | 34 | #include <asm/mach/arch.h> |
| 36 | #include <asm/mach/map.h> | 35 | #include <asm/mach/map.h> |
| 37 | #include <asm/mach/irq.h> | 36 | #include <asm/mach/irq.h> |
| @@ -230,7 +229,6 @@ MACHINE_START(ANW6410, "A&W6410") | |||
| 230 | .atag_offset = 0x100, | 229 | .atag_offset = 0x100, |
| 231 | 230 | ||
| 232 | .init_irq = s3c6410_init_irq, | 231 | .init_irq = s3c6410_init_irq, |
| 233 | .handle_irq = vic_handle_irq, | ||
| 234 | .map_io = anw6410_map_io, | 232 | .map_io = anw6410_map_io, |
| 235 | .init_machine = anw6410_machine_init, | 233 | .init_machine = anw6410_machine_init, |
| 236 | .init_late = s3c64xx_init_late, | 234 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-crag6410.c b/arch/arm/mach-s3c64xx/mach-crag6410.c index 053dbcbeaa73..5b6adc7f1d39 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410.c | |||
| @@ -42,7 +42,6 @@ | |||
| 42 | 42 | ||
| 43 | #include <sound/wm1250-ev1.h> | 43 | #include <sound/wm1250-ev1.h> |
| 44 | 44 | ||
| 45 | #include <asm/hardware/vic.h> | ||
| 46 | #include <asm/mach/arch.h> | 45 | #include <asm/mach/arch.h> |
| 47 | #include <asm/mach-types.h> | 46 | #include <asm/mach-types.h> |
| 48 | 47 | ||
| @@ -867,7 +866,6 @@ MACHINE_START(WLF_CRAGG_6410, "Wolfson Cragganmore 6410") | |||
| 867 | /* Maintainer: Mark Brown <broonie@opensource.wolfsonmicro.com> */ | 866 | /* Maintainer: Mark Brown <broonie@opensource.wolfsonmicro.com> */ |
| 868 | .atag_offset = 0x100, | 867 | .atag_offset = 0x100, |
| 869 | .init_irq = s3c6410_init_irq, | 868 | .init_irq = s3c6410_init_irq, |
| 870 | .handle_irq = vic_handle_irq, | ||
| 871 | .map_io = crag6410_map_io, | 869 | .map_io = crag6410_map_io, |
| 872 | .init_machine = crag6410_machine_init, | 870 | .init_machine = crag6410_machine_init, |
| 873 | .init_late = s3c64xx_init_late, | 871 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-hmt.c b/arch/arm/mach-s3c64xx/mach-hmt.c index 7e8605d98142..7212eb9cfeb9 100644 --- a/arch/arm/mach-s3c64xx/mach-hmt.c +++ b/arch/arm/mach-s3c64xx/mach-hmt.c | |||
| @@ -30,7 +30,6 @@ | |||
| 30 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
| 31 | #include <mach/map.h> | 31 | #include <mach/map.h> |
| 32 | 32 | ||
| 33 | #include <asm/hardware/vic.h> | ||
| 34 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
| 35 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 36 | 35 | ||
| @@ -273,7 +272,6 @@ MACHINE_START(HMT, "Airgoo-HMT") | |||
| 273 | /* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */ | 272 | /* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */ |
| 274 | .atag_offset = 0x100, | 273 | .atag_offset = 0x100, |
| 275 | .init_irq = s3c6410_init_irq, | 274 | .init_irq = s3c6410_init_irq, |
| 276 | .handle_irq = vic_handle_irq, | ||
| 277 | .map_io = hmt_map_io, | 275 | .map_io = hmt_map_io, |
| 278 | .init_machine = hmt_machine_init, | 276 | .init_machine = hmt_machine_init, |
| 279 | .init_late = s3c64xx_init_late, | 277 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c index 4f8dc7dff92b..e173e6e98228 100644 --- a/arch/arm/mach-s3c64xx/mach-mini6410.c +++ b/arch/arm/mach-s3c64xx/mach-mini6410.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include <linux/serial_core.h> | 24 | #include <linux/serial_core.h> |
| 25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 26 | 26 | ||
| 27 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 29 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 29 | #include <asm/mach/map.h> |
| @@ -352,7 +351,6 @@ MACHINE_START(MINI6410, "MINI6410") | |||
| 352 | /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */ | 351 | /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */ |
| 353 | .atag_offset = 0x100, | 352 | .atag_offset = 0x100, |
| 354 | .init_irq = s3c6410_init_irq, | 353 | .init_irq = s3c6410_init_irq, |
| 355 | .handle_irq = vic_handle_irq, | ||
| 356 | .map_io = mini6410_map_io, | 354 | .map_io = mini6410_map_io, |
| 357 | .init_machine = mini6410_machine_init, | 355 | .init_machine = mini6410_machine_init, |
| 358 | .init_late = s3c64xx_init_late, | 356 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-ncp.c b/arch/arm/mach-s3c64xx/mach-ncp.c index cdd7f947376c..8d3cedd995ff 100644 --- a/arch/arm/mach-s3c64xx/mach-ncp.c +++ b/arch/arm/mach-s3c64xx/mach-ncp.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include <video/platform_lcd.h> | 26 | #include <video/platform_lcd.h> |
| 27 | #include <video/samsung_fimd.h> | 27 | #include <video/samsung_fimd.h> |
| 28 | 28 | ||
| 29 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 31 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| 32 | #include <asm/mach/irq.h> | 31 | #include <asm/mach/irq.h> |
| @@ -101,7 +100,6 @@ MACHINE_START(NCP, "NCP") | |||
| 101 | /* Maintainer: Samsung Electronics */ | 100 | /* Maintainer: Samsung Electronics */ |
| 102 | .atag_offset = 0x100, | 101 | .atag_offset = 0x100, |
| 103 | .init_irq = s3c6410_init_irq, | 102 | .init_irq = s3c6410_init_irq, |
| 104 | .handle_irq = vic_handle_irq, | ||
| 105 | .map_io = ncp_map_io, | 103 | .map_io = ncp_map_io, |
| 106 | .init_machine = ncp_machine_init, | 104 | .init_machine = ncp_machine_init, |
| 107 | .init_late = s3c64xx_init_late, | 105 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-real6410.c b/arch/arm/mach-s3c64xx/mach-real6410.c index b0f61982ef56..4d0d47a66930 100644 --- a/arch/arm/mach-s3c64xx/mach-real6410.c +++ b/arch/arm/mach-s3c64xx/mach-real6410.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/serial_core.h> | 25 | #include <linux/serial_core.h> |
| 26 | #include <linux/types.h> | 26 | #include <linux/types.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 29 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 31 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
| @@ -331,7 +330,6 @@ MACHINE_START(REAL6410, "REAL6410") | |||
| 331 | .atag_offset = 0x100, | 330 | .atag_offset = 0x100, |
| 332 | 331 | ||
| 333 | .init_irq = s3c6410_init_irq, | 332 | .init_irq = s3c6410_init_irq, |
| 334 | .handle_irq = vic_handle_irq, | ||
| 335 | .map_io = real6410_map_io, | 333 | .map_io = real6410_map_io, |
| 336 | .init_machine = real6410_machine_init, | 334 | .init_machine = real6410_machine_init, |
| 337 | .init_late = s3c64xx_init_late, | 335 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq5.c b/arch/arm/mach-s3c64xx/mach-smartq5.c index 7a737614717e..ca2afcfce573 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq5.c +++ b/arch/arm/mach-s3c64xx/mach-smartq5.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
| 18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 23 | 22 | ||
| @@ -153,7 +152,6 @@ MACHINE_START(SMARTQ5, "SmartQ 5") | |||
| 153 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ | 152 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ |
| 154 | .atag_offset = 0x100, | 153 | .atag_offset = 0x100, |
| 155 | .init_irq = s3c6410_init_irq, | 154 | .init_irq = s3c6410_init_irq, |
| 156 | .handle_irq = vic_handle_irq, | ||
| 157 | .map_io = smartq_map_io, | 155 | .map_io = smartq_map_io, |
| 158 | .init_machine = smartq5_machine_init, | 156 | .init_machine = smartq5_machine_init, |
| 159 | .init_late = s3c64xx_init_late, | 157 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-smartq7.c b/arch/arm/mach-s3c64xx/mach-smartq7.c index 889d525325c8..37bb0c632a5e 100644 --- a/arch/arm/mach-s3c64xx/mach-smartq7.c +++ b/arch/arm/mach-s3c64xx/mach-smartq7.c | |||
| @@ -17,7 +17,6 @@ | |||
| 17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
| 18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 19 | 19 | ||
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
| 22 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 23 | 22 | ||
| @@ -169,7 +168,6 @@ MACHINE_START(SMARTQ7, "SmartQ 7") | |||
| 169 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ | 168 | /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */ |
| 170 | .atag_offset = 0x100, | 169 | .atag_offset = 0x100, |
| 171 | .init_irq = s3c6410_init_irq, | 170 | .init_irq = s3c6410_init_irq, |
| 172 | .handle_irq = vic_handle_irq, | ||
| 173 | .map_io = smartq_map_io, | 171 | .map_io = smartq_map_io, |
| 174 | .init_machine = smartq7_machine_init, | 172 | .init_machine = smartq7_machine_init, |
| 175 | .init_late = s3c64xx_init_late, | 173 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6400.c b/arch/arm/mach-s3c64xx/mach-smdk6400.c index e31fe5bb37b6..a392869c8342 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6400.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6400.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | 22 | ||
| 23 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 24 | 24 | ||
| 25 | #include <asm/hardware/vic.h> | ||
| 26 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
| 27 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 28 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
| @@ -90,7 +89,6 @@ MACHINE_START(SMDK6400, "SMDK6400") | |||
| 90 | .atag_offset = 0x100, | 89 | .atag_offset = 0x100, |
| 91 | 90 | ||
| 92 | .init_irq = s3c6400_init_irq, | 91 | .init_irq = s3c6400_init_irq, |
| 93 | .handle_irq = vic_handle_irq, | ||
| 94 | .map_io = smdk6400_map_io, | 92 | .map_io = smdk6400_map_io, |
| 95 | .init_machine = smdk6400_machine_init, | 93 | .init_machine = smdk6400_machine_init, |
| 96 | .init_late = s3c64xx_init_late, | 94 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s3c64xx/mach-smdk6410.c b/arch/arm/mach-s3c64xx/mach-smdk6410.c index f1b87cd9cb0e..1663d10ba02a 100644 --- a/arch/arm/mach-s3c64xx/mach-smdk6410.c +++ b/arch/arm/mach-s3c64xx/mach-smdk6410.c | |||
| @@ -45,7 +45,6 @@ | |||
| 45 | #include <video/platform_lcd.h> | 45 | #include <video/platform_lcd.h> |
| 46 | #include <video/samsung_fimd.h> | 46 | #include <video/samsung_fimd.h> |
| 47 | 47 | ||
| 48 | #include <asm/hardware/vic.h> | ||
| 49 | #include <asm/mach/arch.h> | 48 | #include <asm/mach/arch.h> |
| 50 | #include <asm/mach/map.h> | 49 | #include <asm/mach/map.h> |
| 51 | #include <asm/mach/irq.h> | 50 | #include <asm/mach/irq.h> |
| @@ -700,7 +699,6 @@ MACHINE_START(SMDK6410, "SMDK6410") | |||
| 700 | .atag_offset = 0x100, | 699 | .atag_offset = 0x100, |
| 701 | 700 | ||
| 702 | .init_irq = s3c6410_init_irq, | 701 | .init_irq = s3c6410_init_irq, |
| 703 | .handle_irq = vic_handle_irq, | ||
| 704 | .map_io = smdk6410_map_io, | 702 | .map_io = smdk6410_map_io, |
| 705 | .init_machine = smdk6410_machine_init, | 703 | .init_machine = smdk6410_machine_init, |
| 706 | .init_late = s3c64xx_init_late, | 704 | .init_late = s3c64xx_init_late, |
diff --git a/arch/arm/mach-s5p64x0/include/mach/regs-irq.h b/arch/arm/mach-s5p64x0/include/mach/regs-irq.h index 4aaebdace55f..d60397d1ff40 100644 --- a/arch/arm/mach-s5p64x0/include/mach/regs-irq.h +++ b/arch/arm/mach-s5p64x0/include/mach/regs-irq.h | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #ifndef __ASM_ARCH_REGS_IRQ_H | 13 | #ifndef __ASM_ARCH_REGS_IRQ_H |
| 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ | 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ |
| 15 | 15 | ||
| 16 | #include <asm/hardware/vic.h> | ||
| 17 | #include <mach/map.h> | 16 | #include <mach/map.h> |
| 18 | 17 | ||
| 19 | #endif /* __ASM_ARCH_REGS_IRQ_H */ | 18 | #endif /* __ASM_ARCH_REGS_IRQ_H */ |
diff --git a/arch/arm/mach-s5p64x0/include/mach/tick.h b/arch/arm/mach-s5p64x0/include/mach/tick.h deleted file mode 100644 index 00aa7f1d8e51..000000000000 --- a/arch/arm/mach-s5p64x0/include/mach/tick.h +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | /* linux/arch/arm/mach-s5p64x0/include/mach/tick.h | ||
| 2 | * | ||
| 3 | * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd. | ||
| 4 | * http://www.samsung.com | ||
| 5 | * | ||
| 6 | * Copyright 2008 Openmoko, Inc. | ||
| 7 | * Copyright 2008 Simtec Electronics | ||
| 8 | * http://armlinux.simtec.co.uk/ | ||
| 9 | * Ben Dooks <ben@simtec.co.uk> | ||
| 10 | * | ||
| 11 | * S5P64X0 - Timer tick support definitions | ||
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or modify | ||
| 14 | * it under the terms of the GNU General Public License version 2 as | ||
| 15 | * published by the Free Software Foundation. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #ifndef __ASM_ARCH_TICK_H | ||
| 19 | #define __ASM_ARCH_TICK_H __FILE__ | ||
| 20 | |||
| 21 | static inline u32 s3c24xx_ostimer_pending(void) | ||
| 22 | { | ||
| 23 | u32 pend = __raw_readl(VA_VIC0 + VIC_RAW_STATUS); | ||
| 24 | return pend & (1 << (IRQ_TIMER4_VIC - S5P_IRQ_VIC0(0))); | ||
| 25 | } | ||
| 26 | |||
| 27 | #define TICK_MAX (0xffffffff) | ||
| 28 | |||
| 29 | #endif /* __ASM_ARCH_TICK_H */ | ||
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6440.c b/arch/arm/mach-s5p64x0/mach-smdk6440.c index 0a3146dc081a..a40d5eb38124 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6440.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6440.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | #include <video/platform_lcd.h> | 29 | #include <video/platform_lcd.h> |
| 30 | #include <video/samsung_fimd.h> | 30 | #include <video/samsung_fimd.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware/vic.h> | ||
| 33 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
| 35 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| @@ -272,7 +271,6 @@ MACHINE_START(SMDK6440, "SMDK6440") | |||
| 272 | .atag_offset = 0x100, | 271 | .atag_offset = 0x100, |
| 273 | 272 | ||
| 274 | .init_irq = s5p6440_init_irq, | 273 | .init_irq = s5p6440_init_irq, |
| 275 | .handle_irq = vic_handle_irq, | ||
| 276 | .map_io = smdk6440_map_io, | 274 | .map_io = smdk6440_map_io, |
| 277 | .init_machine = smdk6440_machine_init, | 275 | .init_machine = smdk6440_machine_init, |
| 278 | .init_time = s5p_timer_init, | 276 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5p64x0/mach-smdk6450.c b/arch/arm/mach-s5p64x0/mach-smdk6450.c index 36917f2ea25a..703e576a26e0 100644 --- a/arch/arm/mach-s5p64x0/mach-smdk6450.c +++ b/arch/arm/mach-s5p64x0/mach-smdk6450.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | #include <video/platform_lcd.h> | 29 | #include <video/platform_lcd.h> |
| 30 | #include <video/samsung_fimd.h> | 30 | #include <video/samsung_fimd.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware/vic.h> | ||
| 33 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
| 35 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
| @@ -291,7 +290,6 @@ MACHINE_START(SMDK6450, "SMDK6450") | |||
| 291 | .atag_offset = 0x100, | 290 | .atag_offset = 0x100, |
| 292 | 291 | ||
| 293 | .init_irq = s5p6450_init_irq, | 292 | .init_irq = s5p6450_init_irq, |
| 294 | .handle_irq = vic_handle_irq, | ||
| 295 | .map_io = smdk6450_map_io, | 293 | .map_io = smdk6450_map_io, |
| 296 | .init_machine = smdk6450_machine_init, | 294 | .init_machine = smdk6450_machine_init, |
| 297 | .init_time = s5p_timer_init, | 295 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5pc100/include/mach/regs-irq.h b/arch/arm/mach-s5pc100/include/mach/regs-irq.h index 4d9036d0f288..761627897f30 100644 --- a/arch/arm/mach-s5pc100/include/mach/regs-irq.h +++ b/arch/arm/mach-s5pc100/include/mach/regs-irq.h | |||
| @@ -14,6 +14,5 @@ | |||
| 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ | 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ |
| 15 | 15 | ||
| 16 | #include <mach/map.h> | 16 | #include <mach/map.h> |
| 17 | #include <asm/hardware/vic.h> | ||
| 18 | 17 | ||
| 19 | #endif /* __ASM_ARCH_REGS_IRQ_H */ | 18 | #endif /* __ASM_ARCH_REGS_IRQ_H */ |
diff --git a/arch/arm/mach-s5pc100/include/mach/tick.h b/arch/arm/mach-s5pc100/include/mach/tick.h index 20f68730ed18..0af8e41230ed 100644 --- a/arch/arm/mach-s5pc100/include/mach/tick.h +++ b/arch/arm/mach-s5pc100/include/mach/tick.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #ifndef __ASM_ARCH_TICK_H | 15 | #ifndef __ASM_ARCH_TICK_H |
| 16 | #define __ASM_ARCH_TICK_H __FILE__ | 16 | #define __ASM_ARCH_TICK_H __FILE__ |
| 17 | 17 | ||
| 18 | #include <linux/irqchip/arm-vic.h> | ||
| 19 | |||
| 18 | /* note, the timer interrutps turn up in 2 places, the vic and then | 20 | /* note, the timer interrutps turn up in 2 places, the vic and then |
| 19 | * the timer block. We take the VIC as the base at the moment. | 21 | * the timer block. We take the VIC as the base at the moment. |
| 20 | */ | 22 | */ |
diff --git a/arch/arm/mach-s5pc100/mach-smdkc100.c b/arch/arm/mach-s5pc100/mach-smdkc100.c index 39a9197d1746..185a19583898 100644 --- a/arch/arm/mach-s5pc100/mach-smdkc100.c +++ b/arch/arm/mach-s5pc100/mach-smdkc100.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/input.h> | 25 | #include <linux/input.h> |
| 26 | #include <linux/pwm_backlight.h> | 26 | #include <linux/pwm_backlight.h> |
| 27 | 27 | ||
| 28 | #include <asm/hardware/vic.h> | ||
| 29 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/map.h> | 29 | #include <asm/mach/map.h> |
| 31 | 30 | ||
| @@ -254,7 +253,6 @@ MACHINE_START(SMDKC100, "SMDKC100") | |||
| 254 | /* Maintainer: Byungho Min <bhmin@samsung.com> */ | 253 | /* Maintainer: Byungho Min <bhmin@samsung.com> */ |
| 255 | .atag_offset = 0x100, | 254 | .atag_offset = 0x100, |
| 256 | .init_irq = s5pc100_init_irq, | 255 | .init_irq = s5pc100_init_irq, |
| 257 | .handle_irq = vic_handle_irq, | ||
| 258 | .map_io = smdkc100_map_io, | 256 | .map_io = smdkc100_map_io, |
| 259 | .init_machine = smdkc100_machine_init, | 257 | .init_machine = smdkc100_machine_init, |
| 260 | .init_time = s3c24xx_timer_init, | 258 | .init_time = s3c24xx_timer_init, |
diff --git a/arch/arm/mach-s5pv210/include/mach/regs-irq.h b/arch/arm/mach-s5pv210/include/mach/regs-irq.h index 5c3b104a7c86..d8bc1e6c7aaa 100644 --- a/arch/arm/mach-s5pv210/include/mach/regs-irq.h +++ b/arch/arm/mach-s5pv210/include/mach/regs-irq.h | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #ifndef __ASM_ARCH_REGS_IRQ_H | 13 | #ifndef __ASM_ARCH_REGS_IRQ_H |
| 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ | 14 | #define __ASM_ARCH_REGS_IRQ_H __FILE__ |
| 15 | 15 | ||
| 16 | #include <asm/hardware/vic.h> | ||
| 17 | #include <mach/map.h> | 16 | #include <mach/map.h> |
| 18 | 17 | ||
| 19 | #endif /* __ASM_ARCH_REGS_IRQ_H */ | 18 | #endif /* __ASM_ARCH_REGS_IRQ_H */ |
diff --git a/arch/arm/mach-s5pv210/include/mach/tick.h b/arch/arm/mach-s5pv210/include/mach/tick.h deleted file mode 100644 index 7993b3603ccf..000000000000 --- a/arch/arm/mach-s5pv210/include/mach/tick.h +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | /* linux/arch/arm/mach-s5pv210/include/mach/tick.h | ||
| 2 | * | ||
| 3 | * Copyright (c) 2009 Samsung Electronics Co., Ltd. | ||
| 4 | * http://www.samsung.com/ | ||
| 5 | * | ||
| 6 | * Based on arch/arm/mach-s3c6400/include/mach/tick.h | ||
| 7 | * | ||
| 8 | * S5PV210 - Timer tick support definitions | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 as | ||
| 12 | * published by the Free Software Foundation. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_TICK_H | ||
| 16 | #define __ASM_ARCH_TICK_H __FILE__ | ||
| 17 | |||
| 18 | static inline u32 s3c24xx_ostimer_pending(void) | ||
| 19 | { | ||
| 20 | u32 pend = __raw_readl(VA_VIC0 + VIC_RAW_STATUS); | ||
| 21 | return pend & (1 << (IRQ_TIMER4_VIC - S5P_IRQ_VIC0(0))); | ||
| 22 | } | ||
| 23 | |||
| 24 | #define TICK_MAX (0xffffffff) | ||
| 25 | |||
| 26 | #endif /* __ASM_ARCH_TICK_H */ | ||
diff --git a/arch/arm/mach-s5pv210/mach-aquila.c b/arch/arm/mach-s5pv210/mach-aquila.c index 1fb44a5ebb83..11900a8e88a3 100644 --- a/arch/arm/mach-s5pv210/mach-aquila.c +++ b/arch/arm/mach-s5pv210/mach-aquila.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/input.h> | 22 | #include <linux/input.h> |
| 23 | #include <linux/gpio.h> | 23 | #include <linux/gpio.h> |
| 24 | 24 | ||
| 25 | #include <asm/hardware/vic.h> | ||
| 26 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
| 27 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| 28 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
| @@ -685,7 +684,6 @@ MACHINE_START(AQUILA, "Aquila") | |||
| 685 | Kyungmin Park <kyungmin.park@samsung.com> */ | 684 | Kyungmin Park <kyungmin.park@samsung.com> */ |
| 686 | .atag_offset = 0x100, | 685 | .atag_offset = 0x100, |
| 687 | .init_irq = s5pv210_init_irq, | 686 | .init_irq = s5pv210_init_irq, |
| 688 | .handle_irq = vic_handle_irq, | ||
| 689 | .map_io = aquila_map_io, | 687 | .map_io = aquila_map_io, |
| 690 | .init_machine = aquila_machine_init, | 688 | .init_machine = aquila_machine_init, |
| 691 | .init_time = s5p_timer_init, | 689 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index ababdca2b3e4..570481591746 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c | |||
| @@ -29,7 +29,6 @@ | |||
| 29 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
| 30 | #include <linux/platform_data/s3c-hsotg.h> | 30 | #include <linux/platform_data/s3c-hsotg.h> |
| 31 | 31 | ||
| 32 | #include <asm/hardware/vic.h> | ||
| 33 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
| 34 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
| 35 | #include <asm/setup.h> | 34 | #include <asm/setup.h> |
| @@ -972,7 +971,6 @@ MACHINE_START(GONI, "GONI") | |||
| 972 | /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */ | 971 | /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */ |
| 973 | .atag_offset = 0x100, | 972 | .atag_offset = 0x100, |
| 974 | .init_irq = s5pv210_init_irq, | 973 | .init_irq = s5pv210_init_irq, |
| 975 | .handle_irq = vic_handle_irq, | ||
| 976 | .map_io = goni_map_io, | 974 | .map_io = goni_map_io, |
| 977 | .init_machine = goni_machine_init, | 975 | .init_machine = goni_machine_init, |
| 978 | .init_time = s5p_timer_init, | 976 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5pv210/mach-smdkc110.c b/arch/arm/mach-s5pv210/mach-smdkc110.c index acfb0ebce13b..28bd0248a3e2 100644 --- a/arch/arm/mach-s5pv210/mach-smdkc110.c +++ b/arch/arm/mach-s5pv210/mach-smdkc110.c | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/i2c.h> | 15 | #include <linux/i2c.h> |
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | 17 | ||
| 18 | #include <asm/hardware/vic.h> | ||
| 19 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
| 20 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
| 21 | #include <asm/setup.h> | 20 | #include <asm/setup.h> |
| @@ -152,7 +151,6 @@ MACHINE_START(SMDKC110, "SMDKC110") | |||
| 152 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 151 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
| 153 | .atag_offset = 0x100, | 152 | .atag_offset = 0x100, |
| 154 | .init_irq = s5pv210_init_irq, | 153 | .init_irq = s5pv210_init_irq, |
| 155 | .handle_irq = vic_handle_irq, | ||
| 156 | .map_io = smdkc110_map_io, | 154 | .map_io = smdkc110_map_io, |
| 157 | .init_machine = smdkc110_machine_init, | 155 | .init_machine = smdkc110_machine_init, |
| 158 | .init_time = s5p_timer_init, | 156 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c index e1d820f3b426..3c73f36869bb 100644 --- a/arch/arm/mach-s5pv210/mach-smdkv210.c +++ b/arch/arm/mach-s5pv210/mach-smdkv210.c | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/pwm_backlight.h> | 21 | #include <linux/pwm_backlight.h> |
| 22 | #include <linux/platform_data/s3c-hsotg.h> | 22 | #include <linux/platform_data/s3c-hsotg.h> |
| 23 | 23 | ||
| 24 | #include <asm/hardware/vic.h> | ||
| 25 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 26 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 27 | #include <asm/setup.h> | 26 | #include <asm/setup.h> |
| @@ -328,7 +327,6 @@ MACHINE_START(SMDKV210, "SMDKV210") | |||
| 328 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ | 327 | /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */ |
| 329 | .atag_offset = 0x100, | 328 | .atag_offset = 0x100, |
| 330 | .init_irq = s5pv210_init_irq, | 329 | .init_irq = s5pv210_init_irq, |
| 331 | .handle_irq = vic_handle_irq, | ||
| 332 | .map_io = smdkv210_map_io, | 330 | .map_io = smdkv210_map_io, |
| 333 | .init_machine = smdkv210_machine_init, | 331 | .init_machine = smdkv210_machine_init, |
| 334 | .init_time = s5p_timer_init, | 332 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-s5pv210/mach-torbreck.c b/arch/arm/mach-s5pv210/mach-torbreck.c index 1e6fc6eccdf3..2d4c5531819c 100644 --- a/arch/arm/mach-s5pv210/mach-torbreck.c +++ b/arch/arm/mach-s5pv210/mach-torbreck.c | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
| 15 | #include <linux/serial_core.h> | 15 | #include <linux/serial_core.h> |
| 16 | 16 | ||
| 17 | #include <asm/hardware/vic.h> | ||
| 18 | #include <asm/mach/arch.h> | 17 | #include <asm/mach/arch.h> |
| 19 | #include <asm/mach/map.h> | 18 | #include <asm/mach/map.h> |
| 20 | #include <asm/setup.h> | 19 | #include <asm/setup.h> |
| @@ -129,7 +128,6 @@ MACHINE_START(TORBRECK, "TORBRECK") | |||
| 129 | /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */ | 128 | /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */ |
| 130 | .atag_offset = 0x100, | 129 | .atag_offset = 0x100, |
| 131 | .init_irq = s5pv210_init_irq, | 130 | .init_irq = s5pv210_init_irq, |
| 132 | .handle_irq = vic_handle_irq, | ||
| 133 | .map_io = torbreck_map_io, | 131 | .map_io = torbreck_map_io, |
| 134 | .init_machine = torbreck_machine_init, | 132 | .init_machine = torbreck_machine_init, |
| 135 | .init_time = s5p_timer_init, | 133 | .init_time = s5p_timer_init, |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index d81a66362b7c..705bc63c7984 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
| @@ -40,6 +40,7 @@ | |||
| 40 | #include <linux/mmc/sh_mobile_sdhi.h> | 40 | #include <linux/mmc/sh_mobile_sdhi.h> |
| 41 | #include <linux/mfd/tmio.h> | 41 | #include <linux/mfd/tmio.h> |
| 42 | #include <linux/sh_clk.h> | 42 | #include <linux/sh_clk.h> |
| 43 | #include <linux/irqchip/arm-gic.h> | ||
| 43 | #include <video/sh_mobile_lcdc.h> | 44 | #include <video/sh_mobile_lcdc.h> |
| 44 | #include <video/sh_mipi_dsi.h> | 45 | #include <video/sh_mipi_dsi.h> |
| 45 | #include <sound/sh_fsi.h> | 46 | #include <sound/sh_fsi.h> |
| @@ -49,7 +50,6 @@ | |||
| 49 | #include <mach/common.h> | 50 | #include <mach/common.h> |
| 50 | #include <asm/mach-types.h> | 51 | #include <asm/mach-types.h> |
| 51 | #include <asm/mach/arch.h> | 52 | #include <asm/mach/arch.h> |
| 52 | #include <asm/hardware/gic.h> | ||
| 53 | #include <asm/hardware/cache-l2x0.h> | 53 | #include <asm/hardware/cache-l2x0.h> |
| 54 | #include <asm/traps.h> | 54 | #include <asm/traps.h> |
| 55 | 55 | ||
| @@ -668,7 +668,6 @@ MACHINE_START(AG5EVM, "ag5evm") | |||
| 668 | .init_early = sh73a0_add_early_devices, | 668 | .init_early = sh73a0_add_early_devices, |
| 669 | .nr_irqs = NR_IRQS_LEGACY, | 669 | .nr_irqs = NR_IRQS_LEGACY, |
| 670 | .init_irq = sh73a0_init_irq, | 670 | .init_irq = sh73a0_init_irq, |
| 671 | .handle_irq = gic_handle_irq, | ||
| 672 | .init_machine = ag5evm_init, | 671 | .init_machine = ag5evm_init, |
| 673 | .init_late = shmobile_init_late, | 672 | .init_late = shmobile_init_late, |
| 674 | .init_time = sh73a0_earlytimer_init, | 673 | .init_time = sh73a0_earlytimer_init, |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index 2f24994f2ef8..d759a9c2b9e8 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/input/sh_keysc.h> | 35 | #include <linux/input/sh_keysc.h> |
| 36 | #include <linux/gpio_keys.h> | 36 | #include <linux/gpio_keys.h> |
| 37 | #include <linux/leds.h> | 37 | #include <linux/leds.h> |
| 38 | #include <linux/irqchip/arm-gic.h> | ||
| 38 | #include <linux/platform_data/leds-renesas-tpu.h> | 39 | #include <linux/platform_data/leds-renesas-tpu.h> |
| 39 | #include <linux/mmc/host.h> | 40 | #include <linux/mmc/host.h> |
| 40 | #include <linux/mmc/sh_mmcif.h> | 41 | #include <linux/mmc/sh_mmcif.h> |
| @@ -47,7 +48,6 @@ | |||
| 47 | #include <asm/mach-types.h> | 48 | #include <asm/mach-types.h> |
| 48 | #include <asm/mach/arch.h> | 49 | #include <asm/mach/arch.h> |
| 49 | #include <asm/mach/time.h> | 50 | #include <asm/mach/time.h> |
| 50 | #include <asm/hardware/gic.h> | ||
| 51 | #include <asm/hardware/cache-l2x0.h> | 51 | #include <asm/hardware/cache-l2x0.h> |
| 52 | #include <asm/traps.h> | 52 | #include <asm/traps.h> |
| 53 | 53 | ||
| @@ -550,7 +550,6 @@ MACHINE_START(KOTA2, "kota2") | |||
| 550 | .init_early = sh73a0_add_early_devices, | 550 | .init_early = sh73a0_add_early_devices, |
| 551 | .nr_irqs = NR_IRQS_LEGACY, | 551 | .nr_irqs = NR_IRQS_LEGACY, |
| 552 | .init_irq = sh73a0_init_irq, | 552 | .init_irq = sh73a0_init_irq, |
| 553 | .handle_irq = gic_handle_irq, | ||
| 554 | .init_machine = kota2_init, | 553 | .init_machine = kota2_init, |
| 555 | .init_late = shmobile_init_late, | 554 | .init_late = shmobile_init_late, |
| 556 | .init_time = sh73a0_earlytimer_init, | 555 | .init_time = sh73a0_earlytimer_init, |
diff --git a/arch/arm/mach-shmobile/board-kzm9d.c b/arch/arm/mach-shmobile/board-kzm9d.c index 59be864f5992..c254782aa727 100644 --- a/arch/arm/mach-shmobile/board-kzm9d.c +++ b/arch/arm/mach-shmobile/board-kzm9d.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <mach/emev2.h> | 28 | #include <mach/emev2.h> |
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | #include <asm/hardware/gic.h> | ||
| 32 | 31 | ||
| 33 | /* Dummy supplies, where voltage doesn't matter */ | 32 | /* Dummy supplies, where voltage doesn't matter */ |
| 34 | static struct regulator_consumer_supply dummy_supplies[] = { | 33 | static struct regulator_consumer_supply dummy_supplies[] = { |
| @@ -89,7 +88,6 @@ DT_MACHINE_START(KZM9D_DT, "kzm9d") | |||
| 89 | .init_early = emev2_add_early_devices, | 88 | .init_early = emev2_add_early_devices, |
| 90 | .nr_irqs = NR_IRQS_LEGACY, | 89 | .nr_irqs = NR_IRQS_LEGACY, |
| 91 | .init_irq = emev2_init_irq, | 90 | .init_irq = emev2_init_irq, |
| 92 | .handle_irq = gic_handle_irq, | ||
| 93 | .init_machine = kzm9d_add_standard_devices, | 91 | .init_machine = kzm9d_add_standard_devices, |
| 94 | .init_late = shmobile_init_late, | 92 | .init_late = shmobile_init_late, |
| 95 | .init_time = shmobile_timer_init, | 93 | .init_time = shmobile_timer_init, |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index adb23ef51121..ac9428530d7b 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/i2c.h> | 25 | #include <linux/i2c.h> |
| 26 | #include <linux/i2c/pcf857x.h> | 26 | #include <linux/i2c/pcf857x.h> |
| 27 | #include <linux/input.h> | 27 | #include <linux/input.h> |
| 28 | #include <linux/irqchip/arm-gic.h> | ||
| 28 | #include <linux/mmc/host.h> | 29 | #include <linux/mmc/host.h> |
| 29 | #include <linux/mmc/sh_mmcif.h> | 30 | #include <linux/mmc/sh_mmcif.h> |
| 30 | #include <linux/mmc/sh_mobile_sdhi.h> | 31 | #include <linux/mmc/sh_mobile_sdhi.h> |
| @@ -42,7 +43,6 @@ | |||
| 42 | #include <mach/sh73a0.h> | 43 | #include <mach/sh73a0.h> |
| 43 | #include <mach/common.h> | 44 | #include <mach/common.h> |
| 44 | #include <asm/hardware/cache-l2x0.h> | 45 | #include <asm/hardware/cache-l2x0.h> |
| 45 | #include <asm/hardware/gic.h> | ||
| 46 | #include <asm/mach-types.h> | 46 | #include <asm/mach-types.h> |
| 47 | #include <asm/mach/arch.h> | 47 | #include <asm/mach/arch.h> |
| 48 | #include <video/sh_mobile_lcdc.h> | 48 | #include <video/sh_mobile_lcdc.h> |
| @@ -792,7 +792,6 @@ DT_MACHINE_START(KZM9G_DT, "kzm9g") | |||
| 792 | .init_early = sh73a0_add_early_devices, | 792 | .init_early = sh73a0_add_early_devices, |
| 793 | .nr_irqs = NR_IRQS_LEGACY, | 793 | .nr_irqs = NR_IRQS_LEGACY, |
| 794 | .init_irq = sh73a0_init_irq, | 794 | .init_irq = sh73a0_init_irq, |
| 795 | .handle_irq = gic_handle_irq, | ||
| 796 | .init_machine = kzm_init, | 795 | .init_machine = kzm_init, |
| 797 | .init_late = shmobile_init_late, | 796 | .init_late = shmobile_init_late, |
| 798 | .init_time = sh73a0_earlytimer_init, | 797 | .init_time = sh73a0_earlytimer_init, |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index ca45a0c50afe..cdcb799e802f 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
| @@ -44,7 +44,6 @@ | |||
| 44 | #include <mach/irqs.h> | 44 | #include <mach/irqs.h> |
| 45 | #include <asm/mach-types.h> | 45 | #include <asm/mach-types.h> |
| 46 | #include <asm/mach/arch.h> | 46 | #include <asm/mach/arch.h> |
| 47 | #include <asm/hardware/gic.h> | ||
| 48 | #include <asm/traps.h> | 47 | #include <asm/traps.h> |
| 49 | 48 | ||
| 50 | /* Fixed 3.3V regulator to be used by SDHI0 */ | 49 | /* Fixed 3.3V regulator to be used by SDHI0 */ |
| @@ -382,7 +381,6 @@ MACHINE_START(MARZEN, "marzen") | |||
| 382 | .init_early = r8a7779_add_early_devices, | 381 | .init_early = r8a7779_add_early_devices, |
| 383 | .nr_irqs = NR_IRQS_LEGACY, | 382 | .nr_irqs = NR_IRQS_LEGACY, |
| 384 | .init_irq = r8a7779_init_irq, | 383 | .init_irq = r8a7779_init_irq, |
| 385 | .handle_irq = gic_handle_irq, | ||
| 386 | .init_machine = marzen_init, | 384 | .init_machine = marzen_init, |
| 387 | .init_late = marzen_init_late, | 385 | .init_late = marzen_init_late, |
| 388 | .init_time = r8a7779_earlytimer_init, | 386 | .init_time = r8a7779_earlytimer_init, |
diff --git a/arch/arm/mach-shmobile/intc-r8a7779.c b/arch/arm/mach-shmobile/intc-r8a7779.c index ef66f1a8aa2e..8807c27f71f9 100644 --- a/arch/arm/mach-shmobile/intc-r8a7779.c +++ b/arch/arm/mach-shmobile/intc-r8a7779.c | |||
| @@ -22,10 +22,10 @@ | |||
| 22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
| 23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/irqchip/arm-gic.h> | ||
| 25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
| 26 | #include <mach/intc.h> | 27 | #include <mach/intc.h> |
| 27 | #include <mach/r8a7779.h> | 28 | #include <mach/r8a7779.h> |
| 28 | #include <asm/hardware/gic.h> | ||
| 29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 31 | 31 | ||
diff --git a/arch/arm/mach-shmobile/intc-sh73a0.c b/arch/arm/mach-shmobile/intc-sh73a0.c index f0c5e5190601..978369973be4 100644 --- a/arch/arm/mach-shmobile/intc-sh73a0.c +++ b/arch/arm/mach-shmobile/intc-sh73a0.c | |||
| @@ -23,10 +23,10 @@ | |||
| 23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/sh_intc.h> | 25 | #include <linux/sh_intc.h> |
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 26 | #include <mach/intc.h> | 27 | #include <mach/intc.h> |
| 27 | #include <mach/irqs.h> | 28 | #include <mach/irqs.h> |
| 28 | #include <mach/sh73a0.h> | 29 | #include <mach/sh73a0.h> |
| 29 | #include <asm/hardware/gic.h> | ||
| 30 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
| 31 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| 32 | 32 | ||
diff --git a/arch/arm/mach-shmobile/platsmp.c b/arch/arm/mach-shmobile/platsmp.c index ed8d2351915e..1f958d7b0bac 100644 --- a/arch/arm/mach-shmobile/platsmp.c +++ b/arch/arm/mach-shmobile/platsmp.c | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | */ | 12 | */ |
| 13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
| 14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 15 | #include <asm/hardware/gic.h> | ||
| 16 | 15 | ||
| 17 | void __init shmobile_smp_init_cpus(unsigned int ncores) | 16 | void __init shmobile_smp_init_cpus(unsigned int ncores) |
| 18 | { | 17 | { |
| @@ -26,6 +25,4 @@ void __init shmobile_smp_init_cpus(unsigned int ncores) | |||
| 26 | 25 | ||
| 27 | for (i = 0; i < ncores; i++) | 26 | for (i = 0; i < ncores; i++) |
| 28 | set_cpu_possible(i, true); | 27 | set_cpu_possible(i, true); |
| 29 | |||
| 30 | set_smp_cross_call(gic_raise_softirq); | ||
| 31 | } | 28 | } |
diff --git a/arch/arm/mach-shmobile/setup-emev2.c b/arch/arm/mach-shmobile/setup-emev2.c index ea61cb657ac3..47662a581c0a 100644 --- a/arch/arm/mach-shmobile/setup-emev2.c +++ b/arch/arm/mach-shmobile/setup-emev2.c | |||
| @@ -20,13 +20,14 @@ | |||
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
| 22 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
| 23 | #include <linux/irqchip.h> | ||
| 23 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 24 | #include <linux/platform_data/gpio-em.h> | 25 | #include <linux/platform_data/gpio-em.h> |
| 25 | #include <linux/of_platform.h> | 26 | #include <linux/of_platform.h> |
| 26 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
| 27 | #include <linux/input.h> | 28 | #include <linux/input.h> |
| 28 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 29 | #include <linux/of_irq.h> | 30 | #include <linux/irqchip/arm-gic.h> |
| 30 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
| 31 | #include <mach/common.h> | 32 | #include <mach/common.h> |
| 32 | #include <mach/emev2.h> | 33 | #include <mach/emev2.h> |
| @@ -35,7 +36,6 @@ | |||
| 35 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
| 36 | #include <asm/mach/map.h> | 37 | #include <asm/mach/map.h> |
| 37 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
| 38 | #include <asm/hardware/gic.h> | ||
| 39 | 39 | ||
| 40 | static struct map_desc emev2_io_desc[] __initdata = { | 40 | static struct map_desc emev2_io_desc[] __initdata = { |
| 41 | #ifdef CONFIG_SMP | 41 | #ifdef CONFIG_SMP |
| @@ -445,27 +445,16 @@ void __init emev2_add_standard_devices_dt(void) | |||
| 445 | emev2_auxdata_lookup, NULL); | 445 | emev2_auxdata_lookup, NULL); |
| 446 | } | 446 | } |
| 447 | 447 | ||
| 448 | static const struct of_device_id emev2_dt_irq_match[] = { | ||
| 449 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 450 | {}, | ||
| 451 | }; | ||
| 452 | |||
| 453 | static const char *emev2_boards_compat_dt[] __initdata = { | 448 | static const char *emev2_boards_compat_dt[] __initdata = { |
| 454 | "renesas,emev2", | 449 | "renesas,emev2", |
| 455 | NULL, | 450 | NULL, |
| 456 | }; | 451 | }; |
| 457 | 452 | ||
| 458 | void __init emev2_init_irq_dt(void) | ||
| 459 | { | ||
| 460 | of_irq_init(emev2_dt_irq_match); | ||
| 461 | } | ||
| 462 | |||
| 463 | DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") | 453 | DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") |
| 464 | .smp = smp_ops(emev2_smp_ops), | 454 | .smp = smp_ops(emev2_smp_ops), |
| 465 | .init_early = emev2_init_delay, | 455 | .init_early = emev2_init_delay, |
| 466 | .nr_irqs = NR_IRQS_LEGACY, | 456 | .nr_irqs = NR_IRQS_LEGACY, |
| 467 | .init_irq = emev2_init_irq_dt, | 457 | .init_irq = irqchip_init, |
| 468 | .handle_irq = gic_handle_irq, | ||
| 469 | .init_machine = emev2_add_standard_devices_dt, | 458 | .init_machine = emev2_add_standard_devices_dt, |
| 470 | .init_time = shmobile_timer_init, | 459 | .init_time = shmobile_timer_init, |
| 471 | .dt_compat = emev2_boards_compat_dt, | 460 | .dt_compat = emev2_boards_compat_dt, |
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index f67456286280..953eb1f9388d 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c | |||
| @@ -23,11 +23,11 @@ | |||
| 23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 26 | #include <mach/common.h> | 27 | #include <mach/common.h> |
| 27 | #include <mach/emev2.h> | 28 | #include <mach/emev2.h> |
| 28 | #include <asm/smp_plat.h> | 29 | #include <asm/smp_plat.h> |
| 29 | #include <asm/smp_scu.h> | 30 | #include <asm/smp_scu.h> |
| 30 | #include <asm/hardware/gic.h> | ||
| 31 | #include <asm/cacheflush.h> | 31 | #include <asm/cacheflush.h> |
| 32 | 32 | ||
| 33 | #define EMEV2_SCU_BASE 0x1e000000 | 33 | #define EMEV2_SCU_BASE 0x1e000000 |
| @@ -100,7 +100,7 @@ static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct * | |||
| 100 | /* Tell ROM loader about our vector (in headsmp.S) */ | 100 | /* Tell ROM loader about our vector (in headsmp.S) */ |
| 101 | emev2_set_boot_vector(__pa(shmobile_secondary_vector)); | 101 | emev2_set_boot_vector(__pa(shmobile_secondary_vector)); |
| 102 | 102 | ||
| 103 | gic_raise_softirq(cpumask_of(cpu), 0); | 103 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 104 | return 0; | 104 | return 0; |
| 105 | } | 105 | } |
| 106 | 106 | ||
diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c index 2ce6af9a6a37..3a4acf23edcf 100644 --- a/arch/arm/mach-shmobile/smp-r8a7779.c +++ b/arch/arm/mach-shmobile/smp-r8a7779.c | |||
| @@ -23,12 +23,12 @@ | |||
| 23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 26 | #include <mach/common.h> | 27 | #include <mach/common.h> |
| 27 | #include <mach/r8a7779.h> | 28 | #include <mach/r8a7779.h> |
| 28 | #include <asm/smp_plat.h> | 29 | #include <asm/smp_plat.h> |
| 29 | #include <asm/smp_scu.h> | 30 | #include <asm/smp_scu.h> |
| 30 | #include <asm/smp_twd.h> | 31 | #include <asm/smp_twd.h> |
| 31 | #include <asm/hardware/gic.h> | ||
| 32 | 32 | ||
| 33 | #define AVECR IOMEM(0xfe700040) | 33 | #define AVECR IOMEM(0xfe700040) |
| 34 | 34 | ||
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index 624f00f70abf..5c5bcb595350 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c | |||
| @@ -23,12 +23,12 @@ | |||
| 23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
| 24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
| 25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
| 26 | #include <linux/irqchip/arm-gic.h> | ||
| 26 | #include <mach/common.h> | 27 | #include <mach/common.h> |
| 27 | #include <asm/smp_plat.h> | 28 | #include <asm/smp_plat.h> |
| 28 | #include <mach/sh73a0.h> | 29 | #include <mach/sh73a0.h> |
| 29 | #include <asm/smp_scu.h> | 30 | #include <asm/smp_scu.h> |
| 30 | #include <asm/smp_twd.h> | 31 | #include <asm/smp_twd.h> |
| 31 | #include <asm/hardware/gic.h> | ||
| 32 | 32 | ||
| 33 | #define WUPCR IOMEM(0xe6151010) | 33 | #define WUPCR IOMEM(0xe6151010) |
| 34 | #define SRESCR IOMEM(0xe6151018) | 34 | #define SRESCR IOMEM(0xe6151018) |
diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c index 68dd1b69512a..4e9e69d9e7de 100644 --- a/arch/arm/mach-socfpga/platsmp.c +++ b/arch/arm/mach-socfpga/platsmp.c | |||
| @@ -22,9 +22,9 @@ | |||
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/of.h> | 23 | #include <linux/of.h> |
| 24 | #include <linux/of_address.h> | 24 | #include <linux/of_address.h> |
| 25 | #include <linux/irqchip/arm-gic.h> | ||
| 25 | 26 | ||
| 26 | #include <asm/cacheflush.h> | 27 | #include <asm/cacheflush.h> |
| 27 | #include <asm/hardware/gic.h> | ||
| 28 | #include <asm/smp_scu.h> | 28 | #include <asm/smp_scu.h> |
| 29 | #include <asm/smp_plat.h> | 29 | #include <asm/smp_plat.h> |
| 30 | 30 | ||
| @@ -83,8 +83,6 @@ static void __init socfpga_smp_init_cpus(void) | |||
| 83 | 83 | ||
| 84 | for (i = 0; i < ncores; i++) | 84 | for (i = 0; i < ncores; i++) |
| 85 | set_cpu_possible(i, true); | 85 | set_cpu_possible(i, true); |
| 86 | |||
| 87 | set_smp_cross_call(gic_raise_softirq); | ||
| 88 | } | 86 | } |
| 89 | 87 | ||
| 90 | static void __init socfpga_smp_prepare_cpus(unsigned int max_cpus) | 88 | static void __init socfpga_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-socfpga/socfpga.c b/arch/arm/mach-socfpga/socfpga.c index b54baea5f809..27d68468a027 100644 --- a/arch/arm/mach-socfpga/socfpga.c +++ b/arch/arm/mach-socfpga/socfpga.c | |||
| @@ -15,12 +15,12 @@ | |||
| 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 16 | */ | 16 | */ |
| 17 | #include <linux/dw_apb_timer.h> | 17 | #include <linux/dw_apb_timer.h> |
| 18 | #include <linux/irqchip.h> | ||
| 18 | #include <linux/of_address.h> | 19 | #include <linux/of_address.h> |
| 19 | #include <linux/of_irq.h> | 20 | #include <linux/of_irq.h> |
| 20 | #include <linux/of_platform.h> | 21 | #include <linux/of_platform.h> |
| 21 | 22 | ||
| 22 | #include <asm/hardware/cache-l2x0.h> | 23 | #include <asm/hardware/cache-l2x0.h> |
| 23 | #include <asm/hardware/gic.h> | ||
| 24 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 25 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 26 | 26 | ||
| @@ -62,11 +62,6 @@ static void __init socfpga_map_io(void) | |||
| 62 | early_printk("Early printk initialized\n"); | 62 | early_printk("Early printk initialized\n"); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | const static struct of_device_id irq_match[] = { | ||
| 66 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 67 | {} | ||
| 68 | }; | ||
| 69 | |||
| 70 | void __init socfpga_sysmgr_init(void) | 65 | void __init socfpga_sysmgr_init(void) |
| 71 | { | 66 | { |
| 72 | struct device_node *np; | 67 | struct device_node *np; |
| @@ -78,9 +73,9 @@ void __init socfpga_sysmgr_init(void) | |||
| 78 | rst_manager_base_addr = of_iomap(np, 0); | 73 | rst_manager_base_addr = of_iomap(np, 0); |
| 79 | } | 74 | } |
| 80 | 75 | ||
| 81 | static void __init gic_init_irq(void) | 76 | static void __init socfpga_init_irq(void) |
| 82 | { | 77 | { |
| 83 | of_irq_init(irq_match); | 78 | irqchip_init(); |
| 84 | socfpga_sysmgr_init(); | 79 | socfpga_sysmgr_init(); |
| 85 | } | 80 | } |
| 86 | 81 | ||
| @@ -105,8 +100,7 @@ static const char *altera_dt_match[] = { | |||
| 105 | DT_MACHINE_START(SOCFPGA, "Altera SOCFPGA") | 100 | DT_MACHINE_START(SOCFPGA, "Altera SOCFPGA") |
| 106 | .smp = smp_ops(socfpga_smp_ops), | 101 | .smp = smp_ops(socfpga_smp_ops), |
| 107 | .map_io = socfpga_map_io, | 102 | .map_io = socfpga_map_io, |
| 108 | .init_irq = gic_init_irq, | 103 | .init_irq = socfpga_init_irq, |
| 109 | .handle_irq = gic_handle_irq, | ||
| 110 | .init_time = dw_apb_timer_init, | 104 | .init_time = dw_apb_timer_init, |
| 111 | .init_machine = socfpga_cyclone5_init, | 105 | .init_machine = socfpga_cyclone5_init, |
| 112 | .restart = socfpga_cyclone5_restart, | 106 | .restart = socfpga_cyclone5_restart, |
diff --git a/arch/arm/mach-spear13xx/include/mach/generic.h b/arch/arm/mach-spear13xx/include/mach/generic.h index 35e8a0074639..633e678e01a3 100644 --- a/arch/arm/mach-spear13xx/include/mach/generic.h +++ b/arch/arm/mach-spear13xx/include/mach/generic.h | |||
| @@ -28,7 +28,6 @@ extern struct dw_dma_slave nand_write_dma_priv; | |||
| 28 | /* Add spear13xx family function declarations here */ | 28 | /* Add spear13xx family function declarations here */ |
| 29 | void __init spear_setup_of_timer(void); | 29 | void __init spear_setup_of_timer(void); |
| 30 | void __init spear13xx_map_io(void); | 30 | void __init spear13xx_map_io(void); |
| 31 | void __init spear13xx_dt_init_irq(void); | ||
| 32 | void __init spear13xx_l2x0_init(void); | 31 | void __init spear13xx_l2x0_init(void); |
| 33 | bool dw_dma_filter(struct dma_chan *chan, void *slave); | 32 | bool dw_dma_filter(struct dma_chan *chan, void *slave); |
| 34 | void spear_restart(char, const char *); | 33 | void spear_restart(char, const char *); |
diff --git a/arch/arm/mach-spear13xx/platsmp.c b/arch/arm/mach-spear13xx/platsmp.c index 2eaa3fa7b432..af4ade61cd95 100644 --- a/arch/arm/mach-spear13xx/platsmp.c +++ b/arch/arm/mach-spear13xx/platsmp.c | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | #include <linux/jiffies.h> | 15 | #include <linux/jiffies.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
| 18 | #include <linux/irqchip/arm-gic.h> | ||
| 18 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/smp_scu.h> | 20 | #include <asm/smp_scu.h> |
| 21 | #include <mach/spear.h> | 21 | #include <mach/spear.h> |
| 22 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
| @@ -104,8 +104,6 @@ static void __init spear13xx_smp_init_cpus(void) | |||
| 104 | 104 | ||
| 105 | for (i = 0; i < ncores; i++) | 105 | for (i = 0; i < ncores; i++) |
| 106 | set_cpu_possible(i, true); | 106 | set_cpu_possible(i, true); |
| 107 | |||
| 108 | set_smp_cross_call(gic_raise_softirq); | ||
| 109 | } | 107 | } |
| 110 | 108 | ||
| 111 | static void __init spear13xx_smp_prepare_cpus(unsigned int max_cpus) | 109 | static void __init spear13xx_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-spear13xx/spear1310.c b/arch/arm/mach-spear13xx/spear1310.c index e77d05d48082..56214d1076ef 100644 --- a/arch/arm/mach-spear13xx/spear1310.c +++ b/arch/arm/mach-spear13xx/spear1310.c | |||
| @@ -14,9 +14,9 @@ | |||
| 14 | #define pr_fmt(fmt) "SPEAr1310: " fmt | 14 | #define pr_fmt(fmt) "SPEAr1310: " fmt |
| 15 | 15 | ||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/irqchip.h> | ||
| 17 | #include <linux/of_platform.h> | 18 | #include <linux/of_platform.h> |
| 18 | #include <linux/pata_arasan_cf_data.h> | 19 | #include <linux/pata_arasan_cf_data.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | #include <asm/mach/map.h> | 21 | #include <asm/mach/map.h> |
| 22 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
| @@ -90,8 +90,7 @@ static void __init spear1310_map_io(void) | |||
| 90 | DT_MACHINE_START(SPEAR1310_DT, "ST SPEAr1310 SoC with Flattened Device Tree") | 90 | DT_MACHINE_START(SPEAR1310_DT, "ST SPEAr1310 SoC with Flattened Device Tree") |
| 91 | .smp = smp_ops(spear13xx_smp_ops), | 91 | .smp = smp_ops(spear13xx_smp_ops), |
| 92 | .map_io = spear1310_map_io, | 92 | .map_io = spear1310_map_io, |
| 93 | .init_irq = spear13xx_dt_init_irq, | 93 | .init_irq = irqchip_init, |
| 94 | .handle_irq = gic_handle_irq, | ||
| 95 | .init_time = spear13xx_timer_init, | 94 | .init_time = spear13xx_timer_init, |
| 96 | .init_machine = spear1310_dt_init, | 95 | .init_machine = spear1310_dt_init, |
| 97 | .restart = spear_restart, | 96 | .restart = spear_restart, |
diff --git a/arch/arm/mach-spear13xx/spear1340.c b/arch/arm/mach-spear13xx/spear1340.c index ebc254779069..9a28beb2a113 100644 --- a/arch/arm/mach-spear13xx/spear1340.c +++ b/arch/arm/mach-spear13xx/spear1340.c | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
| 19 | #include <linux/dw_dmac.h> | 19 | #include <linux/dw_dmac.h> |
| 20 | #include <linux/of_platform.h> | 20 | #include <linux/of_platform.h> |
| 21 | #include <asm/hardware/gic.h> | 21 | #include <linux/irqchip.h> |
| 22 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
| 23 | #include <mach/dma.h> | 23 | #include <mach/dma.h> |
| 24 | #include <mach/generic.h> | 24 | #include <mach/generic.h> |
| @@ -184,8 +184,7 @@ static const char * const spear1340_dt_board_compat[] = { | |||
| 184 | DT_MACHINE_START(SPEAR1340_DT, "ST SPEAr1340 SoC with Flattened Device Tree") | 184 | DT_MACHINE_START(SPEAR1340_DT, "ST SPEAr1340 SoC with Flattened Device Tree") |
| 185 | .smp = smp_ops(spear13xx_smp_ops), | 185 | .smp = smp_ops(spear13xx_smp_ops), |
| 186 | .map_io = spear13xx_map_io, | 186 | .map_io = spear13xx_map_io, |
| 187 | .init_irq = spear13xx_dt_init_irq, | 187 | .init_irq = irqchip_init, |
| 188 | .handle_irq = gic_handle_irq, | ||
| 189 | .init_time = spear13xx_timer_init, | 188 | .init_time = spear13xx_timer_init, |
| 190 | .init_machine = spear1340_dt_init, | 189 | .init_machine = spear1340_dt_init, |
| 191 | .restart = spear_restart, | 190 | .restart = spear_restart, |
diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c index 7f7acf775f07..c7d2b4a8d8cc 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear13xx/spear13xx.c | |||
| @@ -17,9 +17,8 @@ | |||
| 17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 18 | #include <linux/dw_dmac.h> | 18 | #include <linux/dw_dmac.h> |
| 19 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/of_irq.h> | 20 | #include <linux/of.h> |
| 21 | #include <asm/hardware/cache-l2x0.h> | 21 | #include <asm/hardware/cache-l2x0.h> |
| 22 | #include <asm/hardware/gic.h> | ||
| 23 | #include <asm/mach/map.h> | 22 | #include <asm/mach/map.h> |
| 24 | #include <asm/smp_twd.h> | 23 | #include <asm/smp_twd.h> |
| 25 | #include <mach/dma.h> | 24 | #include <mach/dma.h> |
| @@ -182,13 +181,3 @@ void __init spear13xx_timer_init(void) | |||
| 182 | spear_setup_of_timer(); | 181 | spear_setup_of_timer(); |
| 183 | twd_local_timer_of_register(); | 182 | twd_local_timer_of_register(); |
| 184 | } | 183 | } |
| 185 | |||
| 186 | static const struct of_device_id gic_of_match[] __initconst = { | ||
| 187 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init }, | ||
| 188 | { /* Sentinel */ } | ||
| 189 | }; | ||
| 190 | |||
| 191 | void __init spear13xx_dt_init_irq(void) | ||
| 192 | { | ||
| 193 | of_irq_init(gic_of_match); | ||
| 194 | } | ||
diff --git a/arch/arm/mach-spear3xx/include/mach/generic.h b/arch/arm/mach-spear3xx/include/mach/generic.h index 46b8f7e4d380..df310799e416 100644 --- a/arch/arm/mach-spear3xx/include/mach/generic.h +++ b/arch/arm/mach-spear3xx/include/mach/generic.h | |||
| @@ -30,7 +30,6 @@ extern struct pl08x_platform_data pl080_plat_data; | |||
| 30 | void __init spear_setup_of_timer(void); | 30 | void __init spear_setup_of_timer(void); |
| 31 | void __init spear3xx_clk_init(void); | 31 | void __init spear3xx_clk_init(void); |
| 32 | void __init spear3xx_map_io(void); | 32 | void __init spear3xx_map_io(void); |
| 33 | void __init spear3xx_dt_init_irq(void); | ||
| 34 | 33 | ||
| 35 | void spear_restart(char, const char *); | 34 | void spear_restart(char, const char *); |
| 36 | 35 | ||
diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c index 2630efa93f5e..bbc9b7e9c62c 100644 --- a/arch/arm/mach-spear3xx/spear300.c +++ b/arch/arm/mach-spear3xx/spear300.c | |||
| @@ -14,8 +14,8 @@ | |||
| 14 | #define pr_fmt(fmt) "SPEAr300: " fmt | 14 | #define pr_fmt(fmt) "SPEAr300: " fmt |
| 15 | 15 | ||
| 16 | #include <linux/amba/pl08x.h> | 16 | #include <linux/amba/pl08x.h> |
| 17 | #include <linux/irqchip.h> | ||
| 17 | #include <linux/of_platform.h> | 18 | #include <linux/of_platform.h> |
| 18 | #include <asm/hardware/vic.h> | ||
| 19 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
| 20 | #include <mach/generic.h> | 20 | #include <mach/generic.h> |
| 21 | #include <mach/spear.h> | 21 | #include <mach/spear.h> |
| @@ -212,8 +212,7 @@ static void __init spear300_map_io(void) | |||
| 212 | 212 | ||
| 213 | DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree") | 213 | DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree") |
| 214 | .map_io = spear300_map_io, | 214 | .map_io = spear300_map_io, |
| 215 | .init_irq = spear3xx_dt_init_irq, | 215 | .init_irq = irqchip_init, |
| 216 | .handle_irq = vic_handle_irq, | ||
| 217 | .init_time = spear3xx_timer_init, | 216 | .init_time = spear3xx_timer_init, |
| 218 | .init_machine = spear300_dt_init, | 217 | .init_machine = spear300_dt_init, |
| 219 | .restart = spear_restart, | 218 | .restart = spear_restart, |
diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear3xx/spear310.c index b6147eaebcde..c13a434a8195 100644 --- a/arch/arm/mach-spear3xx/spear310.c +++ b/arch/arm/mach-spear3xx/spear310.c | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/amba/pl08x.h> | 16 | #include <linux/amba/pl08x.h> |
| 17 | #include <linux/amba/serial.h> | 17 | #include <linux/amba/serial.h> |
| 18 | #include <linux/irqchip.h> | ||
| 18 | #include <linux/of_platform.h> | 19 | #include <linux/of_platform.h> |
| 19 | #include <asm/hardware/vic.h> | ||
| 20 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
| 21 | #include <mach/generic.h> | 21 | #include <mach/generic.h> |
| 22 | #include <mach/spear.h> | 22 | #include <mach/spear.h> |
| @@ -254,8 +254,7 @@ static void __init spear310_map_io(void) | |||
| 254 | 254 | ||
| 255 | DT_MACHINE_START(SPEAR310_DT, "ST SPEAr310 SoC with Flattened Device Tree") | 255 | DT_MACHINE_START(SPEAR310_DT, "ST SPEAr310 SoC with Flattened Device Tree") |
| 256 | .map_io = spear310_map_io, | 256 | .map_io = spear310_map_io, |
| 257 | .init_irq = spear3xx_dt_init_irq, | 257 | .init_irq = irqchip_init, |
| 258 | .handle_irq = vic_handle_irq, | ||
| 259 | .init_time = spear3xx_timer_init, | 258 | .init_time = spear3xx_timer_init, |
| 260 | .init_machine = spear310_dt_init, | 259 | .init_machine = spear310_dt_init, |
| 261 | .restart = spear_restart, | 260 | .restart = spear_restart, |
diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c index 53160f713afe..e1c77079a3e5 100644 --- a/arch/arm/mach-spear3xx/spear320.c +++ b/arch/arm/mach-spear3xx/spear320.c | |||
| @@ -16,8 +16,8 @@ | |||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/amba/pl08x.h> | 17 | #include <linux/amba/pl08x.h> |
| 18 | #include <linux/amba/serial.h> | 18 | #include <linux/amba/serial.h> |
| 19 | #include <linux/irqchip.h> | ||
| 19 | #include <linux/of_platform.h> | 20 | #include <linux/of_platform.h> |
| 20 | #include <asm/hardware/vic.h> | ||
| 21 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
| 22 | #include <mach/generic.h> | 22 | #include <mach/generic.h> |
| 23 | #include <mach/spear.h> | 23 | #include <mach/spear.h> |
| @@ -268,8 +268,7 @@ static void __init spear320_map_io(void) | |||
| 268 | 268 | ||
| 269 | DT_MACHINE_START(SPEAR320_DT, "ST SPEAr320 SoC with Flattened Device Tree") | 269 | DT_MACHINE_START(SPEAR320_DT, "ST SPEAr320 SoC with Flattened Device Tree") |
| 270 | .map_io = spear320_map_io, | 270 | .map_io = spear320_map_io, |
| 271 | .init_irq = spear3xx_dt_init_irq, | 271 | .init_irq = irqchip_init, |
| 272 | .handle_irq = vic_handle_irq, | ||
| 273 | .init_time = spear3xx_timer_init, | 272 | .init_time = spear3xx_timer_init, |
| 274 | .init_machine = spear320_dt_init, | 273 | .init_machine = spear320_dt_init, |
| 275 | .restart = spear_restart, | 274 | .restart = spear_restart, |
diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c index 89f4c58908e3..b2ba516ca2d4 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear3xx/spear3xx.c | |||
| @@ -15,11 +15,8 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
| 17 | #include <linux/amba/pl08x.h> | 17 | #include <linux/amba/pl08x.h> |
| 18 | #include <linux/irqchip/spear-shirq.h> | ||
| 19 | #include <linux/of_irq.h> | ||
| 20 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 21 | #include <asm/hardware/pl080.h> | 19 | #include <asm/hardware/pl080.h> |
| 22 | #include <asm/hardware/vic.h> | ||
| 23 | #include <plat/pl080.h> | 20 | #include <plat/pl080.h> |
| 24 | #include <mach/generic.h> | 21 | #include <mach/generic.h> |
| 25 | #include <mach/spear.h> | 22 | #include <mach/spear.h> |
| @@ -115,16 +112,3 @@ void __init spear3xx_timer_init(void) | |||
| 115 | 112 | ||
| 116 | spear_setup_of_timer(); | 113 | spear_setup_of_timer(); |
| 117 | } | 114 | } |
| 118 | |||
| 119 | static const struct of_device_id vic_of_match[] __initconst = { | ||
| 120 | { .compatible = "arm,pl190-vic", .data = vic_of_init, }, | ||
| 121 | { .compatible = "st,spear300-shirq", .data = spear300_shirq_of_init, }, | ||
| 122 | { .compatible = "st,spear310-shirq", .data = spear310_shirq_of_init, }, | ||
| 123 | { .compatible = "st,spear320-shirq", .data = spear320_shirq_of_init, }, | ||
| 124 | { /* Sentinel */ } | ||
| 125 | }; | ||
| 126 | |||
| 127 | void __init spear3xx_dt_init_irq(void) | ||
| 128 | { | ||
| 129 | of_irq_init(vic_of_match); | ||
| 130 | } | ||
diff --git a/arch/arm/mach-spear6xx/spear6xx.c b/arch/arm/mach-spear6xx/spear6xx.c index 1f85bc07c6cb..b8bd33ca88bd 100644 --- a/arch/arm/mach-spear6xx/spear6xx.c +++ b/arch/arm/mach-spear6xx/spear6xx.c | |||
| @@ -16,12 +16,11 @@ | |||
| 16 | #include <linux/amba/pl08x.h> | 16 | #include <linux/amba/pl08x.h> |
| 17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
| 19 | #include <linux/irqchip.h> | ||
| 19 | #include <linux/of.h> | 20 | #include <linux/of.h> |
| 20 | #include <linux/of_address.h> | 21 | #include <linux/of_address.h> |
| 21 | #include <linux/of_irq.h> | ||
| 22 | #include <linux/of_platform.h> | 22 | #include <linux/of_platform.h> |
| 23 | #include <asm/hardware/pl080.h> | 23 | #include <asm/hardware/pl080.h> |
| 24 | #include <asm/hardware/vic.h> | ||
| 25 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 26 | #include <asm/mach/time.h> | 25 | #include <asm/mach/time.h> |
| 27 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
| @@ -421,20 +420,9 @@ static const char *spear600_dt_board_compat[] = { | |||
| 421 | NULL | 420 | NULL |
| 422 | }; | 421 | }; |
| 423 | 422 | ||
| 424 | static const struct of_device_id vic_of_match[] __initconst = { | ||
| 425 | { .compatible = "arm,pl190-vic", .data = vic_of_init, }, | ||
| 426 | { /* Sentinel */ } | ||
| 427 | }; | ||
| 428 | |||
| 429 | static void __init spear6xx_dt_init_irq(void) | ||
| 430 | { | ||
| 431 | of_irq_init(vic_of_match); | ||
| 432 | } | ||
| 433 | |||
| 434 | DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)") | 423 | DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)") |
| 435 | .map_io = spear6xx_map_io, | 424 | .map_io = spear6xx_map_io, |
| 436 | .init_irq = spear6xx_dt_init_irq, | 425 | .init_irq = irqchip_init, |
| 437 | .handle_irq = vic_handle_irq, | ||
| 438 | .init_time = spear6xx_timer_init, | 426 | .init_time = spear6xx_timer_init, |
| 439 | .init_machine = spear600_dt_init, | 427 | .init_machine = spear600_dt_init, |
| 440 | .restart = spear_restart, | 428 | .restart = spear_restart, |
diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c index 6980cfa646f9..fb8fbcecb17f 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c | |||
| @@ -21,8 +21,6 @@ | |||
| 21 | 21 | ||
| 22 | #include <linux/irqchip/sunxi.h> | 22 | #include <linux/irqchip/sunxi.h> |
| 23 | 23 | ||
| 24 | #include <asm/hardware/vic.h> | ||
| 25 | |||
| 26 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
| 27 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
| 28 | 26 | ||
diff --git a/arch/arm/mach-tegra/board-dt-tegra20.c b/arch/arm/mach-tegra/board-dt-tegra20.c index 3b9956aabf5a..5ed81bab2d4b 100644 --- a/arch/arm/mach-tegra/board-dt-tegra20.c +++ b/arch/arm/mach-tegra/board-dt-tegra20.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/of.h> | 25 | #include <linux/of.h> |
| 26 | #include <linux/of_address.h> | 26 | #include <linux/of_address.h> |
| 27 | #include <linux/of_fdt.h> | 27 | #include <linux/of_fdt.h> |
| 28 | #include <linux/of_irq.h> | ||
| 29 | #include <linux/of_platform.h> | 28 | #include <linux/of_platform.h> |
| 30 | #include <linux/pda_power.h> | 29 | #include <linux/pda_power.h> |
| 31 | #include <linux/platform_data/tegra_usb.h> | 30 | #include <linux/platform_data/tegra_usb.h> |
| @@ -34,7 +33,6 @@ | |||
| 34 | #include <linux/i2c-tegra.h> | 33 | #include <linux/i2c-tegra.h> |
| 35 | #include <linux/usb/tegra_usb_phy.h> | 34 | #include <linux/usb/tegra_usb_phy.h> |
| 36 | 35 | ||
| 37 | #include <asm/hardware/gic.h> | ||
| 38 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 39 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
| 40 | #include <asm/mach/time.h> | 38 | #include <asm/mach/time.h> |
| @@ -202,7 +200,6 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)") | |||
| 202 | .smp = smp_ops(tegra_smp_ops), | 200 | .smp = smp_ops(tegra_smp_ops), |
| 203 | .init_early = tegra20_init_early, | 201 | .init_early = tegra20_init_early, |
| 204 | .init_irq = tegra_dt_init_irq, | 202 | .init_irq = tegra_dt_init_irq, |
| 205 | .handle_irq = gic_handle_irq, | ||
| 206 | .init_time = tegra_init_timer, | 203 | .init_time = tegra_init_timer, |
| 207 | .init_machine = tegra_dt_init, | 204 | .init_machine = tegra_dt_init, |
| 208 | .init_late = tegra_dt_init_late, | 205 | .init_late = tegra_dt_init_late, |
diff --git a/arch/arm/mach-tegra/board-dt-tegra30.c b/arch/arm/mach-tegra/board-dt-tegra30.c index 381b2f25f0b4..12dc2ddeca64 100644 --- a/arch/arm/mach-tegra/board-dt-tegra30.c +++ b/arch/arm/mach-tegra/board-dt-tegra30.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <linux/of_platform.h> | 31 | #include <linux/of_platform.h> |
| 32 | 32 | ||
| 33 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 34 | #include <asm/hardware/gic.h> | ||
| 35 | 34 | ||
| 36 | #include "board.h" | 35 | #include "board.h" |
| 37 | #include "clock.h" | 36 | #include "clock.h" |
| @@ -112,7 +111,6 @@ DT_MACHINE_START(TEGRA30_DT, "NVIDIA Tegra30 (Flattened Device Tree)") | |||
| 112 | .map_io = tegra_map_common_io, | 111 | .map_io = tegra_map_common_io, |
| 113 | .init_early = tegra30_init_early, | 112 | .init_early = tegra30_init_early, |
| 114 | .init_irq = tegra_dt_init_irq, | 113 | .init_irq = tegra_dt_init_irq, |
| 115 | .handle_irq = gic_handle_irq, | ||
| 116 | .init_time = tegra_init_timer, | 114 | .init_time = tegra_init_timer, |
| 117 | .init_machine = tegra30_dt_init, | 115 | .init_machine = tegra30_dt_init, |
| 118 | .init_late = tegra_init_late, | 116 | .init_late = tegra_init_late, |
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index d54cfc54b9fe..3599959517b3 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c | |||
| @@ -21,10 +21,9 @@ | |||
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
| 23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
| 24 | #include <linux/of_irq.h> | 24 | #include <linux/irqchip.h> |
| 25 | 25 | ||
| 26 | #include <asm/hardware/cache-l2x0.h> | 26 | #include <asm/hardware/cache-l2x0.h> |
| 27 | #include <asm/hardware/gic.h> | ||
| 28 | 27 | ||
| 29 | #include <mach/powergate.h> | 28 | #include <mach/powergate.h> |
| 30 | 29 | ||
| @@ -57,15 +56,10 @@ u32 tegra_uart_config[4] = { | |||
| 57 | }; | 56 | }; |
| 58 | 57 | ||
| 59 | #ifdef CONFIG_OF | 58 | #ifdef CONFIG_OF |
| 60 | static const struct of_device_id tegra_dt_irq_match[] __initconst = { | ||
| 61 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init }, | ||
| 62 | { } | ||
| 63 | }; | ||
| 64 | |||
| 65 | void __init tegra_dt_init_irq(void) | 59 | void __init tegra_dt_init_irq(void) |
| 66 | { | 60 | { |
| 67 | tegra_init_irq(); | 61 | tegra_init_irq(); |
| 68 | of_irq_init(tegra_dt_irq_match); | 62 | irqchip_init(); |
| 69 | } | 63 | } |
| 70 | #endif | 64 | #endif |
| 71 | 65 | ||
diff --git a/arch/arm/mach-tegra/irq.c b/arch/arm/mach-tegra/irq.c index b7886f183511..2ff2128cb9d8 100644 --- a/arch/arm/mach-tegra/irq.c +++ b/arch/arm/mach-tegra/irq.c | |||
| @@ -22,8 +22,7 @@ | |||
| 22 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
| 23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
| 24 | #include <linux/of.h> | 24 | #include <linux/of.h> |
| 25 | 25 | #include <linux/irqchip/arm-gic.h> | |
| 26 | #include <asm/hardware/gic.h> | ||
| 27 | 26 | ||
| 28 | #include "board.h" | 27 | #include "board.h" |
| 29 | #include "iomap.h" | 28 | #include "iomap.h" |
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 1b926df99c4b..18d7290cf93b 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c | |||
| @@ -18,9 +18,9 @@ | |||
| 18 | #include <linux/jiffies.h> | 18 | #include <linux/jiffies.h> |
| 19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
| 20 | #include <linux/io.h> | 20 | #include <linux/io.h> |
| 21 | #include <linux/irqchip/arm-gic.h> | ||
| 21 | 22 | ||
| 22 | #include <asm/cacheflush.h> | 23 | #include <asm/cacheflush.h> |
| 23 | #include <asm/hardware/gic.h> | ||
| 24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
| 25 | #include <asm/smp_scu.h> | 25 | #include <asm/smp_scu.h> |
| 26 | 26 | ||
| @@ -159,8 +159,6 @@ static void __init tegra_smp_init_cpus(void) | |||
| 159 | 159 | ||
| 160 | for (i = 0; i < ncores; i++) | 160 | for (i = 0; i < ncores; i++) |
| 161 | set_cpu_possible(i, true); | 161 | set_cpu_possible(i, true); |
| 162 | |||
| 163 | set_smp_cross_call(gic_raise_softirq); | ||
| 164 | } | 162 | } |
| 165 | 163 | ||
| 166 | static void __init tegra_smp_prepare_cpus(unsigned int max_cpus) | 164 | static void __init tegra_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index 100a8b764dad..12060ae4e8f1 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
| @@ -31,11 +31,11 @@ | |||
| 31 | #include <linux/dma-mapping.h> | 31 | #include <linux/dma-mapping.h> |
| 32 | #include <linux/platform_data/clk-u300.h> | 32 | #include <linux/platform_data/clk-u300.h> |
| 33 | #include <linux/platform_data/pinctrl-coh901.h> | 33 | #include <linux/platform_data/pinctrl-coh901.h> |
| 34 | #include <linux/irqchip/arm-vic.h> | ||
| 34 | 35 | ||
| 35 | #include <asm/types.h> | 36 | #include <asm/types.h> |
| 36 | #include <asm/setup.h> | 37 | #include <asm/setup.h> |
| 37 | #include <asm/memory.h> | 38 | #include <asm/memory.h> |
| 38 | #include <asm/hardware/vic.h> | ||
| 39 | #include <asm/mach/map.h> | 39 | #include <asm/mach/map.h> |
| 40 | #include <asm/mach-types.h> | 40 | #include <asm/mach-types.h> |
| 41 | #include <asm/mach/arch.h> | 41 | #include <asm/mach/arch.h> |
| @@ -1779,7 +1779,6 @@ MACHINE_START(U300, "Ericsson AB U335 S335/B335 Prototype Board") | |||
| 1779 | .map_io = u300_map_io, | 1779 | .map_io = u300_map_io, |
| 1780 | .nr_irqs = 0, | 1780 | .nr_irqs = 0, |
| 1781 | .init_irq = u300_init_irq, | 1781 | .init_irq = u300_init_irq, |
| 1782 | .handle_irq = vic_handle_irq, | ||
| 1783 | .init_time = u300_timer_init, | 1782 | .init_time = u300_timer_init, |
| 1784 | .init_machine = u300_init_machine, | 1783 | .init_machine = u300_init_machine, |
| 1785 | .restart = u300_restart, | 1784 | .restart = u300_restart, |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index e1dfa24b4fb9..0e928d281759 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
| @@ -40,7 +40,6 @@ | |||
| 40 | 40 | ||
| 41 | #include <asm/mach-types.h> | 41 | #include <asm/mach-types.h> |
| 42 | #include <asm/mach/arch.h> | 42 | #include <asm/mach/arch.h> |
| 43 | #include <asm/hardware/gic.h> | ||
| 44 | 43 | ||
| 45 | #include <mach/hardware.h> | 44 | #include <mach/hardware.h> |
| 46 | #include <mach/setup.h> | 45 | #include <mach/setup.h> |
| @@ -752,7 +751,6 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | |||
| 752 | .init_irq = ux500_init_irq, | 751 | .init_irq = ux500_init_irq, |
| 753 | /* we re-use nomadik timer here */ | 752 | /* we re-use nomadik timer here */ |
| 754 | .init_time = ux500_timer_init, | 753 | .init_time = ux500_timer_init, |
| 755 | .handle_irq = gic_handle_irq, | ||
| 756 | .init_machine = mop500_init_machine, | 754 | .init_machine = mop500_init_machine, |
| 757 | .init_late = ux500_init_late, | 755 | .init_late = ux500_init_late, |
| 758 | MACHINE_END | 756 | MACHINE_END |
| @@ -762,7 +760,6 @@ MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520") | |||
| 762 | .map_io = u8500_map_io, | 760 | .map_io = u8500_map_io, |
| 763 | .init_irq = ux500_init_irq, | 761 | .init_irq = ux500_init_irq, |
| 764 | .init_time = ux500_timer_init, | 762 | .init_time = ux500_timer_init, |
| 765 | .handle_irq = gic_handle_irq, | ||
| 766 | .init_machine = mop500_init_machine, | 763 | .init_machine = mop500_init_machine, |
| 767 | .init_late = ux500_init_late, | 764 | .init_late = ux500_init_late, |
| 768 | MACHINE_END | 765 | MACHINE_END |
| @@ -773,7 +770,6 @@ MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | |||
| 773 | .map_io = u8500_map_io, | 770 | .map_io = u8500_map_io, |
| 774 | .init_irq = ux500_init_irq, | 771 | .init_irq = ux500_init_irq, |
| 775 | .init_time = ux500_timer_init, | 772 | .init_time = ux500_timer_init, |
| 776 | .handle_irq = gic_handle_irq, | ||
| 777 | .init_machine = hrefv60_init_machine, | 773 | .init_machine = hrefv60_init_machine, |
| 778 | .init_late = ux500_init_late, | 774 | .init_late = ux500_init_late, |
| 779 | MACHINE_END | 775 | MACHINE_END |
| @@ -785,7 +781,6 @@ MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") | |||
| 785 | .init_irq = ux500_init_irq, | 781 | .init_irq = ux500_init_irq, |
| 786 | /* we re-use nomadik timer here */ | 782 | /* we re-use nomadik timer here */ |
| 787 | .init_time = ux500_timer_init, | 783 | .init_time = ux500_timer_init, |
| 788 | .handle_irq = gic_handle_irq, | ||
| 789 | .init_machine = snowball_init_machine, | 784 | .init_machine = snowball_init_machine, |
| 790 | .init_late = NULL, | 785 | .init_late = NULL, |
| 791 | MACHINE_END | 786 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index c1fb38b5ed97..218a6b1ada7e 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <asm/pmu.h> | 27 | #include <asm/pmu.h> |
| 28 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
| 29 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
| 30 | #include <asm/hardware/gic.h> | ||
| 31 | 30 | ||
| 32 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
| 33 | #include <mach/setup.h> | 32 | #include <mach/setup.h> |
| @@ -342,7 +341,6 @@ DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)") | |||
| 342 | .init_irq = ux500_init_irq, | 341 | .init_irq = ux500_init_irq, |
| 343 | /* we re-use nomadik timer here */ | 342 | /* we re-use nomadik timer here */ |
| 344 | .init_time = ux500_timer_init, | 343 | .init_time = ux500_timer_init, |
| 345 | .handle_irq = gic_handle_irq, | ||
| 346 | .init_machine = u8500_init_machine, | 344 | .init_machine = u8500_init_machine, |
| 347 | .init_late = NULL, | 345 | .init_late = NULL, |
| 348 | .dt_compat = stericsson_dt_platform_compat, | 346 | .dt_compat = stericsson_dt_platform_compat, |
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index 721e7b4275f3..5dd90d31ffc3 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
| @@ -17,9 +17,10 @@ | |||
| 17 | #include <linux/of.h> | 17 | #include <linux/of.h> |
| 18 | #include <linux/of_irq.h> | 18 | #include <linux/of_irq.h> |
| 19 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
| 20 | #include <linux/irqchip.h> | ||
| 21 | #include <linux/irqchip/arm-gic.h> | ||
| 20 | #include <linux/platform_data/clk-ux500.h> | 22 | #include <linux/platform_data/clk-ux500.h> |
| 21 | 23 | ||
| 22 | #include <asm/hardware/gic.h> | ||
| 23 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
| 24 | 25 | ||
| 25 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
| @@ -42,11 +43,6 @@ void __iomem *_PRCMU_BASE; | |||
| 42 | * This feels fragile because it depends on the gpio device getting probed | 43 | * This feels fragile because it depends on the gpio device getting probed |
| 43 | * _before_ any device uses the gpio interrupts. | 44 | * _before_ any device uses the gpio interrupts. |
| 44 | */ | 45 | */ |
| 45 | static const struct of_device_id ux500_dt_irq_match[] = { | ||
| 46 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 47 | {}, | ||
| 48 | }; | ||
| 49 | |||
| 50 | void __init ux500_init_irq(void) | 46 | void __init ux500_init_irq(void) |
| 51 | { | 47 | { |
| 52 | void __iomem *dist_base; | 48 | void __iomem *dist_base; |
| @@ -62,7 +58,7 @@ void __init ux500_init_irq(void) | |||
| 62 | 58 | ||
| 63 | #ifdef CONFIG_OF | 59 | #ifdef CONFIG_OF |
| 64 | if (of_have_populated_dt()) | 60 | if (of_have_populated_dt()) |
| 65 | of_irq_init(ux500_dt_irq_match); | 61 | irqchip_init(); |
| 66 | else | 62 | else |
| 67 | #endif | 63 | #endif |
| 68 | gic_init(0, 29, dist_base, cpu_base); | 64 | gic_init(0, 29, dist_base, cpu_base); |
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index 3db7782f3afb..b8adac93421f 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
| @@ -16,9 +16,9 @@ | |||
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | #include <linux/irqchip/arm-gic.h> | ||
| 19 | 20 | ||
| 20 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
| 21 | #include <asm/hardware/gic.h> | ||
| 22 | #include <asm/smp_plat.h> | 22 | #include <asm/smp_plat.h> |
| 23 | #include <asm/smp_scu.h> | 23 | #include <asm/smp_scu.h> |
| 24 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
| @@ -91,7 +91,7 @@ static int __cpuinit ux500_boot_secondary(unsigned int cpu, struct task_struct * | |||
| 91 | */ | 91 | */ |
| 92 | write_pen_release(cpu_logical_map(cpu)); | 92 | write_pen_release(cpu_logical_map(cpu)); |
| 93 | 93 | ||
| 94 | smp_send_reschedule(cpu); | 94 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 95 | 95 | ||
| 96 | timeout = jiffies + (1 * HZ); | 96 | timeout = jiffies + (1 * HZ); |
| 97 | while (time_before(jiffies, timeout)) { | 97 | while (time_before(jiffies, timeout)) { |
| @@ -155,8 +155,6 @@ static void __init ux500_smp_init_cpus(void) | |||
| 155 | 155 | ||
| 156 | for (i = 0; i < ncores; i++) | 156 | for (i = 0; i < ncores; i++) |
| 157 | set_cpu_possible(i, true); | 157 | set_cpu_possible(i, true); |
| 158 | |||
| 159 | set_smp_cross_call(gic_raise_softirq); | ||
| 160 | } | 158 | } |
| 161 | 159 | ||
| 162 | static void __init ux500_smp_prepare_cpus(unsigned int max_cpus) | 160 | static void __init ux500_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index d5ddc0c77f5b..a42b89083eb2 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <linux/amba/mmci.h> | 32 | #include <linux/amba/mmci.h> |
| 33 | #include <linux/amba/pl022.h> | 33 | #include <linux/amba/pl022.h> |
| 34 | #include <linux/io.h> | 34 | #include <linux/io.h> |
| 35 | #include <linux/irqchip/arm-vic.h> | ||
| 35 | #include <linux/irqchip/versatile-fpga.h> | 36 | #include <linux/irqchip/versatile-fpga.h> |
| 36 | #include <linux/gfp.h> | 37 | #include <linux/gfp.h> |
| 37 | #include <linux/clkdev.h> | 38 | #include <linux/clkdev.h> |
| @@ -40,7 +41,6 @@ | |||
| 40 | #include <asm/irq.h> | 41 | #include <asm/irq.h> |
| 41 | #include <asm/hardware/arm_timer.h> | 42 | #include <asm/hardware/arm_timer.h> |
| 42 | #include <asm/hardware/icst.h> | 43 | #include <asm/hardware/icst.h> |
| 43 | #include <asm/hardware/vic.h> | ||
| 44 | #include <asm/mach-types.h> | 44 | #include <asm/mach-types.h> |
| 45 | 45 | ||
| 46 | #include <asm/mach/arch.h> | 46 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c index 187c1da2c4bb..1caef1093793 100644 --- a/arch/arm/mach-versatile/versatile_ab.c +++ b/arch/arm/mach-versatile/versatile_ab.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | 26 | ||
| 27 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 28 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
| 29 | #include <asm/hardware/vic.h> | ||
| 30 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 31 | 30 | ||
| 32 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
| @@ -39,7 +38,6 @@ MACHINE_START(VERSATILE_AB, "ARM-Versatile AB") | |||
| 39 | .map_io = versatile_map_io, | 38 | .map_io = versatile_map_io, |
| 40 | .init_early = versatile_init_early, | 39 | .init_early = versatile_init_early, |
| 41 | .init_irq = versatile_init_irq, | 40 | .init_irq = versatile_init_irq, |
| 42 | .handle_irq = vic_handle_irq, | ||
| 43 | .init_time = versatile_timer_init, | 41 | .init_time = versatile_timer_init, |
| 44 | .init_machine = versatile_init, | 42 | .init_machine = versatile_init, |
| 45 | .restart = versatile_restart, | 43 | .restart = versatile_restart, |
diff --git a/arch/arm/mach-versatile/versatile_dt.c b/arch/arm/mach-versatile/versatile_dt.c index ccf9f8a92067..2558f2e957c3 100644 --- a/arch/arm/mach-versatile/versatile_dt.c +++ b/arch/arm/mach-versatile/versatile_dt.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
| 25 | #include <linux/of_irq.h> | 25 | #include <linux/of_irq.h> |
| 26 | #include <linux/of_platform.h> | 26 | #include <linux/of_platform.h> |
| 27 | #include <asm/hardware/vic.h> | ||
| 28 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 29 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 30 | 29 | ||
| @@ -46,7 +45,6 @@ DT_MACHINE_START(VERSATILE_PB, "ARM-Versatile (Device Tree Support)") | |||
| 46 | .map_io = versatile_map_io, | 45 | .map_io = versatile_map_io, |
| 47 | .init_early = versatile_init_early, | 46 | .init_early = versatile_init_early, |
| 48 | .init_irq = versatile_init_irq, | 47 | .init_irq = versatile_init_irq, |
| 49 | .handle_irq = vic_handle_irq, | ||
| 50 | .init_time = versatile_timer_init, | 48 | .init_time = versatile_timer_init, |
| 51 | .init_machine = versatile_dt_init, | 49 | .init_machine = versatile_dt_init, |
| 52 | .dt_compat = versatile_dt_match, | 50 | .dt_compat = versatile_dt_match, |
diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c index 1cabc0aa569d..611d140c8695 100644 --- a/arch/arm/mach-versatile/versatile_pb.c +++ b/arch/arm/mach-versatile/versatile_pb.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <linux/io.h> | 27 | #include <linux/io.h> |
| 28 | 28 | ||
| 29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| 30 | #include <asm/hardware/vic.h> | ||
| 31 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
| 32 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 33 | 32 | ||
| @@ -107,7 +106,6 @@ MACHINE_START(VERSATILE_PB, "ARM-Versatile PB") | |||
| 107 | .map_io = versatile_map_io, | 106 | .map_io = versatile_map_io, |
| 108 | .init_early = versatile_init_early, | 107 | .init_early = versatile_init_early, |
| 109 | .init_irq = versatile_init_irq, | 108 | .init_irq = versatile_init_irq, |
| 110 | .handle_irq = vic_handle_irq, | ||
| 111 | .init_time = versatile_timer_init, | 109 | .init_time = versatile_timer_init, |
| 112 | .init_machine = versatile_pb_init, | 110 | .init_machine = versatile_pb_init, |
| 113 | .restart = versatile_restart, | 111 | .restart = versatile_restart, |
diff --git a/arch/arm/mach-vexpress/ct-ca9x4.c b/arch/arm/mach-vexpress/ct-ca9x4.c index 60838ddb8564..6f34497a4245 100644 --- a/arch/arm/mach-vexpress/ct-ca9x4.c +++ b/arch/arm/mach-vexpress/ct-ca9x4.c | |||
| @@ -10,10 +10,10 @@ | |||
| 10 | #include <linux/amba/clcd.h> | 10 | #include <linux/amba/clcd.h> |
| 11 | #include <linux/clkdev.h> | 11 | #include <linux/clkdev.h> |
| 12 | #include <linux/vexpress.h> | 12 | #include <linux/vexpress.h> |
| 13 | #include <linux/irqchip/arm-gic.h> | ||
| 13 | 14 | ||
| 14 | #include <asm/hardware/arm_timer.h> | 15 | #include <asm/hardware/arm_timer.h> |
| 15 | #include <asm/hardware/cache-l2x0.h> | 16 | #include <asm/hardware/cache-l2x0.h> |
| 16 | #include <asm/hardware/gic.h> | ||
| 17 | #include <asm/smp_scu.h> | 17 | #include <asm/smp_scu.h> |
| 18 | #include <asm/smp_twd.h> | 18 | #include <asm/smp_twd.h> |
| 19 | 19 | ||
| @@ -182,8 +182,6 @@ static void __init ct_ca9x4_init_cpu_map(void) | |||
| 182 | 182 | ||
| 183 | for (i = 0; i < ncores; ++i) | 183 | for (i = 0; i < ncores; ++i) |
| 184 | set_cpu_possible(i, true); | 184 | set_cpu_possible(i, true); |
| 185 | |||
| 186 | set_smp_cross_call(gic_raise_softirq); | ||
| 187 | } | 185 | } |
| 188 | 186 | ||
| 189 | static void __init ct_ca9x4_smp_enable(unsigned int max_cpus) | 187 | static void __init ct_ca9x4_smp_enable(unsigned int max_cpus) |
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c index c5d70de9bb4e..dc1ace55d557 100644 --- a/arch/arm/mach-vexpress/platsmp.c +++ b/arch/arm/mach-vexpress/platsmp.c | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <linux/vexpress.h> | 16 | #include <linux/vexpress.h> |
| 17 | 17 | ||
| 18 | #include <asm/smp_scu.h> | 18 | #include <asm/smp_scu.h> |
| 19 | #include <asm/hardware/gic.h> | ||
| 20 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
| 21 | 20 | ||
| 22 | #include <mach/motherboard.h> | 21 | #include <mach/motherboard.h> |
| @@ -128,8 +127,6 @@ static void __init vexpress_dt_smp_init_cpus(void) | |||
| 128 | 127 | ||
| 129 | for (i = 0; i < ncores; ++i) | 128 | for (i = 0; i < ncores; ++i) |
| 130 | set_cpu_possible(i, true); | 129 | set_cpu_possible(i, true); |
| 131 | |||
| 132 | set_smp_cross_call(gic_raise_softirq); | ||
| 133 | } | 130 | } |
| 134 | 131 | ||
| 135 | static void __init vexpress_dt_smp_prepare_cpus(unsigned int max_cpus) | 132 | static void __init vexpress_dt_smp_prepare_cpus(unsigned int max_cpus) |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 08bd548ef144..915683cb67d6 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <linux/io.h> | 7 | #include <linux/io.h> |
| 8 | #include <linux/smp.h> | 8 | #include <linux/smp.h> |
| 9 | #include <linux/init.h> | 9 | #include <linux/init.h> |
| 10 | #include <linux/irqchip.h> | ||
| 10 | #include <linux/of_address.h> | 11 | #include <linux/of_address.h> |
| 11 | #include <linux/of_fdt.h> | 12 | #include <linux/of_fdt.h> |
| 12 | #include <linux/of_irq.h> | 13 | #include <linux/of_irq.h> |
| @@ -30,7 +31,6 @@ | |||
| 30 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
| 31 | #include <asm/hardware/arm_timer.h> | 32 | #include <asm/hardware/arm_timer.h> |
| 32 | #include <asm/hardware/cache-l2x0.h> | 33 | #include <asm/hardware/cache-l2x0.h> |
| 33 | #include <asm/hardware/gic.h> | ||
| 34 | #include <asm/hardware/timer-sp.h> | 34 | #include <asm/hardware/timer-sp.h> |
| 35 | 35 | ||
| 36 | #include <mach/ct-ca9x4.h> | 36 | #include <mach/ct-ca9x4.h> |
| @@ -373,7 +373,6 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express") | |||
| 373 | .init_early = v2m_init_early, | 373 | .init_early = v2m_init_early, |
| 374 | .init_irq = v2m_init_irq, | 374 | .init_irq = v2m_init_irq, |
| 375 | .init_time = v2m_timer_init, | 375 | .init_time = v2m_timer_init, |
| 376 | .handle_irq = gic_handle_irq, | ||
| 377 | .init_machine = v2m_init, | 376 | .init_machine = v2m_init, |
| 378 | .restart = vexpress_restart, | 377 | .restart = vexpress_restart, |
| 379 | MACHINE_END | 378 | MACHINE_END |
| @@ -430,16 +429,6 @@ void __init v2m_dt_init_early(void) | |||
| 430 | } | 429 | } |
| 431 | } | 430 | } |
| 432 | 431 | ||
| 433 | static struct of_device_id vexpress_irq_match[] __initdata = { | ||
| 434 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 435 | {} | ||
| 436 | }; | ||
| 437 | |||
| 438 | static void __init v2m_dt_init_irq(void) | ||
| 439 | { | ||
| 440 | of_irq_init(vexpress_irq_match); | ||
| 441 | } | ||
| 442 | |||
| 443 | static void __init v2m_dt_timer_init(void) | 432 | static void __init v2m_dt_timer_init(void) |
| 444 | { | 433 | { |
| 445 | struct device_node *node = NULL; | 434 | struct device_node *node = NULL; |
| @@ -489,9 +478,8 @@ DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express") | |||
| 489 | .smp = smp_ops(vexpress_smp_ops), | 478 | .smp = smp_ops(vexpress_smp_ops), |
| 490 | .map_io = v2m_dt_map_io, | 479 | .map_io = v2m_dt_map_io, |
| 491 | .init_early = v2m_dt_init_early, | 480 | .init_early = v2m_dt_init_early, |
| 492 | .init_irq = v2m_dt_init_irq, | 481 | .init_irq = irqchip_init, |
| 493 | .init_time = v2m_dt_timer_init, | 482 | .init_time = v2m_dt_timer_init, |
| 494 | .init_machine = v2m_dt_init, | 483 | .init_machine = v2m_dt_init, |
| 495 | .handle_irq = gic_handle_irq, | ||
| 496 | .restart = vexpress_restart, | 484 | .restart = vexpress_restart, |
| 497 | MACHINE_END | 485 | MACHINE_END |
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index 2ae4bce652b6..6472a69cbfe1 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
| 32 | #include <asm/page.h> | 32 | #include <asm/page.h> |
| 33 | #include <asm/pgtable.h> | 33 | #include <asm/pgtable.h> |
| 34 | #include <asm/hardware/gic.h> | ||
| 35 | #include <asm/hardware/cache-l2x0.h> | 34 | #include <asm/hardware/cache-l2x0.h> |
| 36 | 35 | ||
| 37 | #include "common.h" | 36 | #include "common.h" |
| @@ -55,19 +54,6 @@ static void __init xilinx_init_machine(void) | |||
| 55 | of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL); | 54 | of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL); |
| 56 | } | 55 | } |
| 57 | 56 | ||
| 58 | static struct of_device_id irq_match[] __initdata = { | ||
| 59 | { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, | ||
| 60 | { } | ||
| 61 | }; | ||
| 62 | |||
| 63 | /** | ||
| 64 | * xilinx_irq_init() - Interrupt controller initialization for the GIC. | ||
| 65 | */ | ||
| 66 | static void __init xilinx_irq_init(void) | ||
| 67 | { | ||
| 68 | of_irq_init(irq_match); | ||
| 69 | } | ||
| 70 | |||
| 71 | #define SCU_PERIPH_PHYS 0xF8F00000 | 57 | #define SCU_PERIPH_PHYS 0xF8F00000 |
| 72 | #define SCU_PERIPH_SIZE SZ_8K | 58 | #define SCU_PERIPH_SIZE SZ_8K |
| 73 | #define SCU_PERIPH_VIRT (VMALLOC_END - SCU_PERIPH_SIZE) | 59 | #define SCU_PERIPH_VIRT (VMALLOC_END - SCU_PERIPH_SIZE) |
| @@ -110,8 +96,7 @@ static const char *xilinx_dt_match[] = { | |||
| 110 | 96 | ||
| 111 | MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") | 97 | MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform") |
| 112 | .map_io = xilinx_map_io, | 98 | .map_io = xilinx_map_io, |
| 113 | .init_irq = xilinx_irq_init, | 99 | .init_irq = irqchip_init, |
| 114 | .handle_irq = gic_handle_irq, | ||
| 115 | .init_machine = xilinx_init_machine, | 100 | .init_machine = xilinx_init_machine, |
| 116 | .init_time = xilinx_zynq_timer_init, | 101 | .init_time = xilinx_zynq_timer_init, |
| 117 | .dt_compat = xilinx_dt_match, | 102 | .dt_compat = xilinx_dt_match, |
diff --git a/arch/arm/plat-samsung/s5p-irq-eint.c b/arch/arm/plat-samsung/s5p-irq-eint.c index 33bd3f3d20f5..faa651602780 100644 --- a/arch/arm/plat-samsung/s5p-irq-eint.c +++ b/arch/arm/plat-samsung/s5p-irq-eint.c | |||
| @@ -15,8 +15,7 @@ | |||
| 15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
| 16 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
| 18 | 18 | #include <linux/irqchip/arm-vic.h> | |
| 19 | #include <asm/hardware/vic.h> | ||
| 20 | 19 | ||
| 21 | #include <plat/regs-irqtype.h> | 20 | #include <plat/regs-irqtype.h> |
| 22 | 21 | ||
diff --git a/arch/arm/plat-samsung/s5p-irq.c b/arch/arm/plat-samsung/s5p-irq.c index dfb47d638f03..103e371f5e35 100644 --- a/arch/arm/plat-samsung/s5p-irq.c +++ b/arch/arm/plat-samsung/s5p-irq.c | |||
| @@ -13,8 +13,7 @@ | |||
| 13 | #include <linux/interrupt.h> | 13 | #include <linux/interrupt.h> |
| 14 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
| 15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
| 16 | 16 | #include <linux/irqchip/arm-vic.h> | |
| 17 | #include <asm/hardware/vic.h> | ||
| 18 | 17 | ||
| 19 | #include <mach/map.h> | 18 | #include <mach/map.h> |
| 20 | #include <plat/regs-timer.h> | 19 | #include <plat/regs-timer.h> |
diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c index 04ca4937d8ca..f2ac15561778 100644 --- a/arch/arm/plat-versatile/platsmp.c +++ b/arch/arm/plat-versatile/platsmp.c | |||
| @@ -14,10 +14,10 @@ | |||
| 14 | #include <linux/device.h> | 14 | #include <linux/device.h> |
| 15 | #include <linux/jiffies.h> | 15 | #include <linux/jiffies.h> |
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/irqchip/arm-gic.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/cacheflush.h> | 19 | #include <asm/cacheflush.h> |
| 19 | #include <asm/smp_plat.h> | 20 | #include <asm/smp_plat.h> |
| 20 | #include <asm/hardware/gic.h> | ||
| 21 | 21 | ||
| 22 | /* | 22 | /* |
| 23 | * Write pen_release in a way that is guaranteed to be visible to all | 23 | * Write pen_release in a way that is guaranteed to be visible to all |
| @@ -79,7 +79,7 @@ int __cpuinit versatile_boot_secondary(unsigned int cpu, struct task_struct *idl | |||
| 79 | * the boot monitor to read the system wide flags register, | 79 | * the boot monitor to read the system wide flags register, |
| 80 | * and branch to the address found there. | 80 | * and branch to the address found there. |
| 81 | */ | 81 | */ |
| 82 | gic_raise_softirq(cpumask_of(cpu), 0); | 82 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
| 83 | 83 | ||
| 84 | timeout = jiffies + (1 * HZ); | 84 | timeout = jiffies + (1 * HZ); |
| 85 | while (time_before(jiffies, timeout)) { | 85 | while (time_before(jiffies, timeout)) { |
