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