bc846e7fec44ee4fea6b027b030f13f05fe581b3
[linux-drm-fsl-dcu.git] / drivers / irqchip / irq-gic.c
1 /*
2  *  Copyright (C) 2002 ARM Limited, All Rights Reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * Interrupt architecture for the GIC:
9  *
10  * o There is one Interrupt Distributor, which receives interrupts
11  *   from system devices and sends them to the Interrupt Controllers.
12  *
13  * o There is one CPU Interface per CPU, which sends interrupts sent
14  *   by the Distributor, and interrupts generated locally, to the
15  *   associated CPU. The base address of the CPU interface is usually
16  *   aliased so that the same address points to different chips depending
17  *   on the CPU it is accessed from.
18  *
19  * Note that IRQs 0-31 are special - they are local to each CPU.
20  * As such, the enable set/clear, pending set/clear and active bit
21  * registers are banked per-cpu for these sources.
22  */
23 #include <linux/init.h>
24 #include <linux/kernel.h>
25 #include <linux/err.h>
26 #include <linux/module.h>
27 #include <linux/list.h>
28 #include <linux/smp.h>
29 #include <linux/cpu.h>
30 #include <linux/cpu_pm.h>
31 #include <linux/cpumask.h>
32 #include <linux/io.h>
33 #include <linux/of.h>
34 #include <linux/of_address.h>
35 #include <linux/of_irq.h>
36 #include <linux/acpi.h>
37 #include <linux/irqdomain.h>
38 #include <linux/interrupt.h>
39 #include <linux/percpu.h>
40 #include <linux/slab.h>
41 #include <linux/irqchip.h>
42 #include <linux/irqchip/chained_irq.h>
43 #include <linux/irqchip/arm-gic.h>
44
45 #include <asm/cputype.h>
46 #include <asm/irq.h>
47 #include <asm/exception.h>
48 #include <asm/smp_plat.h>
49 #include <asm/virt.h>
50
51 #include "irq-gic-common.h"
52
53 #ifdef CONFIG_ARM64
54 #include <asm/cpufeature.h>
55
56 static void gic_check_cpu_features(void)
57 {
58         WARN_TAINT_ONCE(cpus_have_cap(ARM64_HAS_SYSREG_GIC_CPUIF),
59                         TAINT_CPU_OUT_OF_SPEC,
60                         "GICv3 system registers enabled, broken firmware!\n");
61 }
62 #else
63 #define gic_check_cpu_features()        do { } while(0)
64 #endif
65
66 union gic_base {
67         void __iomem *common_base;
68         void __percpu * __iomem *percpu_base;
69 };
70
71 struct gic_chip_data {
72         union gic_base dist_base;
73         union gic_base cpu_base;
74 #ifdef CONFIG_CPU_PM
75         u32 saved_spi_enable[DIV_ROUND_UP(1020, 32)];
76         u32 saved_spi_conf[DIV_ROUND_UP(1020, 16)];
77         u32 saved_spi_target[DIV_ROUND_UP(1020, 4)];
78         u32 __percpu *saved_ppi_enable;
79         u32 __percpu *saved_ppi_conf;
80 #endif
81         struct irq_domain *domain;
82         unsigned int gic_irqs;
83 #ifdef CONFIG_GIC_NON_BANKED
84         void __iomem *(*get_base)(union gic_base *);
85 #endif
86 };
87
88 static DEFINE_RAW_SPINLOCK(irq_controller_lock);
89
90 /*
91  * The GIC mapping of CPU interfaces does not necessarily match
92  * the logical CPU numbering.  Let's use a mapping as returned
93  * by the GIC itself.
94  */
95 #define NR_GIC_CPU_IF 8
96 static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
97
98 static struct static_key supports_deactivate = STATIC_KEY_INIT_TRUE;
99
100 #ifndef MAX_GIC_NR
101 #define MAX_GIC_NR      1
102 #endif
103
104 static struct gic_chip_data gic_data[MAX_GIC_NR] __read_mostly;
105
106 #ifdef CONFIG_GIC_NON_BANKED
107 static void __iomem *gic_get_percpu_base(union gic_base *base)
108 {
109         return raw_cpu_read(*base->percpu_base);
110 }
111
112 static void __iomem *gic_get_common_base(union gic_base *base)
113 {
114         return base->common_base;
115 }
116
117 static inline void __iomem *gic_data_dist_base(struct gic_chip_data *data)
118 {
119         return data->get_base(&data->dist_base);
120 }
121
122 static inline void __iomem *gic_data_cpu_base(struct gic_chip_data *data)
123 {
124         return data->get_base(&data->cpu_base);
125 }
126
127 static inline void gic_set_base_accessor(struct gic_chip_data *data,
128                                          void __iomem *(*f)(union gic_base *))
129 {
130         data->get_base = f;
131 }
132 #else
133 #define gic_data_dist_base(d)   ((d)->dist_base.common_base)
134 #define gic_data_cpu_base(d)    ((d)->cpu_base.common_base)
135 #define gic_set_base_accessor(d, f)
136 #endif
137
138 static inline void __iomem *gic_dist_base(struct irq_data *d)
139 {
140         struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
141         return gic_data_dist_base(gic_data);
142 }
143
144 static inline void __iomem *gic_cpu_base(struct irq_data *d)
145 {
146         struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d);
147         return gic_data_cpu_base(gic_data);
148 }
149
150 static inline unsigned int gic_irq(struct irq_data *d)
151 {
152         return d->hwirq;
153 }
154
155 static inline bool cascading_gic_irq(struct irq_data *d)
156 {
157         void *data = irq_data_get_irq_handler_data(d);
158
159         /*
160          * If handler_data is set, this is a cascading interrupt, and
161          * it cannot possibly be forwarded.
162          */
163         return data != NULL;
164 }
165
166 /*
167  * Routines to acknowledge, disable and enable interrupts
168  */
169 static void gic_poke_irq(struct irq_data *d, u32 offset)
170 {
171         u32 mask = 1 << (gic_irq(d) % 32);
172         writel_relaxed(mask, gic_dist_base(d) + offset + (gic_irq(d) / 32) * 4);
173 }
174
175 static int gic_peek_irq(struct irq_data *d, u32 offset)
176 {
177         u32 mask = 1 << (gic_irq(d) % 32);
178         return !!(readl_relaxed(gic_dist_base(d) + offset + (gic_irq(d) / 32) * 4) & mask);
179 }
180
181 static void gic_mask_irq(struct irq_data *d)
182 {
183         gic_poke_irq(d, GIC_DIST_ENABLE_CLEAR);
184 }
185
186 static void gic_eoimode1_mask_irq(struct irq_data *d)
187 {
188         gic_mask_irq(d);
189         /*
190          * When masking a forwarded interrupt, make sure it is
191          * deactivated as well.
192          *
193          * This ensures that an interrupt that is getting
194          * disabled/masked will not get "stuck", because there is
195          * noone to deactivate it (guest is being terminated).
196          */
197         if (irqd_is_forwarded_to_vcpu(d))
198                 gic_poke_irq(d, GIC_DIST_ACTIVE_CLEAR);
199 }
200
201 static void gic_unmask_irq(struct irq_data *d)
202 {
203         gic_poke_irq(d, GIC_DIST_ENABLE_SET);
204 }
205
206 static void gic_eoi_irq(struct irq_data *d)
207 {
208         writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI);
209 }
210
211 static void gic_eoimode1_eoi_irq(struct irq_data *d)
212 {
213         /* Do not deactivate an IRQ forwarded to a vcpu. */
214         if (irqd_is_forwarded_to_vcpu(d))
215                 return;
216
217         writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_DEACTIVATE);
218 }
219
220 static int gic_irq_set_irqchip_state(struct irq_data *d,
221                                      enum irqchip_irq_state which, bool val)
222 {
223         u32 reg;
224
225         switch (which) {
226         case IRQCHIP_STATE_PENDING:
227                 reg = val ? GIC_DIST_PENDING_SET : GIC_DIST_PENDING_CLEAR;
228                 break;
229
230         case IRQCHIP_STATE_ACTIVE:
231                 reg = val ? GIC_DIST_ACTIVE_SET : GIC_DIST_ACTIVE_CLEAR;
232                 break;
233
234         case IRQCHIP_STATE_MASKED:
235                 reg = val ? GIC_DIST_ENABLE_CLEAR : GIC_DIST_ENABLE_SET;
236                 break;
237
238         default:
239                 return -EINVAL;
240         }
241
242         gic_poke_irq(d, reg);
243         return 0;
244 }
245
246 static int gic_irq_get_irqchip_state(struct irq_data *d,
247                                       enum irqchip_irq_state which, bool *val)
248 {
249         switch (which) {
250         case IRQCHIP_STATE_PENDING:
251                 *val = gic_peek_irq(d, GIC_DIST_PENDING_SET);
252                 break;
253
254         case IRQCHIP_STATE_ACTIVE:
255                 *val = gic_peek_irq(d, GIC_DIST_ACTIVE_SET);
256                 break;
257
258         case IRQCHIP_STATE_MASKED:
259                 *val = !gic_peek_irq(d, GIC_DIST_ENABLE_SET);
260                 break;
261
262         default:
263                 return -EINVAL;
264         }
265
266         return 0;
267 }
268
269 static int gic_set_type(struct irq_data *d, unsigned int type)
270 {
271         void __iomem *base = gic_dist_base(d);
272         unsigned int gicirq = gic_irq(d);
273
274         /* Interrupt configuration for SGIs can't be changed */
275         if (gicirq < 16)
276                 return -EINVAL;
277
278         /* SPIs have restrictions on the supported types */
279         if (gicirq >= 32 && type != IRQ_TYPE_LEVEL_HIGH &&
280                             type != IRQ_TYPE_EDGE_RISING)
281                 return -EINVAL;
282
283         return gic_configure_irq(gicirq, type, base, NULL);
284 }
285
286 static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
287 {
288         /* Only interrupts on the primary GIC can be forwarded to a vcpu. */
289         if (cascading_gic_irq(d))
290                 return -EINVAL;
291
292         if (vcpu)
293                 irqd_set_forwarded_to_vcpu(d);
294         else
295                 irqd_clr_forwarded_to_vcpu(d);
296         return 0;
297 }
298
299 #ifdef CONFIG_SMP
300 static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
301                             bool force)
302 {
303         void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3);
304         unsigned int cpu, shift = (gic_irq(d) % 4) * 8;
305         u32 val, mask, bit;
306         unsigned long flags;
307
308         if (!force)
309                 cpu = cpumask_any_and(mask_val, cpu_online_mask);
310         else
311                 cpu = cpumask_first(mask_val);
312
313         if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
314                 return -EINVAL;
315
316         raw_spin_lock_irqsave(&irq_controller_lock, flags);
317         mask = 0xff << shift;
318         bit = gic_cpu_map[cpu] << shift;
319         val = readl_relaxed(reg) & ~mask;
320         writel_relaxed(val | bit, reg);
321         raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
322
323         return IRQ_SET_MASK_OK;
324 }
325 #endif
326
327 static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
328 {
329         u32 irqstat, irqnr;
330         struct gic_chip_data *gic = &gic_data[0];
331         void __iomem *cpu_base = gic_data_cpu_base(gic);
332
333         do {
334                 irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK);
335                 irqnr = irqstat & GICC_IAR_INT_ID_MASK;
336
337                 if (likely(irqnr > 15 && irqnr < 1021)) {
338                         if (static_key_true(&supports_deactivate))
339                                 writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
340                         handle_domain_irq(gic->domain, irqnr, regs);
341                         continue;
342                 }
343                 if (irqnr < 16) {
344                         writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
345                         if (static_key_true(&supports_deactivate))
346                                 writel_relaxed(irqstat, cpu_base + GIC_CPU_DEACTIVATE);
347 #ifdef CONFIG_SMP
348                         handle_IPI(irqnr, regs);
349 #endif
350                         continue;
351                 }
352                 break;
353         } while (1);
354 }
355
356 static void gic_handle_cascade_irq(struct irq_desc *desc)
357 {
358         struct gic_chip_data *chip_data = irq_desc_get_handler_data(desc);
359         struct irq_chip *chip = irq_desc_get_chip(desc);
360         unsigned int cascade_irq, gic_irq;
361         unsigned long status;
362
363         chained_irq_enter(chip, desc);
364
365         raw_spin_lock(&irq_controller_lock);
366         status = readl_relaxed(gic_data_cpu_base(chip_data) + GIC_CPU_INTACK);
367         raw_spin_unlock(&irq_controller_lock);
368
369         gic_irq = (status & GICC_IAR_INT_ID_MASK);
370         if (gic_irq == GICC_INT_SPURIOUS)
371                 goto out;
372
373         cascade_irq = irq_find_mapping(chip_data->domain, gic_irq);
374         if (unlikely(gic_irq < 32 || gic_irq > 1020))
375                 handle_bad_irq(desc);
376         else
377                 generic_handle_irq(cascade_irq);
378
379  out:
380         chained_irq_exit(chip, desc);
381 }
382
383 static struct irq_chip gic_chip = {
384         .name                   = "GIC",
385         .irq_mask               = gic_mask_irq,
386         .irq_unmask             = gic_unmask_irq,
387         .irq_eoi                = gic_eoi_irq,
388         .irq_set_type           = gic_set_type,
389 #ifdef CONFIG_SMP
390         .irq_set_affinity       = gic_set_affinity,
391 #endif
392         .irq_get_irqchip_state  = gic_irq_get_irqchip_state,
393         .irq_set_irqchip_state  = gic_irq_set_irqchip_state,
394         .flags                  = IRQCHIP_SET_TYPE_MASKED |
395                                   IRQCHIP_SKIP_SET_WAKE |
396                                   IRQCHIP_MASK_ON_SUSPEND,
397 };
398
399 static struct irq_chip gic_eoimode1_chip = {
400         .name                   = "GICv2",
401         .irq_mask               = gic_eoimode1_mask_irq,
402         .irq_unmask             = gic_unmask_irq,
403         .irq_eoi                = gic_eoimode1_eoi_irq,
404         .irq_set_type           = gic_set_type,
405 #ifdef CONFIG_SMP
406         .irq_set_affinity       = gic_set_affinity,
407 #endif
408         .irq_get_irqchip_state  = gic_irq_get_irqchip_state,
409         .irq_set_irqchip_state  = gic_irq_set_irqchip_state,
410         .irq_set_vcpu_affinity  = gic_irq_set_vcpu_affinity,
411         .flags                  = IRQCHIP_SET_TYPE_MASKED |
412                                   IRQCHIP_SKIP_SET_WAKE |
413                                   IRQCHIP_MASK_ON_SUSPEND,
414 };
415
416 void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq)
417 {
418         if (gic_nr >= MAX_GIC_NR)
419                 BUG();
420         irq_set_chained_handler_and_data(irq, gic_handle_cascade_irq,
421                                          &gic_data[gic_nr]);
422 }
423
424 static u8 gic_get_cpumask(struct gic_chip_data *gic)
425 {
426         void __iomem *base = gic_data_dist_base(gic);
427         u32 mask, i;
428
429         for (i = mask = 0; i < 32; i += 4) {
430                 mask = readl_relaxed(base + GIC_DIST_TARGET + i);
431                 mask |= mask >> 16;
432                 mask |= mask >> 8;
433                 if (mask)
434                         break;
435         }
436
437         if (!mask && num_possible_cpus() > 1)
438                 pr_crit("GIC CPU mask not found - kernel will fail to boot.\n");
439
440         return mask;
441 }
442
443 static void gic_cpu_if_up(struct gic_chip_data *gic)
444 {
445         void __iomem *cpu_base = gic_data_cpu_base(gic);
446         u32 bypass = 0;
447         u32 mode = 0;
448
449         if (static_key_true(&supports_deactivate))
450                 mode = GIC_CPU_CTRL_EOImodeNS;
451
452         /*
453         * Preserve bypass disable bits to be written back later
454         */
455         bypass = readl(cpu_base + GIC_CPU_CTRL);
456         bypass &= GICC_DIS_BYPASS_MASK;
457
458         writel_relaxed(bypass | mode | GICC_ENABLE, cpu_base + GIC_CPU_CTRL);
459 }
460
461
462 static void __init gic_dist_init(struct gic_chip_data *gic)
463 {
464         unsigned int i;
465         u32 cpumask;
466         unsigned int gic_irqs = gic->gic_irqs;
467         void __iomem *base = gic_data_dist_base(gic);
468
469         writel_relaxed(GICD_DISABLE, base + GIC_DIST_CTRL);
470
471         /*
472          * Set all global interrupts to this CPU only.
473          */
474         cpumask = gic_get_cpumask(gic);
475         cpumask |= cpumask << 8;
476         cpumask |= cpumask << 16;
477         for (i = 32; i < gic_irqs; i += 4)
478                 writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4);
479
480         gic_dist_config(base, gic_irqs, NULL);
481
482         writel_relaxed(GICD_ENABLE, base + GIC_DIST_CTRL);
483 }
484
485 static void gic_cpu_init(struct gic_chip_data *gic)
486 {
487         void __iomem *dist_base = gic_data_dist_base(gic);
488         void __iomem *base = gic_data_cpu_base(gic);
489         unsigned int cpu_mask, cpu = smp_processor_id();
490         int i;
491
492         /*
493          * Setting up the CPU map is only relevant for the primary GIC
494          * because any nested/secondary GICs do not directly interface
495          * with the CPU(s).
496          */
497         if (gic == &gic_data[0]) {
498                 /*
499                  * Get what the GIC says our CPU mask is.
500                  */
501                 BUG_ON(cpu >= NR_GIC_CPU_IF);
502                 cpu_mask = gic_get_cpumask(gic);
503                 gic_cpu_map[cpu] = cpu_mask;
504
505                 /*
506                  * Clear our mask from the other map entries in case they're
507                  * still undefined.
508                  */
509                 for (i = 0; i < NR_GIC_CPU_IF; i++)
510                         if (i != cpu)
511                                 gic_cpu_map[i] &= ~cpu_mask;
512         }
513
514         gic_cpu_config(dist_base, NULL);
515
516         writel_relaxed(GICC_INT_PRI_THRESHOLD, base + GIC_CPU_PRIMASK);
517         gic_cpu_if_up(gic);
518 }
519
520 int gic_cpu_if_down(unsigned int gic_nr)
521 {
522         void __iomem *cpu_base;
523         u32 val = 0;
524
525         if (gic_nr >= MAX_GIC_NR)
526                 return -EINVAL;
527
528         cpu_base = gic_data_cpu_base(&gic_data[gic_nr]);
529         val = readl(cpu_base + GIC_CPU_CTRL);
530         val &= ~GICC_ENABLE;
531         writel_relaxed(val, cpu_base + GIC_CPU_CTRL);
532
533         return 0;
534 }
535
536 #ifdef CONFIG_CPU_PM
537 /*
538  * Saves the GIC distributor registers during suspend or idle.  Must be called
539  * with interrupts disabled but before powering down the GIC.  After calling
540  * this function, no interrupts will be delivered by the GIC, and another
541  * platform-specific wakeup source must be enabled.
542  */
543 static void gic_dist_save(unsigned int gic_nr)
544 {
545         unsigned int gic_irqs;
546         void __iomem *dist_base;
547         int i;
548
549         if (gic_nr >= MAX_GIC_NR)
550                 BUG();
551
552         gic_irqs = gic_data[gic_nr].gic_irqs;
553         dist_base = gic_data_dist_base(&gic_data[gic_nr]);
554
555         if (!dist_base)
556                 return;
557
558         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 16); i++)
559                 gic_data[gic_nr].saved_spi_conf[i] =
560                         readl_relaxed(dist_base + GIC_DIST_CONFIG + i * 4);
561
562         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++)
563                 gic_data[gic_nr].saved_spi_target[i] =
564                         readl_relaxed(dist_base + GIC_DIST_TARGET + i * 4);
565
566         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 32); i++)
567                 gic_data[gic_nr].saved_spi_enable[i] =
568                         readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4);
569 }
570
571 /*
572  * Restores the GIC distributor registers during resume or when coming out of
573  * idle.  Must be called before enabling interrupts.  If a level interrupt
574  * that occured while the GIC was suspended is still present, it will be
575  * handled normally, but any edge interrupts that occured will not be seen by
576  * the GIC and need to be handled by the platform-specific wakeup source.
577  */
578 static void gic_dist_restore(unsigned int gic_nr)
579 {
580         unsigned int gic_irqs;
581         unsigned int i;
582         void __iomem *dist_base;
583
584         if (gic_nr >= MAX_GIC_NR)
585                 BUG();
586
587         gic_irqs = gic_data[gic_nr].gic_irqs;
588         dist_base = gic_data_dist_base(&gic_data[gic_nr]);
589
590         if (!dist_base)
591                 return;
592
593         writel_relaxed(GICD_DISABLE, dist_base + GIC_DIST_CTRL);
594
595         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 16); i++)
596                 writel_relaxed(gic_data[gic_nr].saved_spi_conf[i],
597                         dist_base + GIC_DIST_CONFIG + i * 4);
598
599         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++)
600                 writel_relaxed(GICD_INT_DEF_PRI_X4,
601                         dist_base + GIC_DIST_PRI + i * 4);
602
603         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 4); i++)
604                 writel_relaxed(gic_data[gic_nr].saved_spi_target[i],
605                         dist_base + GIC_DIST_TARGET + i * 4);
606
607         for (i = 0; i < DIV_ROUND_UP(gic_irqs, 32); i++) {
608                 writel_relaxed(GICD_INT_EN_CLR_X32,
609                         dist_base + GIC_DIST_ENABLE_CLEAR + i * 4);
610                 writel_relaxed(gic_data[gic_nr].saved_spi_enable[i],
611                         dist_base + GIC_DIST_ENABLE_SET + i * 4);
612         }
613
614         writel_relaxed(GICD_ENABLE, dist_base + GIC_DIST_CTRL);
615 }
616
617 static void gic_cpu_save(unsigned int gic_nr)
618 {
619         int i;
620         u32 *ptr;
621         void __iomem *dist_base;
622         void __iomem *cpu_base;
623
624         if (gic_nr >= MAX_GIC_NR)
625                 BUG();
626
627         dist_base = gic_data_dist_base(&gic_data[gic_nr]);
628         cpu_base = gic_data_cpu_base(&gic_data[gic_nr]);
629
630         if (!dist_base || !cpu_base)
631                 return;
632
633         ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
634         for (i = 0; i < DIV_ROUND_UP(32, 32); i++)
635                 ptr[i] = readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4);
636
637         ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
638         for (i = 0; i < DIV_ROUND_UP(32, 16); i++)
639                 ptr[i] = readl_relaxed(dist_base + GIC_DIST_CONFIG + i * 4);
640
641 }
642
643 static void gic_cpu_restore(unsigned int gic_nr)
644 {
645         int i;
646         u32 *ptr;
647         void __iomem *dist_base;
648         void __iomem *cpu_base;
649
650         if (gic_nr >= MAX_GIC_NR)
651                 BUG();
652
653         dist_base = gic_data_dist_base(&gic_data[gic_nr]);
654         cpu_base = gic_data_cpu_base(&gic_data[gic_nr]);
655
656         if (!dist_base || !cpu_base)
657                 return;
658
659         ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_enable);
660         for (i = 0; i < DIV_ROUND_UP(32, 32); i++) {
661                 writel_relaxed(GICD_INT_EN_CLR_X32,
662                                dist_base + GIC_DIST_ENABLE_CLEAR + i * 4);
663                 writel_relaxed(ptr[i], dist_base + GIC_DIST_ENABLE_SET + i * 4);
664         }
665
666         ptr = raw_cpu_ptr(gic_data[gic_nr].saved_ppi_conf);
667         for (i = 0; i < DIV_ROUND_UP(32, 16); i++)
668                 writel_relaxed(ptr[i], dist_base + GIC_DIST_CONFIG + i * 4);
669
670         for (i = 0; i < DIV_ROUND_UP(32, 4); i++)
671                 writel_relaxed(GICD_INT_DEF_PRI_X4,
672                                         dist_base + GIC_DIST_PRI + i * 4);
673
674         writel_relaxed(GICC_INT_PRI_THRESHOLD, cpu_base + GIC_CPU_PRIMASK);
675         gic_cpu_if_up(&gic_data[gic_nr]);
676 }
677
678 static int gic_notifier(struct notifier_block *self, unsigned long cmd, void *v)
679 {
680         int i;
681
682         for (i = 0; i < MAX_GIC_NR; i++) {
683 #ifdef CONFIG_GIC_NON_BANKED
684                 /* Skip over unused GICs */
685                 if (!gic_data[i].get_base)
686                         continue;
687 #endif
688                 switch (cmd) {
689                 case CPU_PM_ENTER:
690                         gic_cpu_save(i);
691                         break;
692                 case CPU_PM_ENTER_FAILED:
693                 case CPU_PM_EXIT:
694                         gic_cpu_restore(i);
695                         break;
696                 case CPU_CLUSTER_PM_ENTER:
697                         gic_dist_save(i);
698                         break;
699                 case CPU_CLUSTER_PM_ENTER_FAILED:
700                 case CPU_CLUSTER_PM_EXIT:
701                         gic_dist_restore(i);
702                         break;
703                 }
704         }
705
706         return NOTIFY_OK;
707 }
708
709 static struct notifier_block gic_notifier_block = {
710         .notifier_call = gic_notifier,
711 };
712
713 static void __init gic_pm_init(struct gic_chip_data *gic)
714 {
715         gic->saved_ppi_enable = __alloc_percpu(DIV_ROUND_UP(32, 32) * 4,
716                 sizeof(u32));
717         BUG_ON(!gic->saved_ppi_enable);
718
719         gic->saved_ppi_conf = __alloc_percpu(DIV_ROUND_UP(32, 16) * 4,
720                 sizeof(u32));
721         BUG_ON(!gic->saved_ppi_conf);
722
723         if (gic == &gic_data[0])
724                 cpu_pm_register_notifier(&gic_notifier_block);
725 }
726 #else
727 static void __init gic_pm_init(struct gic_chip_data *gic)
728 {
729 }
730 #endif
731
732 #ifdef CONFIG_SMP
733 static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
734 {
735         int cpu;
736         unsigned long flags, map = 0;
737
738         raw_spin_lock_irqsave(&irq_controller_lock, flags);
739
740         /* Convert our logical CPU mask into a physical one. */
741         for_each_cpu(cpu, mask)
742                 map |= gic_cpu_map[cpu];
743
744         /*
745          * Ensure that stores to Normal memory are visible to the
746          * other CPUs before they observe us issuing the IPI.
747          */
748         dmb(ishst);
749
750         /* this always happens on GIC0 */
751         writel_relaxed(map << 16 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
752
753         raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
754 }
755 #endif
756
757 #ifdef CONFIG_BL_SWITCHER
758 /*
759  * gic_send_sgi - send a SGI directly to given CPU interface number
760  *
761  * cpu_id: the ID for the destination CPU interface
762  * irq: the IPI number to send a SGI for
763  */
764 void gic_send_sgi(unsigned int cpu_id, unsigned int irq)
765 {
766         BUG_ON(cpu_id >= NR_GIC_CPU_IF);
767         cpu_id = 1 << cpu_id;
768         /* this always happens on GIC0 */
769         writel_relaxed((cpu_id << 16) | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
770 }
771
772 /*
773  * gic_get_cpu_id - get the CPU interface ID for the specified CPU
774  *
775  * @cpu: the logical CPU number to get the GIC ID for.
776  *
777  * Return the CPU interface ID for the given logical CPU number,
778  * or -1 if the CPU number is too large or the interface ID is
779  * unknown (more than one bit set).
780  */
781 int gic_get_cpu_id(unsigned int cpu)
782 {
783         unsigned int cpu_bit;
784
785         if (cpu >= NR_GIC_CPU_IF)
786                 return -1;
787         cpu_bit = gic_cpu_map[cpu];
788         if (cpu_bit & (cpu_bit - 1))
789                 return -1;
790         return __ffs(cpu_bit);
791 }
792
793 /*
794  * gic_migrate_target - migrate IRQs to another CPU interface
795  *
796  * @new_cpu_id: the CPU target ID to migrate IRQs to
797  *
798  * Migrate all peripheral interrupts with a target matching the current CPU
799  * to the interface corresponding to @new_cpu_id.  The CPU interface mapping
800  * is also updated.  Targets to other CPU interfaces are unchanged.
801  * This must be called with IRQs locally disabled.
802  */
803 void gic_migrate_target(unsigned int new_cpu_id)
804 {
805         unsigned int cur_cpu_id, gic_irqs, gic_nr = 0;
806         void __iomem *dist_base;
807         int i, ror_val, cpu = smp_processor_id();
808         u32 val, cur_target_mask, active_mask;
809
810         if (gic_nr >= MAX_GIC_NR)
811                 BUG();
812
813         dist_base = gic_data_dist_base(&gic_data[gic_nr]);
814         if (!dist_base)
815                 return;
816         gic_irqs = gic_data[gic_nr].gic_irqs;
817
818         cur_cpu_id = __ffs(gic_cpu_map[cpu]);
819         cur_target_mask = 0x01010101 << cur_cpu_id;
820         ror_val = (cur_cpu_id - new_cpu_id) & 31;
821
822         raw_spin_lock(&irq_controller_lock);
823
824         /* Update the target interface for this logical CPU */
825         gic_cpu_map[cpu] = 1 << new_cpu_id;
826
827         /*
828          * Find all the peripheral interrupts targetting the current
829          * CPU interface and migrate them to the new CPU interface.
830          * We skip DIST_TARGET 0 to 7 as they are read-only.
831          */
832         for (i = 8; i < DIV_ROUND_UP(gic_irqs, 4); i++) {
833                 val = readl_relaxed(dist_base + GIC_DIST_TARGET + i * 4);
834                 active_mask = val & cur_target_mask;
835                 if (active_mask) {
836                         val &= ~active_mask;
837                         val |= ror32(active_mask, ror_val);
838                         writel_relaxed(val, dist_base + GIC_DIST_TARGET + i*4);
839                 }
840         }
841
842         raw_spin_unlock(&irq_controller_lock);
843
844         /*
845          * Now let's migrate and clear any potential SGIs that might be
846          * pending for us (cur_cpu_id).  Since GIC_DIST_SGI_PENDING_SET
847          * is a banked register, we can only forward the SGI using
848          * GIC_DIST_SOFTINT.  The original SGI source is lost but Linux
849          * doesn't use that information anyway.
850          *
851          * For the same reason we do not adjust SGI source information
852          * for previously sent SGIs by us to other CPUs either.
853          */
854         for (i = 0; i < 16; i += 4) {
855                 int j;
856                 val = readl_relaxed(dist_base + GIC_DIST_SGI_PENDING_SET + i);
857                 if (!val)
858                         continue;
859                 writel_relaxed(val, dist_base + GIC_DIST_SGI_PENDING_CLEAR + i);
860                 for (j = i; j < i + 4; j++) {
861                         if (val & 0xff)
862                                 writel_relaxed((1 << (new_cpu_id + 16)) | j,
863                                                 dist_base + GIC_DIST_SOFTINT);
864                         val >>= 8;
865                 }
866         }
867 }
868
869 /*
870  * gic_get_sgir_physaddr - get the physical address for the SGI register
871  *
872  * REturn the physical address of the SGI register to be used
873  * by some early assembly code when the kernel is not yet available.
874  */
875 static unsigned long gic_dist_physaddr;
876
877 unsigned long gic_get_sgir_physaddr(void)
878 {
879         if (!gic_dist_physaddr)
880                 return 0;
881         return gic_dist_physaddr + GIC_DIST_SOFTINT;
882 }
883
884 void __init gic_init_physaddr(struct device_node *node)
885 {
886         struct resource res;
887         if (of_address_to_resource(node, 0, &res) == 0) {
888                 gic_dist_physaddr = res.start;
889                 pr_info("GIC physical location is %#lx\n", gic_dist_physaddr);
890         }
891 }
892
893 #else
894 #define gic_init_physaddr(node)  do { } while (0)
895 #endif
896
897 static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,
898                                 irq_hw_number_t hw)
899 {
900         struct irq_chip *chip = &gic_chip;
901
902         if (static_key_true(&supports_deactivate)) {
903                 if (d->host_data == (void *)&gic_data[0])
904                         chip = &gic_eoimode1_chip;
905         }
906
907         if (hw < 32) {
908                 irq_set_percpu_devid(irq);
909                 irq_domain_set_info(d, irq, hw, chip, d->host_data,
910                                     handle_percpu_devid_irq, NULL, NULL);
911                 irq_set_status_flags(irq, IRQ_NOAUTOEN);
912         } else {
913                 irq_domain_set_info(d, irq, hw, chip, d->host_data,
914                                     handle_fasteoi_irq, NULL, NULL);
915                 irq_set_probe(irq);
916         }
917         return 0;
918 }
919
920 static void gic_irq_domain_unmap(struct irq_domain *d, unsigned int irq)
921 {
922 }
923
924 static int gic_irq_domain_translate(struct irq_domain *d,
925                                     struct irq_fwspec *fwspec,
926                                     unsigned long *hwirq,
927                                     unsigned int *type)
928 {
929         if (is_of_node(fwspec->fwnode)) {
930                 if (fwspec->param_count < 3)
931                         return -EINVAL;
932
933                 /* Get the interrupt number and add 16 to skip over SGIs */
934                 *hwirq = fwspec->param[1] + 16;
935
936                 /*
937                  * For SPIs, we need to add 16 more to get the GIC irq
938                  * ID number
939                  */
940                 if (!fwspec->param[0])
941                         *hwirq += 16;
942
943                 *type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
944                 return 0;
945         }
946
947         if (fwspec->fwnode->type == FWNODE_IRQCHIP) {
948                 if(fwspec->param_count != 2)
949                         return -EINVAL;
950
951                 *hwirq = fwspec->param[0];
952                 *type = fwspec->param[1];
953                 return 0;
954         }
955
956         return -EINVAL;
957 }
958
959 #ifdef CONFIG_SMP
960 static int gic_secondary_init(struct notifier_block *nfb, unsigned long action,
961                               void *hcpu)
962 {
963         if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)
964                 gic_cpu_init(&gic_data[0]);
965         return NOTIFY_OK;
966 }
967
968 /*
969  * Notifier for enabling the GIC CPU interface. Set an arbitrarily high
970  * priority because the GIC needs to be up before the ARM generic timers.
971  */
972 static struct notifier_block gic_cpu_notifier = {
973         .notifier_call = gic_secondary_init,
974         .priority = 100,
975 };
976 #endif
977
978 static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
979                                 unsigned int nr_irqs, void *arg)
980 {
981         int i, ret;
982         irq_hw_number_t hwirq;
983         unsigned int type = IRQ_TYPE_NONE;
984         struct irq_fwspec *fwspec = arg;
985
986         ret = gic_irq_domain_translate(domain, fwspec, &hwirq, &type);
987         if (ret)
988                 return ret;
989
990         for (i = 0; i < nr_irqs; i++)
991                 gic_irq_domain_map(domain, virq + i, hwirq + i);
992
993         return 0;
994 }
995
996 static const struct irq_domain_ops gic_irq_domain_hierarchy_ops = {
997         .translate = gic_irq_domain_translate,
998         .alloc = gic_irq_domain_alloc,
999         .free = irq_domain_free_irqs_top,
1000 };
1001
1002 static const struct irq_domain_ops gic_irq_domain_ops = {
1003         .map = gic_irq_domain_map,
1004         .unmap = gic_irq_domain_unmap,
1005 };
1006
1007 static void __init __gic_init_bases(unsigned int gic_nr, int irq_start,
1008                            void __iomem *dist_base, void __iomem *cpu_base,
1009                            u32 percpu_offset, struct fwnode_handle *handle)
1010 {
1011         irq_hw_number_t hwirq_base;
1012         struct gic_chip_data *gic;
1013         int gic_irqs, irq_base, i;
1014
1015         BUG_ON(gic_nr >= MAX_GIC_NR);
1016
1017         gic_check_cpu_features();
1018
1019         gic = &gic_data[gic_nr];
1020 #ifdef CONFIG_GIC_NON_BANKED
1021         if (percpu_offset) { /* Frankein-GIC without banked registers... */
1022                 unsigned int cpu;
1023
1024                 gic->dist_base.percpu_base = alloc_percpu(void __iomem *);
1025                 gic->cpu_base.percpu_base = alloc_percpu(void __iomem *);
1026                 if (WARN_ON(!gic->dist_base.percpu_base ||
1027                             !gic->cpu_base.percpu_base)) {
1028                         free_percpu(gic->dist_base.percpu_base);
1029                         free_percpu(gic->cpu_base.percpu_base);
1030                         return;
1031                 }
1032
1033                 for_each_possible_cpu(cpu) {
1034                         u32 mpidr = cpu_logical_map(cpu);
1035                         u32 core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0);
1036                         unsigned long offset = percpu_offset * core_id;
1037                         *per_cpu_ptr(gic->dist_base.percpu_base, cpu) = dist_base + offset;
1038                         *per_cpu_ptr(gic->cpu_base.percpu_base, cpu) = cpu_base + offset;
1039                 }
1040
1041                 gic_set_base_accessor(gic, gic_get_percpu_base);
1042         } else
1043 #endif
1044         {                       /* Normal, sane GIC... */
1045                 WARN(percpu_offset,
1046                      "GIC_NON_BANKED not enabled, ignoring %08x offset!",
1047                      percpu_offset);
1048                 gic->dist_base.common_base = dist_base;
1049                 gic->cpu_base.common_base = cpu_base;
1050                 gic_set_base_accessor(gic, gic_get_common_base);
1051         }
1052
1053         /*
1054          * Find out how many interrupts are supported.
1055          * The GIC only supports up to 1020 interrupt sources.
1056          */
1057         gic_irqs = readl_relaxed(gic_data_dist_base(gic) + GIC_DIST_CTR) & 0x1f;
1058         gic_irqs = (gic_irqs + 1) * 32;
1059         if (gic_irqs > 1020)
1060                 gic_irqs = 1020;
1061         gic->gic_irqs = gic_irqs;
1062
1063         if (handle) {           /* DT/ACPI */
1064                 gic->domain = irq_domain_create_linear(handle, gic_irqs,
1065                                                        &gic_irq_domain_hierarchy_ops,
1066                                                        gic);
1067         } else {                /* Legacy support */
1068                 /*
1069                  * For primary GICs, skip over SGIs.
1070                  * For secondary GICs, skip over PPIs, too.
1071                  */
1072                 if (gic_nr == 0 && (irq_start & 31) > 0) {
1073                         hwirq_base = 16;
1074                         if (irq_start != -1)
1075                                 irq_start = (irq_start & ~31) + 16;
1076                 } else {
1077                         hwirq_base = 32;
1078                 }
1079
1080                 gic_irqs -= hwirq_base; /* calculate # of irqs to allocate */
1081
1082                 irq_base = irq_alloc_descs(irq_start, 16, gic_irqs,
1083                                            numa_node_id());
1084                 if (IS_ERR_VALUE(irq_base)) {
1085                         WARN(1, "Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n",
1086                              irq_start);
1087                         irq_base = irq_start;
1088                 }
1089
1090                 gic->domain = irq_domain_add_legacy(NULL, gic_irqs, irq_base,
1091                                         hwirq_base, &gic_irq_domain_ops, gic);
1092         }
1093
1094         if (WARN_ON(!gic->domain))
1095                 return;
1096
1097         if (gic_nr == 0) {
1098                 /*
1099                  * Initialize the CPU interface map to all CPUs.
1100                  * It will be refined as each CPU probes its ID.
1101                  * This is only necessary for the primary GIC.
1102                  */
1103                 for (i = 0; i < NR_GIC_CPU_IF; i++)
1104                         gic_cpu_map[i] = 0xff;
1105 #ifdef CONFIG_SMP
1106                 set_smp_cross_call(gic_raise_softirq);
1107                 register_cpu_notifier(&gic_cpu_notifier);
1108 #endif
1109                 set_handle_irq(gic_handle_irq);
1110                 if (static_key_true(&supports_deactivate))
1111                         pr_info("GIC: Using split EOI/Deactivate mode\n");
1112         }
1113
1114         gic_dist_init(gic);
1115         gic_cpu_init(gic);
1116         gic_pm_init(gic);
1117 }
1118
1119 void __init gic_init(unsigned int gic_nr, int irq_start,
1120                      void __iomem *dist_base, void __iomem *cpu_base)
1121 {
1122         /*
1123          * Non-DT/ACPI systems won't run a hypervisor, so let's not
1124          * bother with these...
1125          */
1126         static_key_slow_dec(&supports_deactivate);
1127         __gic_init_bases(gic_nr, irq_start, dist_base, cpu_base, 0, NULL);
1128 }
1129
1130 #ifdef CONFIG_OF
1131 static int gic_cnt __initdata;
1132
1133 static bool gic_check_eoimode(struct device_node *node, void __iomem **base)
1134 {
1135         struct resource cpuif_res;
1136
1137         of_address_to_resource(node, 1, &cpuif_res);
1138
1139         if (!is_hyp_mode_available())
1140                 return false;
1141         if (resource_size(&cpuif_res) < SZ_8K)
1142                 return false;
1143         if (resource_size(&cpuif_res) == SZ_128K) {
1144                 u32 val_low, val_high;
1145
1146                 /*
1147                  * Verify that we have the first 4kB of a GIC400
1148                  * aliased over the first 64kB by checking the
1149                  * GICC_IIDR register on both ends.
1150                  */
1151                 val_low = readl_relaxed(*base + GIC_CPU_IDENT);
1152                 val_high = readl_relaxed(*base + GIC_CPU_IDENT + 0xf000);
1153                 if ((val_low & 0xffff0fff) != 0x0202043B ||
1154                     val_low != val_high)
1155                         return false;
1156
1157                 /*
1158                  * Move the base up by 60kB, so that we have a 8kB
1159                  * contiguous region, which allows us to use GICC_DIR
1160                  * at its normal offset. Please pass me that bucket.
1161                  */
1162                 *base += 0xf000;
1163                 cpuif_res.start += 0xf000;
1164                 pr_warn("GIC: Adjusting CPU interface base to %pa",
1165                         &cpuif_res.start);
1166         }
1167
1168         return true;
1169 }
1170
1171 static int __init
1172 gic_of_init(struct device_node *node, struct device_node *parent)
1173 {
1174         void __iomem *cpu_base;
1175         void __iomem *dist_base;
1176         u32 percpu_offset;
1177         int irq;
1178
1179         if (WARN_ON(!node))
1180                 return -ENODEV;
1181
1182         dist_base = of_iomap(node, 0);
1183         WARN(!dist_base, "unable to map gic dist registers\n");
1184
1185         cpu_base = of_iomap(node, 1);
1186         WARN(!cpu_base, "unable to map gic cpu registers\n");
1187
1188         /*
1189          * Disable split EOI/Deactivate if either HYP is not available
1190          * or the CPU interface is too small.
1191          */
1192         if (gic_cnt == 0 && !gic_check_eoimode(node, &cpu_base))
1193                 static_key_slow_dec(&supports_deactivate);
1194
1195         if (of_property_read_u32(node, "cpu-offset", &percpu_offset))
1196                 percpu_offset = 0;
1197
1198         __gic_init_bases(gic_cnt, -1, dist_base, cpu_base, percpu_offset,
1199                          &node->fwnode);
1200         if (!gic_cnt)
1201                 gic_init_physaddr(node);
1202
1203         if (parent) {
1204                 irq = irq_of_parse_and_map(node, 0);
1205                 gic_cascade_irq(gic_cnt, irq);
1206         }
1207
1208         if (IS_ENABLED(CONFIG_ARM_GIC_V2M))
1209                 gicv2m_of_init(node, gic_data[gic_cnt].domain);
1210
1211         gic_cnt++;
1212         return 0;
1213 }
1214 IRQCHIP_DECLARE(gic_400, "arm,gic-400", gic_of_init);
1215 IRQCHIP_DECLARE(arm11mp_gic, "arm,arm11mp-gic", gic_of_init);
1216 IRQCHIP_DECLARE(arm1176jzf_dc_gic, "arm,arm1176jzf-devchip-gic", gic_of_init);
1217 IRQCHIP_DECLARE(cortex_a15_gic, "arm,cortex-a15-gic", gic_of_init);
1218 IRQCHIP_DECLARE(cortex_a9_gic, "arm,cortex-a9-gic", gic_of_init);
1219 IRQCHIP_DECLARE(cortex_a7_gic, "arm,cortex-a7-gic", gic_of_init);
1220 IRQCHIP_DECLARE(msm_8660_qgic, "qcom,msm-8660-qgic", gic_of_init);
1221 IRQCHIP_DECLARE(msm_qgic2, "qcom,msm-qgic2", gic_of_init);
1222 IRQCHIP_DECLARE(pl390, "arm,pl390", gic_of_init);
1223
1224 #endif
1225
1226 #ifdef CONFIG_ACPI
1227 static phys_addr_t cpu_phy_base __initdata;
1228
1229 static int __init
1230 gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
1231                         const unsigned long end)
1232 {
1233         struct acpi_madt_generic_interrupt *processor;
1234         phys_addr_t gic_cpu_base;
1235         static int cpu_base_assigned;
1236
1237         processor = (struct acpi_madt_generic_interrupt *)header;
1238
1239         if (BAD_MADT_GICC_ENTRY(processor, end))
1240                 return -EINVAL;
1241
1242         /*
1243          * There is no support for non-banked GICv1/2 register in ACPI spec.
1244          * All CPU interface addresses have to be the same.
1245          */
1246         gic_cpu_base = processor->base_address;
1247         if (cpu_base_assigned && gic_cpu_base != cpu_phy_base)
1248                 return -EINVAL;
1249
1250         cpu_phy_base = gic_cpu_base;
1251         cpu_base_assigned = 1;
1252         return 0;
1253 }
1254
1255 /* The things you have to do to just *count* something... */
1256 static int __init acpi_dummy_func(struct acpi_subtable_header *header,
1257                                   const unsigned long end)
1258 {
1259         return 0;
1260 }
1261
1262 static bool __init acpi_gic_redist_is_present(void)
1263 {
1264         return acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR,
1265                                      acpi_dummy_func, 0) > 0;
1266 }
1267
1268 static bool __init gic_validate_dist(struct acpi_subtable_header *header,
1269                                      struct acpi_probe_entry *ape)
1270 {
1271         struct acpi_madt_generic_distributor *dist;
1272         dist = (struct acpi_madt_generic_distributor *)header;
1273
1274         return (dist->version == ape->driver_data &&
1275                 (dist->version != ACPI_MADT_GIC_VERSION_NONE ||
1276                  !acpi_gic_redist_is_present()));
1277 }
1278
1279 #define ACPI_GICV2_DIST_MEM_SIZE        (SZ_4K)
1280 #define ACPI_GIC_CPU_IF_MEM_SIZE        (SZ_8K)
1281
1282 static int __init gic_v2_acpi_init(struct acpi_subtable_header *header,
1283                                    const unsigned long end)
1284 {
1285         struct acpi_madt_generic_distributor *dist;
1286         void __iomem *cpu_base, *dist_base;
1287         struct fwnode_handle *domain_handle;
1288         int count;
1289
1290         /* Collect CPU base addresses */
1291         count = acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,
1292                                       gic_acpi_parse_madt_cpu, 0);
1293         if (count <= 0) {
1294                 pr_err("No valid GICC entries exist\n");
1295                 return -EINVAL;
1296         }
1297
1298         cpu_base = ioremap(cpu_phy_base, ACPI_GIC_CPU_IF_MEM_SIZE);
1299         if (!cpu_base) {
1300                 pr_err("Unable to map GICC registers\n");
1301                 return -ENOMEM;
1302         }
1303
1304         dist = (struct acpi_madt_generic_distributor *)header;
1305         dist_base = ioremap(dist->base_address, ACPI_GICV2_DIST_MEM_SIZE);
1306         if (!dist_base) {
1307                 pr_err("Unable to map GICD registers\n");
1308                 iounmap(cpu_base);
1309                 return -ENOMEM;
1310         }
1311
1312         /*
1313          * Disable split EOI/Deactivate if HYP is not available. ACPI
1314          * guarantees that we'll always have a GICv2, so the CPU
1315          * interface will always be the right size.
1316          */
1317         if (!is_hyp_mode_available())
1318                 static_key_slow_dec(&supports_deactivate);
1319
1320         /*
1321          * Initialize GIC instance zero (no multi-GIC support).
1322          */
1323         domain_handle = irq_domain_alloc_fwnode(dist_base);
1324         if (!domain_handle) {
1325                 pr_err("Unable to allocate domain handle\n");
1326                 iounmap(cpu_base);
1327                 iounmap(dist_base);
1328                 return -ENOMEM;
1329         }
1330
1331         __gic_init_bases(0, -1, dist_base, cpu_base, 0, domain_handle);
1332
1333         acpi_set_irq_model(ACPI_IRQ_MODEL_GIC, domain_handle);
1334         return 0;
1335 }
1336 IRQCHIP_ACPI_DECLARE(gic_v2, ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR,
1337                      gic_validate_dist, ACPI_MADT_GIC_VERSION_V2,
1338                      gic_v2_acpi_init);
1339 IRQCHIP_ACPI_DECLARE(gic_v2_maybe, ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR,
1340                      gic_validate_dist, ACPI_MADT_GIC_VERSION_NONE,
1341                      gic_v2_acpi_init);
1342 #endif