PCI/ERR: Avoid negated conditional for clarity
[linux-2.6-microblaze.git] / drivers / irqchip / irq-gic-v3-its.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2013-2017 ARM Limited, All Rights Reserved.
4  * Author: Marc Zyngier <marc.zyngier@arm.com>
5  */
6
7 #include <linux/acpi.h>
8 #include <linux/acpi_iort.h>
9 #include <linux/bitfield.h>
10 #include <linux/bitmap.h>
11 #include <linux/cpu.h>
12 #include <linux/crash_dump.h>
13 #include <linux/delay.h>
14 #include <linux/dma-iommu.h>
15 #include <linux/efi.h>
16 #include <linux/interrupt.h>
17 #include <linux/iopoll.h>
18 #include <linux/irqdomain.h>
19 #include <linux/list.h>
20 #include <linux/log2.h>
21 #include <linux/memblock.h>
22 #include <linux/mm.h>
23 #include <linux/msi.h>
24 #include <linux/of.h>
25 #include <linux/of_address.h>
26 #include <linux/of_irq.h>
27 #include <linux/of_pci.h>
28 #include <linux/of_platform.h>
29 #include <linux/percpu.h>
30 #include <linux/slab.h>
31 #include <linux/syscore_ops.h>
32
33 #include <linux/irqchip.h>
34 #include <linux/irqchip/arm-gic-v3.h>
35 #include <linux/irqchip/arm-gic-v4.h>
36
37 #include <asm/cputype.h>
38 #include <asm/exception.h>
39
40 #include "irq-gic-common.h"
41
42 #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING           (1ULL << 0)
43 #define ITS_FLAGS_WORKAROUND_CAVIUM_22375       (1ULL << 1)
44 #define ITS_FLAGS_WORKAROUND_CAVIUM_23144       (1ULL << 2)
45 #define ITS_FLAGS_SAVE_SUSPEND_STATE            (1ULL << 3)
46
47 #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING     (1 << 0)
48 #define RDIST_FLAGS_RD_TABLES_PREALLOCATED      (1 << 1)
49
50 static u32 lpi_id_bits;
51
52 /*
53  * We allocate memory for PROPBASE to cover 2 ^ lpi_id_bits LPIs to
54  * deal with (one configuration byte per interrupt). PENDBASE has to
55  * be 64kB aligned (one bit per LPI, plus 8192 bits for SPI/PPI/SGI).
56  */
57 #define LPI_NRBITS              lpi_id_bits
58 #define LPI_PROPBASE_SZ         ALIGN(BIT(LPI_NRBITS), SZ_64K)
59 #define LPI_PENDBASE_SZ         ALIGN(BIT(LPI_NRBITS) / 8, SZ_64K)
60
61 #define LPI_PROP_DEFAULT_PRIO   GICD_INT_DEF_PRI
62
63 /*
64  * Collection structure - just an ID, and a redistributor address to
65  * ping. We use one per CPU as a bag of interrupts assigned to this
66  * CPU.
67  */
68 struct its_collection {
69         u64                     target_address;
70         u16                     col_id;
71 };
72
73 /*
74  * The ITS_BASER structure - contains memory information, cached
75  * value of BASER register configuration and ITS page size.
76  */
77 struct its_baser {
78         void            *base;
79         u64             val;
80         u32             order;
81         u32             psz;
82 };
83
84 struct its_device;
85
86 /*
87  * The ITS structure - contains most of the infrastructure, with the
88  * top-level MSI domain, the command queue, the collections, and the
89  * list of devices writing to it.
90  *
91  * dev_alloc_lock has to be taken for device allocations, while the
92  * spinlock must be taken to parse data structures such as the device
93  * list.
94  */
95 struct its_node {
96         raw_spinlock_t          lock;
97         struct mutex            dev_alloc_lock;
98         struct list_head        entry;
99         void __iomem            *base;
100         void __iomem            *sgir_base;
101         phys_addr_t             phys_base;
102         struct its_cmd_block    *cmd_base;
103         struct its_cmd_block    *cmd_write;
104         struct its_baser        tables[GITS_BASER_NR_REGS];
105         struct its_collection   *collections;
106         struct fwnode_handle    *fwnode_handle;
107         u64                     (*get_msi_base)(struct its_device *its_dev);
108         u64                     typer;
109         u64                     cbaser_save;
110         u32                     ctlr_save;
111         u32                     mpidr;
112         struct list_head        its_device_list;
113         u64                     flags;
114         unsigned long           list_nr;
115         int                     numa_node;
116         unsigned int            msi_domain_flags;
117         u32                     pre_its_base; /* for Socionext Synquacer */
118         int                     vlpi_redist_offset;
119 };
120
121 #define is_v4(its)              (!!((its)->typer & GITS_TYPER_VLPIS))
122 #define is_v4_1(its)            (!!((its)->typer & GITS_TYPER_VMAPP))
123 #define device_ids(its)         (FIELD_GET(GITS_TYPER_DEVBITS, (its)->typer) + 1)
124
125 #define ITS_ITT_ALIGN           SZ_256
126
127 /* The maximum number of VPEID bits supported by VLPI commands */
128 #define ITS_MAX_VPEID_BITS                                              \
129         ({                                                              \
130                 int nvpeid = 16;                                        \
131                 if (gic_rdists->has_rvpeid &&                           \
132                     gic_rdists->gicd_typer2 & GICD_TYPER2_VIL)          \
133                         nvpeid = 1 + (gic_rdists->gicd_typer2 &         \
134                                       GICD_TYPER2_VID);                 \
135                                                                         \
136                 nvpeid;                                                 \
137         })
138 #define ITS_MAX_VPEID           (1 << (ITS_MAX_VPEID_BITS))
139
140 /* Convert page order to size in bytes */
141 #define PAGE_ORDER_TO_SIZE(o)   (PAGE_SIZE << (o))
142
143 struct event_lpi_map {
144         unsigned long           *lpi_map;
145         u16                     *col_map;
146         irq_hw_number_t         lpi_base;
147         int                     nr_lpis;
148         raw_spinlock_t          vlpi_lock;
149         struct its_vm           *vm;
150         struct its_vlpi_map     *vlpi_maps;
151         int                     nr_vlpis;
152 };
153
154 /*
155  * The ITS view of a device - belongs to an ITS, owns an interrupt
156  * translation table, and a list of interrupts.  If it some of its
157  * LPIs are injected into a guest (GICv4), the event_map.vm field
158  * indicates which one.
159  */
160 struct its_device {
161         struct list_head        entry;
162         struct its_node         *its;
163         struct event_lpi_map    event_map;
164         void                    *itt;
165         u32                     nr_ites;
166         u32                     device_id;
167         bool                    shared;
168 };
169
170 static struct {
171         raw_spinlock_t          lock;
172         struct its_device       *dev;
173         struct its_vpe          **vpes;
174         int                     next_victim;
175 } vpe_proxy;
176
177 struct cpu_lpi_count {
178         atomic_t        managed;
179         atomic_t        unmanaged;
180 };
181
182 static DEFINE_PER_CPU(struct cpu_lpi_count, cpu_lpi_count);
183
184 static LIST_HEAD(its_nodes);
185 static DEFINE_RAW_SPINLOCK(its_lock);
186 static struct rdists *gic_rdists;
187 static struct irq_domain *its_parent;
188
189 static unsigned long its_list_map;
190 static u16 vmovp_seq_num;
191 static DEFINE_RAW_SPINLOCK(vmovp_lock);
192
193 static DEFINE_IDA(its_vpeid_ida);
194
195 #define gic_data_rdist()                (raw_cpu_ptr(gic_rdists->rdist))
196 #define gic_data_rdist_cpu(cpu)         (per_cpu_ptr(gic_rdists->rdist, cpu))
197 #define gic_data_rdist_rd_base()        (gic_data_rdist()->rd_base)
198 #define gic_data_rdist_vlpi_base()      (gic_data_rdist_rd_base() + SZ_128K)
199
200 /*
201  * Skip ITSs that have no vLPIs mapped, unless we're on GICv4.1, as we
202  * always have vSGIs mapped.
203  */
204 static bool require_its_list_vmovp(struct its_vm *vm, struct its_node *its)
205 {
206         return (gic_rdists->has_rvpeid || vm->vlpi_count[its->list_nr]);
207 }
208
209 static u16 get_its_list(struct its_vm *vm)
210 {
211         struct its_node *its;
212         unsigned long its_list = 0;
213
214         list_for_each_entry(its, &its_nodes, entry) {
215                 if (!is_v4(its))
216                         continue;
217
218                 if (require_its_list_vmovp(vm, its))
219                         __set_bit(its->list_nr, &its_list);
220         }
221
222         return (u16)its_list;
223 }
224
225 static inline u32 its_get_event_id(struct irq_data *d)
226 {
227         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
228         return d->hwirq - its_dev->event_map.lpi_base;
229 }
230
231 static struct its_collection *dev_event_to_col(struct its_device *its_dev,
232                                                u32 event)
233 {
234         struct its_node *its = its_dev->its;
235
236         return its->collections + its_dev->event_map.col_map[event];
237 }
238
239 static struct its_vlpi_map *dev_event_to_vlpi_map(struct its_device *its_dev,
240                                                u32 event)
241 {
242         if (WARN_ON_ONCE(event >= its_dev->event_map.nr_lpis))
243                 return NULL;
244
245         return &its_dev->event_map.vlpi_maps[event];
246 }
247
248 static struct its_vlpi_map *get_vlpi_map(struct irq_data *d)
249 {
250         if (irqd_is_forwarded_to_vcpu(d)) {
251                 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
252                 u32 event = its_get_event_id(d);
253
254                 return dev_event_to_vlpi_map(its_dev, event);
255         }
256
257         return NULL;
258 }
259
260 static int vpe_to_cpuid_lock(struct its_vpe *vpe, unsigned long *flags)
261 {
262         raw_spin_lock_irqsave(&vpe->vpe_lock, *flags);
263         return vpe->col_idx;
264 }
265
266 static void vpe_to_cpuid_unlock(struct its_vpe *vpe, unsigned long flags)
267 {
268         raw_spin_unlock_irqrestore(&vpe->vpe_lock, flags);
269 }
270
271 static int irq_to_cpuid_lock(struct irq_data *d, unsigned long *flags)
272 {
273         struct its_vlpi_map *map = get_vlpi_map(d);
274         int cpu;
275
276         if (map) {
277                 cpu = vpe_to_cpuid_lock(map->vpe, flags);
278         } else {
279                 /* Physical LPIs are already locked via the irq_desc lock */
280                 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
281                 cpu = its_dev->event_map.col_map[its_get_event_id(d)];
282                 /* Keep GCC quiet... */
283                 *flags = 0;
284         }
285
286         return cpu;
287 }
288
289 static void irq_to_cpuid_unlock(struct irq_data *d, unsigned long flags)
290 {
291         struct its_vlpi_map *map = get_vlpi_map(d);
292
293         if (map)
294                 vpe_to_cpuid_unlock(map->vpe, flags);
295 }
296
297 static struct its_collection *valid_col(struct its_collection *col)
298 {
299         if (WARN_ON_ONCE(col->target_address & GENMASK_ULL(15, 0)))
300                 return NULL;
301
302         return col;
303 }
304
305 static struct its_vpe *valid_vpe(struct its_node *its, struct its_vpe *vpe)
306 {
307         if (valid_col(its->collections + vpe->col_idx))
308                 return vpe;
309
310         return NULL;
311 }
312
313 /*
314  * ITS command descriptors - parameters to be encoded in a command
315  * block.
316  */
317 struct its_cmd_desc {
318         union {
319                 struct {
320                         struct its_device *dev;
321                         u32 event_id;
322                 } its_inv_cmd;
323
324                 struct {
325                         struct its_device *dev;
326                         u32 event_id;
327                 } its_clear_cmd;
328
329                 struct {
330                         struct its_device *dev;
331                         u32 event_id;
332                 } its_int_cmd;
333
334                 struct {
335                         struct its_device *dev;
336                         int valid;
337                 } its_mapd_cmd;
338
339                 struct {
340                         struct its_collection *col;
341                         int valid;
342                 } its_mapc_cmd;
343
344                 struct {
345                         struct its_device *dev;
346                         u32 phys_id;
347                         u32 event_id;
348                 } its_mapti_cmd;
349
350                 struct {
351                         struct its_device *dev;
352                         struct its_collection *col;
353                         u32 event_id;
354                 } its_movi_cmd;
355
356                 struct {
357                         struct its_device *dev;
358                         u32 event_id;
359                 } its_discard_cmd;
360
361                 struct {
362                         struct its_collection *col;
363                 } its_invall_cmd;
364
365                 struct {
366                         struct its_vpe *vpe;
367                 } its_vinvall_cmd;
368
369                 struct {
370                         struct its_vpe *vpe;
371                         struct its_collection *col;
372                         bool valid;
373                 } its_vmapp_cmd;
374
375                 struct {
376                         struct its_vpe *vpe;
377                         struct its_device *dev;
378                         u32 virt_id;
379                         u32 event_id;
380                         bool db_enabled;
381                 } its_vmapti_cmd;
382
383                 struct {
384                         struct its_vpe *vpe;
385                         struct its_device *dev;
386                         u32 event_id;
387                         bool db_enabled;
388                 } its_vmovi_cmd;
389
390                 struct {
391                         struct its_vpe *vpe;
392                         struct its_collection *col;
393                         u16 seq_num;
394                         u16 its_list;
395                 } its_vmovp_cmd;
396
397                 struct {
398                         struct its_vpe *vpe;
399                 } its_invdb_cmd;
400
401                 struct {
402                         struct its_vpe *vpe;
403                         u8 sgi;
404                         u8 priority;
405                         bool enable;
406                         bool group;
407                         bool clear;
408                 } its_vsgi_cmd;
409         };
410 };
411
412 /*
413  * The ITS command block, which is what the ITS actually parses.
414  */
415 struct its_cmd_block {
416         union {
417                 u64     raw_cmd[4];
418                 __le64  raw_cmd_le[4];
419         };
420 };
421
422 #define ITS_CMD_QUEUE_SZ                SZ_64K
423 #define ITS_CMD_QUEUE_NR_ENTRIES        (ITS_CMD_QUEUE_SZ / sizeof(struct its_cmd_block))
424
425 typedef struct its_collection *(*its_cmd_builder_t)(struct its_node *,
426                                                     struct its_cmd_block *,
427                                                     struct its_cmd_desc *);
428
429 typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_node *,
430                                               struct its_cmd_block *,
431                                               struct its_cmd_desc *);
432
433 static void its_mask_encode(u64 *raw_cmd, u64 val, int h, int l)
434 {
435         u64 mask = GENMASK_ULL(h, l);
436         *raw_cmd &= ~mask;
437         *raw_cmd |= (val << l) & mask;
438 }
439
440 static void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr)
441 {
442         its_mask_encode(&cmd->raw_cmd[0], cmd_nr, 7, 0);
443 }
444
445 static void its_encode_devid(struct its_cmd_block *cmd, u32 devid)
446 {
447         its_mask_encode(&cmd->raw_cmd[0], devid, 63, 32);
448 }
449
450 static void its_encode_event_id(struct its_cmd_block *cmd, u32 id)
451 {
452         its_mask_encode(&cmd->raw_cmd[1], id, 31, 0);
453 }
454
455 static void its_encode_phys_id(struct its_cmd_block *cmd, u32 phys_id)
456 {
457         its_mask_encode(&cmd->raw_cmd[1], phys_id, 63, 32);
458 }
459
460 static void its_encode_size(struct its_cmd_block *cmd, u8 size)
461 {
462         its_mask_encode(&cmd->raw_cmd[1], size, 4, 0);
463 }
464
465 static void its_encode_itt(struct its_cmd_block *cmd, u64 itt_addr)
466 {
467         its_mask_encode(&cmd->raw_cmd[2], itt_addr >> 8, 51, 8);
468 }
469
470 static void its_encode_valid(struct its_cmd_block *cmd, int valid)
471 {
472         its_mask_encode(&cmd->raw_cmd[2], !!valid, 63, 63);
473 }
474
475 static void its_encode_target(struct its_cmd_block *cmd, u64 target_addr)
476 {
477         its_mask_encode(&cmd->raw_cmd[2], target_addr >> 16, 51, 16);
478 }
479
480 static void its_encode_collection(struct its_cmd_block *cmd, u16 col)
481 {
482         its_mask_encode(&cmd->raw_cmd[2], col, 15, 0);
483 }
484
485 static void its_encode_vpeid(struct its_cmd_block *cmd, u16 vpeid)
486 {
487         its_mask_encode(&cmd->raw_cmd[1], vpeid, 47, 32);
488 }
489
490 static void its_encode_virt_id(struct its_cmd_block *cmd, u32 virt_id)
491 {
492         its_mask_encode(&cmd->raw_cmd[2], virt_id, 31, 0);
493 }
494
495 static void its_encode_db_phys_id(struct its_cmd_block *cmd, u32 db_phys_id)
496 {
497         its_mask_encode(&cmd->raw_cmd[2], db_phys_id, 63, 32);
498 }
499
500 static void its_encode_db_valid(struct its_cmd_block *cmd, bool db_valid)
501 {
502         its_mask_encode(&cmd->raw_cmd[2], db_valid, 0, 0);
503 }
504
505 static void its_encode_seq_num(struct its_cmd_block *cmd, u16 seq_num)
506 {
507         its_mask_encode(&cmd->raw_cmd[0], seq_num, 47, 32);
508 }
509
510 static void its_encode_its_list(struct its_cmd_block *cmd, u16 its_list)
511 {
512         its_mask_encode(&cmd->raw_cmd[1], its_list, 15, 0);
513 }
514
515 static void its_encode_vpt_addr(struct its_cmd_block *cmd, u64 vpt_pa)
516 {
517         its_mask_encode(&cmd->raw_cmd[3], vpt_pa >> 16, 51, 16);
518 }
519
520 static void its_encode_vpt_size(struct its_cmd_block *cmd, u8 vpt_size)
521 {
522         its_mask_encode(&cmd->raw_cmd[3], vpt_size, 4, 0);
523 }
524
525 static void its_encode_vconf_addr(struct its_cmd_block *cmd, u64 vconf_pa)
526 {
527         its_mask_encode(&cmd->raw_cmd[0], vconf_pa >> 16, 51, 16);
528 }
529
530 static void its_encode_alloc(struct its_cmd_block *cmd, bool alloc)
531 {
532         its_mask_encode(&cmd->raw_cmd[0], alloc, 8, 8);
533 }
534
535 static void its_encode_ptz(struct its_cmd_block *cmd, bool ptz)
536 {
537         its_mask_encode(&cmd->raw_cmd[0], ptz, 9, 9);
538 }
539
540 static void its_encode_vmapp_default_db(struct its_cmd_block *cmd,
541                                         u32 vpe_db_lpi)
542 {
543         its_mask_encode(&cmd->raw_cmd[1], vpe_db_lpi, 31, 0);
544 }
545
546 static void its_encode_vmovp_default_db(struct its_cmd_block *cmd,
547                                         u32 vpe_db_lpi)
548 {
549         its_mask_encode(&cmd->raw_cmd[3], vpe_db_lpi, 31, 0);
550 }
551
552 static void its_encode_db(struct its_cmd_block *cmd, bool db)
553 {
554         its_mask_encode(&cmd->raw_cmd[2], db, 63, 63);
555 }
556
557 static void its_encode_sgi_intid(struct its_cmd_block *cmd, u8 sgi)
558 {
559         its_mask_encode(&cmd->raw_cmd[0], sgi, 35, 32);
560 }
561
562 static void its_encode_sgi_priority(struct its_cmd_block *cmd, u8 prio)
563 {
564         its_mask_encode(&cmd->raw_cmd[0], prio >> 4, 23, 20);
565 }
566
567 static void its_encode_sgi_group(struct its_cmd_block *cmd, bool grp)
568 {
569         its_mask_encode(&cmd->raw_cmd[0], grp, 10, 10);
570 }
571
572 static void its_encode_sgi_clear(struct its_cmd_block *cmd, bool clr)
573 {
574         its_mask_encode(&cmd->raw_cmd[0], clr, 9, 9);
575 }
576
577 static void its_encode_sgi_enable(struct its_cmd_block *cmd, bool en)
578 {
579         its_mask_encode(&cmd->raw_cmd[0], en, 8, 8);
580 }
581
582 static inline void its_fixup_cmd(struct its_cmd_block *cmd)
583 {
584         /* Let's fixup BE commands */
585         cmd->raw_cmd_le[0] = cpu_to_le64(cmd->raw_cmd[0]);
586         cmd->raw_cmd_le[1] = cpu_to_le64(cmd->raw_cmd[1]);
587         cmd->raw_cmd_le[2] = cpu_to_le64(cmd->raw_cmd[2]);
588         cmd->raw_cmd_le[3] = cpu_to_le64(cmd->raw_cmd[3]);
589 }
590
591 static struct its_collection *its_build_mapd_cmd(struct its_node *its,
592                                                  struct its_cmd_block *cmd,
593                                                  struct its_cmd_desc *desc)
594 {
595         unsigned long itt_addr;
596         u8 size = ilog2(desc->its_mapd_cmd.dev->nr_ites);
597
598         itt_addr = virt_to_phys(desc->its_mapd_cmd.dev->itt);
599         itt_addr = ALIGN(itt_addr, ITS_ITT_ALIGN);
600
601         its_encode_cmd(cmd, GITS_CMD_MAPD);
602         its_encode_devid(cmd, desc->its_mapd_cmd.dev->device_id);
603         its_encode_size(cmd, size - 1);
604         its_encode_itt(cmd, itt_addr);
605         its_encode_valid(cmd, desc->its_mapd_cmd.valid);
606
607         its_fixup_cmd(cmd);
608
609         return NULL;
610 }
611
612 static struct its_collection *its_build_mapc_cmd(struct its_node *its,
613                                                  struct its_cmd_block *cmd,
614                                                  struct its_cmd_desc *desc)
615 {
616         its_encode_cmd(cmd, GITS_CMD_MAPC);
617         its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
618         its_encode_target(cmd, desc->its_mapc_cmd.col->target_address);
619         its_encode_valid(cmd, desc->its_mapc_cmd.valid);
620
621         its_fixup_cmd(cmd);
622
623         return desc->its_mapc_cmd.col;
624 }
625
626 static struct its_collection *its_build_mapti_cmd(struct its_node *its,
627                                                   struct its_cmd_block *cmd,
628                                                   struct its_cmd_desc *desc)
629 {
630         struct its_collection *col;
631
632         col = dev_event_to_col(desc->its_mapti_cmd.dev,
633                                desc->its_mapti_cmd.event_id);
634
635         its_encode_cmd(cmd, GITS_CMD_MAPTI);
636         its_encode_devid(cmd, desc->its_mapti_cmd.dev->device_id);
637         its_encode_event_id(cmd, desc->its_mapti_cmd.event_id);
638         its_encode_phys_id(cmd, desc->its_mapti_cmd.phys_id);
639         its_encode_collection(cmd, col->col_id);
640
641         its_fixup_cmd(cmd);
642
643         return valid_col(col);
644 }
645
646 static struct its_collection *its_build_movi_cmd(struct its_node *its,
647                                                  struct its_cmd_block *cmd,
648                                                  struct its_cmd_desc *desc)
649 {
650         struct its_collection *col;
651
652         col = dev_event_to_col(desc->its_movi_cmd.dev,
653                                desc->its_movi_cmd.event_id);
654
655         its_encode_cmd(cmd, GITS_CMD_MOVI);
656         its_encode_devid(cmd, desc->its_movi_cmd.dev->device_id);
657         its_encode_event_id(cmd, desc->its_movi_cmd.event_id);
658         its_encode_collection(cmd, desc->its_movi_cmd.col->col_id);
659
660         its_fixup_cmd(cmd);
661
662         return valid_col(col);
663 }
664
665 static struct its_collection *its_build_discard_cmd(struct its_node *its,
666                                                     struct its_cmd_block *cmd,
667                                                     struct its_cmd_desc *desc)
668 {
669         struct its_collection *col;
670
671         col = dev_event_to_col(desc->its_discard_cmd.dev,
672                                desc->its_discard_cmd.event_id);
673
674         its_encode_cmd(cmd, GITS_CMD_DISCARD);
675         its_encode_devid(cmd, desc->its_discard_cmd.dev->device_id);
676         its_encode_event_id(cmd, desc->its_discard_cmd.event_id);
677
678         its_fixup_cmd(cmd);
679
680         return valid_col(col);
681 }
682
683 static struct its_collection *its_build_inv_cmd(struct its_node *its,
684                                                 struct its_cmd_block *cmd,
685                                                 struct its_cmd_desc *desc)
686 {
687         struct its_collection *col;
688
689         col = dev_event_to_col(desc->its_inv_cmd.dev,
690                                desc->its_inv_cmd.event_id);
691
692         its_encode_cmd(cmd, GITS_CMD_INV);
693         its_encode_devid(cmd, desc->its_inv_cmd.dev->device_id);
694         its_encode_event_id(cmd, desc->its_inv_cmd.event_id);
695
696         its_fixup_cmd(cmd);
697
698         return valid_col(col);
699 }
700
701 static struct its_collection *its_build_int_cmd(struct its_node *its,
702                                                 struct its_cmd_block *cmd,
703                                                 struct its_cmd_desc *desc)
704 {
705         struct its_collection *col;
706
707         col = dev_event_to_col(desc->its_int_cmd.dev,
708                                desc->its_int_cmd.event_id);
709
710         its_encode_cmd(cmd, GITS_CMD_INT);
711         its_encode_devid(cmd, desc->its_int_cmd.dev->device_id);
712         its_encode_event_id(cmd, desc->its_int_cmd.event_id);
713
714         its_fixup_cmd(cmd);
715
716         return valid_col(col);
717 }
718
719 static struct its_collection *its_build_clear_cmd(struct its_node *its,
720                                                   struct its_cmd_block *cmd,
721                                                   struct its_cmd_desc *desc)
722 {
723         struct its_collection *col;
724
725         col = dev_event_to_col(desc->its_clear_cmd.dev,
726                                desc->its_clear_cmd.event_id);
727
728         its_encode_cmd(cmd, GITS_CMD_CLEAR);
729         its_encode_devid(cmd, desc->its_clear_cmd.dev->device_id);
730         its_encode_event_id(cmd, desc->its_clear_cmd.event_id);
731
732         its_fixup_cmd(cmd);
733
734         return valid_col(col);
735 }
736
737 static struct its_collection *its_build_invall_cmd(struct its_node *its,
738                                                    struct its_cmd_block *cmd,
739                                                    struct its_cmd_desc *desc)
740 {
741         its_encode_cmd(cmd, GITS_CMD_INVALL);
742         its_encode_collection(cmd, desc->its_invall_cmd.col->col_id);
743
744         its_fixup_cmd(cmd);
745
746         return NULL;
747 }
748
749 static struct its_vpe *its_build_vinvall_cmd(struct its_node *its,
750                                              struct its_cmd_block *cmd,
751                                              struct its_cmd_desc *desc)
752 {
753         its_encode_cmd(cmd, GITS_CMD_VINVALL);
754         its_encode_vpeid(cmd, desc->its_vinvall_cmd.vpe->vpe_id);
755
756         its_fixup_cmd(cmd);
757
758         return valid_vpe(its, desc->its_vinvall_cmd.vpe);
759 }
760
761 static struct its_vpe *its_build_vmapp_cmd(struct its_node *its,
762                                            struct its_cmd_block *cmd,
763                                            struct its_cmd_desc *desc)
764 {
765         unsigned long vpt_addr, vconf_addr;
766         u64 target;
767         bool alloc;
768
769         its_encode_cmd(cmd, GITS_CMD_VMAPP);
770         its_encode_vpeid(cmd, desc->its_vmapp_cmd.vpe->vpe_id);
771         its_encode_valid(cmd, desc->its_vmapp_cmd.valid);
772
773         if (!desc->its_vmapp_cmd.valid) {
774                 if (is_v4_1(its)) {
775                         alloc = !atomic_dec_return(&desc->its_vmapp_cmd.vpe->vmapp_count);
776                         its_encode_alloc(cmd, alloc);
777                 }
778
779                 goto out;
780         }
781
782         vpt_addr = virt_to_phys(page_address(desc->its_vmapp_cmd.vpe->vpt_page));
783         target = desc->its_vmapp_cmd.col->target_address + its->vlpi_redist_offset;
784
785         its_encode_target(cmd, target);
786         its_encode_vpt_addr(cmd, vpt_addr);
787         its_encode_vpt_size(cmd, LPI_NRBITS - 1);
788
789         if (!is_v4_1(its))
790                 goto out;
791
792         vconf_addr = virt_to_phys(page_address(desc->its_vmapp_cmd.vpe->its_vm->vprop_page));
793
794         alloc = !atomic_fetch_inc(&desc->its_vmapp_cmd.vpe->vmapp_count);
795
796         its_encode_alloc(cmd, alloc);
797
798         /* We can only signal PTZ when alloc==1. Why do we have two bits? */
799         its_encode_ptz(cmd, alloc);
800         its_encode_vconf_addr(cmd, vconf_addr);
801         its_encode_vmapp_default_db(cmd, desc->its_vmapp_cmd.vpe->vpe_db_lpi);
802
803 out:
804         its_fixup_cmd(cmd);
805
806         return valid_vpe(its, desc->its_vmapp_cmd.vpe);
807 }
808
809 static struct its_vpe *its_build_vmapti_cmd(struct its_node *its,
810                                             struct its_cmd_block *cmd,
811                                             struct its_cmd_desc *desc)
812 {
813         u32 db;
814
815         if (!is_v4_1(its) && desc->its_vmapti_cmd.db_enabled)
816                 db = desc->its_vmapti_cmd.vpe->vpe_db_lpi;
817         else
818                 db = 1023;
819
820         its_encode_cmd(cmd, GITS_CMD_VMAPTI);
821         its_encode_devid(cmd, desc->its_vmapti_cmd.dev->device_id);
822         its_encode_vpeid(cmd, desc->its_vmapti_cmd.vpe->vpe_id);
823         its_encode_event_id(cmd, desc->its_vmapti_cmd.event_id);
824         its_encode_db_phys_id(cmd, db);
825         its_encode_virt_id(cmd, desc->its_vmapti_cmd.virt_id);
826
827         its_fixup_cmd(cmd);
828
829         return valid_vpe(its, desc->its_vmapti_cmd.vpe);
830 }
831
832 static struct its_vpe *its_build_vmovi_cmd(struct its_node *its,
833                                            struct its_cmd_block *cmd,
834                                            struct its_cmd_desc *desc)
835 {
836         u32 db;
837
838         if (!is_v4_1(its) && desc->its_vmovi_cmd.db_enabled)
839                 db = desc->its_vmovi_cmd.vpe->vpe_db_lpi;
840         else
841                 db = 1023;
842
843         its_encode_cmd(cmd, GITS_CMD_VMOVI);
844         its_encode_devid(cmd, desc->its_vmovi_cmd.dev->device_id);
845         its_encode_vpeid(cmd, desc->its_vmovi_cmd.vpe->vpe_id);
846         its_encode_event_id(cmd, desc->its_vmovi_cmd.event_id);
847         its_encode_db_phys_id(cmd, db);
848         its_encode_db_valid(cmd, true);
849
850         its_fixup_cmd(cmd);
851
852         return valid_vpe(its, desc->its_vmovi_cmd.vpe);
853 }
854
855 static struct its_vpe *its_build_vmovp_cmd(struct its_node *its,
856                                            struct its_cmd_block *cmd,
857                                            struct its_cmd_desc *desc)
858 {
859         u64 target;
860
861         target = desc->its_vmovp_cmd.col->target_address + its->vlpi_redist_offset;
862         its_encode_cmd(cmd, GITS_CMD_VMOVP);
863         its_encode_seq_num(cmd, desc->its_vmovp_cmd.seq_num);
864         its_encode_its_list(cmd, desc->its_vmovp_cmd.its_list);
865         its_encode_vpeid(cmd, desc->its_vmovp_cmd.vpe->vpe_id);
866         its_encode_target(cmd, target);
867
868         if (is_v4_1(its)) {
869                 its_encode_db(cmd, true);
870                 its_encode_vmovp_default_db(cmd, desc->its_vmovp_cmd.vpe->vpe_db_lpi);
871         }
872
873         its_fixup_cmd(cmd);
874
875         return valid_vpe(its, desc->its_vmovp_cmd.vpe);
876 }
877
878 static struct its_vpe *its_build_vinv_cmd(struct its_node *its,
879                                           struct its_cmd_block *cmd,
880                                           struct its_cmd_desc *desc)
881 {
882         struct its_vlpi_map *map;
883
884         map = dev_event_to_vlpi_map(desc->its_inv_cmd.dev,
885                                     desc->its_inv_cmd.event_id);
886
887         its_encode_cmd(cmd, GITS_CMD_INV);
888         its_encode_devid(cmd, desc->its_inv_cmd.dev->device_id);
889         its_encode_event_id(cmd, desc->its_inv_cmd.event_id);
890
891         its_fixup_cmd(cmd);
892
893         return valid_vpe(its, map->vpe);
894 }
895
896 static struct its_vpe *its_build_vint_cmd(struct its_node *its,
897                                           struct its_cmd_block *cmd,
898                                           struct its_cmd_desc *desc)
899 {
900         struct its_vlpi_map *map;
901
902         map = dev_event_to_vlpi_map(desc->its_int_cmd.dev,
903                                     desc->its_int_cmd.event_id);
904
905         its_encode_cmd(cmd, GITS_CMD_INT);
906         its_encode_devid(cmd, desc->its_int_cmd.dev->device_id);
907         its_encode_event_id(cmd, desc->its_int_cmd.event_id);
908
909         its_fixup_cmd(cmd);
910
911         return valid_vpe(its, map->vpe);
912 }
913
914 static struct its_vpe *its_build_vclear_cmd(struct its_node *its,
915                                             struct its_cmd_block *cmd,
916                                             struct its_cmd_desc *desc)
917 {
918         struct its_vlpi_map *map;
919
920         map = dev_event_to_vlpi_map(desc->its_clear_cmd.dev,
921                                     desc->its_clear_cmd.event_id);
922
923         its_encode_cmd(cmd, GITS_CMD_CLEAR);
924         its_encode_devid(cmd, desc->its_clear_cmd.dev->device_id);
925         its_encode_event_id(cmd, desc->its_clear_cmd.event_id);
926
927         its_fixup_cmd(cmd);
928
929         return valid_vpe(its, map->vpe);
930 }
931
932 static struct its_vpe *its_build_invdb_cmd(struct its_node *its,
933                                            struct its_cmd_block *cmd,
934                                            struct its_cmd_desc *desc)
935 {
936         if (WARN_ON(!is_v4_1(its)))
937                 return NULL;
938
939         its_encode_cmd(cmd, GITS_CMD_INVDB);
940         its_encode_vpeid(cmd, desc->its_invdb_cmd.vpe->vpe_id);
941
942         its_fixup_cmd(cmd);
943
944         return valid_vpe(its, desc->its_invdb_cmd.vpe);
945 }
946
947 static struct its_vpe *its_build_vsgi_cmd(struct its_node *its,
948                                           struct its_cmd_block *cmd,
949                                           struct its_cmd_desc *desc)
950 {
951         if (WARN_ON(!is_v4_1(its)))
952                 return NULL;
953
954         its_encode_cmd(cmd, GITS_CMD_VSGI);
955         its_encode_vpeid(cmd, desc->its_vsgi_cmd.vpe->vpe_id);
956         its_encode_sgi_intid(cmd, desc->its_vsgi_cmd.sgi);
957         its_encode_sgi_priority(cmd, desc->its_vsgi_cmd.priority);
958         its_encode_sgi_group(cmd, desc->its_vsgi_cmd.group);
959         its_encode_sgi_clear(cmd, desc->its_vsgi_cmd.clear);
960         its_encode_sgi_enable(cmd, desc->its_vsgi_cmd.enable);
961
962         its_fixup_cmd(cmd);
963
964         return valid_vpe(its, desc->its_vsgi_cmd.vpe);
965 }
966
967 static u64 its_cmd_ptr_to_offset(struct its_node *its,
968                                  struct its_cmd_block *ptr)
969 {
970         return (ptr - its->cmd_base) * sizeof(*ptr);
971 }
972
973 static int its_queue_full(struct its_node *its)
974 {
975         int widx;
976         int ridx;
977
978         widx = its->cmd_write - its->cmd_base;
979         ridx = readl_relaxed(its->base + GITS_CREADR) / sizeof(struct its_cmd_block);
980
981         /* This is incredibly unlikely to happen, unless the ITS locks up. */
982         if (((widx + 1) % ITS_CMD_QUEUE_NR_ENTRIES) == ridx)
983                 return 1;
984
985         return 0;
986 }
987
988 static struct its_cmd_block *its_allocate_entry(struct its_node *its)
989 {
990         struct its_cmd_block *cmd;
991         u32 count = 1000000;    /* 1s! */
992
993         while (its_queue_full(its)) {
994                 count--;
995                 if (!count) {
996                         pr_err_ratelimited("ITS queue not draining\n");
997                         return NULL;
998                 }
999                 cpu_relax();
1000                 udelay(1);
1001         }
1002
1003         cmd = its->cmd_write++;
1004
1005         /* Handle queue wrapping */
1006         if (its->cmd_write == (its->cmd_base + ITS_CMD_QUEUE_NR_ENTRIES))
1007                 its->cmd_write = its->cmd_base;
1008
1009         /* Clear command  */
1010         cmd->raw_cmd[0] = 0;
1011         cmd->raw_cmd[1] = 0;
1012         cmd->raw_cmd[2] = 0;
1013         cmd->raw_cmd[3] = 0;
1014
1015         return cmd;
1016 }
1017
1018 static struct its_cmd_block *its_post_commands(struct its_node *its)
1019 {
1020         u64 wr = its_cmd_ptr_to_offset(its, its->cmd_write);
1021
1022         writel_relaxed(wr, its->base + GITS_CWRITER);
1023
1024         return its->cmd_write;
1025 }
1026
1027 static void its_flush_cmd(struct its_node *its, struct its_cmd_block *cmd)
1028 {
1029         /*
1030          * Make sure the commands written to memory are observable by
1031          * the ITS.
1032          */
1033         if (its->flags & ITS_FLAGS_CMDQ_NEEDS_FLUSHING)
1034                 gic_flush_dcache_to_poc(cmd, sizeof(*cmd));
1035         else
1036                 dsb(ishst);
1037 }
1038
1039 static int its_wait_for_range_completion(struct its_node *its,
1040                                          u64    prev_idx,
1041                                          struct its_cmd_block *to)
1042 {
1043         u64 rd_idx, to_idx, linear_idx;
1044         u32 count = 1000000;    /* 1s! */
1045
1046         /* Linearize to_idx if the command set has wrapped around */
1047         to_idx = its_cmd_ptr_to_offset(its, to);
1048         if (to_idx < prev_idx)
1049                 to_idx += ITS_CMD_QUEUE_SZ;
1050
1051         linear_idx = prev_idx;
1052
1053         while (1) {
1054                 s64 delta;
1055
1056                 rd_idx = readl_relaxed(its->base + GITS_CREADR);
1057
1058                 /*
1059                  * Compute the read pointer progress, taking the
1060                  * potential wrap-around into account.
1061                  */
1062                 delta = rd_idx - prev_idx;
1063                 if (rd_idx < prev_idx)
1064                         delta += ITS_CMD_QUEUE_SZ;
1065
1066                 linear_idx += delta;
1067                 if (linear_idx >= to_idx)
1068                         break;
1069
1070                 count--;
1071                 if (!count) {
1072                         pr_err_ratelimited("ITS queue timeout (%llu %llu)\n",
1073                                            to_idx, linear_idx);
1074                         return -1;
1075                 }
1076                 prev_idx = rd_idx;
1077                 cpu_relax();
1078                 udelay(1);
1079         }
1080
1081         return 0;
1082 }
1083
1084 /* Warning, macro hell follows */
1085 #define BUILD_SINGLE_CMD_FUNC(name, buildtype, synctype, buildfn)       \
1086 void name(struct its_node *its,                                         \
1087           buildtype builder,                                            \
1088           struct its_cmd_desc *desc)                                    \
1089 {                                                                       \
1090         struct its_cmd_block *cmd, *sync_cmd, *next_cmd;                \
1091         synctype *sync_obj;                                             \
1092         unsigned long flags;                                            \
1093         u64 rd_idx;                                                     \
1094                                                                         \
1095         raw_spin_lock_irqsave(&its->lock, flags);                       \
1096                                                                         \
1097         cmd = its_allocate_entry(its);                                  \
1098         if (!cmd) {             /* We're soooooo screewed... */         \
1099                 raw_spin_unlock_irqrestore(&its->lock, flags);          \
1100                 return;                                                 \
1101         }                                                               \
1102         sync_obj = builder(its, cmd, desc);                             \
1103         its_flush_cmd(its, cmd);                                        \
1104                                                                         \
1105         if (sync_obj) {                                                 \
1106                 sync_cmd = its_allocate_entry(its);                     \
1107                 if (!sync_cmd)                                          \
1108                         goto post;                                      \
1109                                                                         \
1110                 buildfn(its, sync_cmd, sync_obj);                       \
1111                 its_flush_cmd(its, sync_cmd);                           \
1112         }                                                               \
1113                                                                         \
1114 post:                                                                   \
1115         rd_idx = readl_relaxed(its->base + GITS_CREADR);                \
1116         next_cmd = its_post_commands(its);                              \
1117         raw_spin_unlock_irqrestore(&its->lock, flags);                  \
1118                                                                         \
1119         if (its_wait_for_range_completion(its, rd_idx, next_cmd))       \
1120                 pr_err_ratelimited("ITS cmd %ps failed\n", builder);    \
1121 }
1122
1123 static void its_build_sync_cmd(struct its_node *its,
1124                                struct its_cmd_block *sync_cmd,
1125                                struct its_collection *sync_col)
1126 {
1127         its_encode_cmd(sync_cmd, GITS_CMD_SYNC);
1128         its_encode_target(sync_cmd, sync_col->target_address);
1129
1130         its_fixup_cmd(sync_cmd);
1131 }
1132
1133 static BUILD_SINGLE_CMD_FUNC(its_send_single_command, its_cmd_builder_t,
1134                              struct its_collection, its_build_sync_cmd)
1135
1136 static void its_build_vsync_cmd(struct its_node *its,
1137                                 struct its_cmd_block *sync_cmd,
1138                                 struct its_vpe *sync_vpe)
1139 {
1140         its_encode_cmd(sync_cmd, GITS_CMD_VSYNC);
1141         its_encode_vpeid(sync_cmd, sync_vpe->vpe_id);
1142
1143         its_fixup_cmd(sync_cmd);
1144 }
1145
1146 static BUILD_SINGLE_CMD_FUNC(its_send_single_vcommand, its_cmd_vbuilder_t,
1147                              struct its_vpe, its_build_vsync_cmd)
1148
1149 static void its_send_int(struct its_device *dev, u32 event_id)
1150 {
1151         struct its_cmd_desc desc;
1152
1153         desc.its_int_cmd.dev = dev;
1154         desc.its_int_cmd.event_id = event_id;
1155
1156         its_send_single_command(dev->its, its_build_int_cmd, &desc);
1157 }
1158
1159 static void its_send_clear(struct its_device *dev, u32 event_id)
1160 {
1161         struct its_cmd_desc desc;
1162
1163         desc.its_clear_cmd.dev = dev;
1164         desc.its_clear_cmd.event_id = event_id;
1165
1166         its_send_single_command(dev->its, its_build_clear_cmd, &desc);
1167 }
1168
1169 static void its_send_inv(struct its_device *dev, u32 event_id)
1170 {
1171         struct its_cmd_desc desc;
1172
1173         desc.its_inv_cmd.dev = dev;
1174         desc.its_inv_cmd.event_id = event_id;
1175
1176         its_send_single_command(dev->its, its_build_inv_cmd, &desc);
1177 }
1178
1179 static void its_send_mapd(struct its_device *dev, int valid)
1180 {
1181         struct its_cmd_desc desc;
1182
1183         desc.its_mapd_cmd.dev = dev;
1184         desc.its_mapd_cmd.valid = !!valid;
1185
1186         its_send_single_command(dev->its, its_build_mapd_cmd, &desc);
1187 }
1188
1189 static void its_send_mapc(struct its_node *its, struct its_collection *col,
1190                           int valid)
1191 {
1192         struct its_cmd_desc desc;
1193
1194         desc.its_mapc_cmd.col = col;
1195         desc.its_mapc_cmd.valid = !!valid;
1196
1197         its_send_single_command(its, its_build_mapc_cmd, &desc);
1198 }
1199
1200 static void its_send_mapti(struct its_device *dev, u32 irq_id, u32 id)
1201 {
1202         struct its_cmd_desc desc;
1203
1204         desc.its_mapti_cmd.dev = dev;
1205         desc.its_mapti_cmd.phys_id = irq_id;
1206         desc.its_mapti_cmd.event_id = id;
1207
1208         its_send_single_command(dev->its, its_build_mapti_cmd, &desc);
1209 }
1210
1211 static void its_send_movi(struct its_device *dev,
1212                           struct its_collection *col, u32 id)
1213 {
1214         struct its_cmd_desc desc;
1215
1216         desc.its_movi_cmd.dev = dev;
1217         desc.its_movi_cmd.col = col;
1218         desc.its_movi_cmd.event_id = id;
1219
1220         its_send_single_command(dev->its, its_build_movi_cmd, &desc);
1221 }
1222
1223 static void its_send_discard(struct its_device *dev, u32 id)
1224 {
1225         struct its_cmd_desc desc;
1226
1227         desc.its_discard_cmd.dev = dev;
1228         desc.its_discard_cmd.event_id = id;
1229
1230         its_send_single_command(dev->its, its_build_discard_cmd, &desc);
1231 }
1232
1233 static void its_send_invall(struct its_node *its, struct its_collection *col)
1234 {
1235         struct its_cmd_desc desc;
1236
1237         desc.its_invall_cmd.col = col;
1238
1239         its_send_single_command(its, its_build_invall_cmd, &desc);
1240 }
1241
1242 static void its_send_vmapti(struct its_device *dev, u32 id)
1243 {
1244         struct its_vlpi_map *map = dev_event_to_vlpi_map(dev, id);
1245         struct its_cmd_desc desc;
1246
1247         desc.its_vmapti_cmd.vpe = map->vpe;
1248         desc.its_vmapti_cmd.dev = dev;
1249         desc.its_vmapti_cmd.virt_id = map->vintid;
1250         desc.its_vmapti_cmd.event_id = id;
1251         desc.its_vmapti_cmd.db_enabled = map->db_enabled;
1252
1253         its_send_single_vcommand(dev->its, its_build_vmapti_cmd, &desc);
1254 }
1255
1256 static void its_send_vmovi(struct its_device *dev, u32 id)
1257 {
1258         struct its_vlpi_map *map = dev_event_to_vlpi_map(dev, id);
1259         struct its_cmd_desc desc;
1260
1261         desc.its_vmovi_cmd.vpe = map->vpe;
1262         desc.its_vmovi_cmd.dev = dev;
1263         desc.its_vmovi_cmd.event_id = id;
1264         desc.its_vmovi_cmd.db_enabled = map->db_enabled;
1265
1266         its_send_single_vcommand(dev->its, its_build_vmovi_cmd, &desc);
1267 }
1268
1269 static void its_send_vmapp(struct its_node *its,
1270                            struct its_vpe *vpe, bool valid)
1271 {
1272         struct its_cmd_desc desc;
1273
1274         desc.its_vmapp_cmd.vpe = vpe;
1275         desc.its_vmapp_cmd.valid = valid;
1276         desc.its_vmapp_cmd.col = &its->collections[vpe->col_idx];
1277
1278         its_send_single_vcommand(its, its_build_vmapp_cmd, &desc);
1279 }
1280
1281 static void its_send_vmovp(struct its_vpe *vpe)
1282 {
1283         struct its_cmd_desc desc = {};
1284         struct its_node *its;
1285         unsigned long flags;
1286         int col_id = vpe->col_idx;
1287
1288         desc.its_vmovp_cmd.vpe = vpe;
1289
1290         if (!its_list_map) {
1291                 its = list_first_entry(&its_nodes, struct its_node, entry);
1292                 desc.its_vmovp_cmd.col = &its->collections[col_id];
1293                 its_send_single_vcommand(its, its_build_vmovp_cmd, &desc);
1294                 return;
1295         }
1296
1297         /*
1298          * Yet another marvel of the architecture. If using the
1299          * its_list "feature", we need to make sure that all ITSs
1300          * receive all VMOVP commands in the same order. The only way
1301          * to guarantee this is to make vmovp a serialization point.
1302          *
1303          * Wall <-- Head.
1304          */
1305         raw_spin_lock_irqsave(&vmovp_lock, flags);
1306
1307         desc.its_vmovp_cmd.seq_num = vmovp_seq_num++;
1308         desc.its_vmovp_cmd.its_list = get_its_list(vpe->its_vm);
1309
1310         /* Emit VMOVPs */
1311         list_for_each_entry(its, &its_nodes, entry) {
1312                 if (!is_v4(its))
1313                         continue;
1314
1315                 if (!require_its_list_vmovp(vpe->its_vm, its))
1316                         continue;
1317
1318                 desc.its_vmovp_cmd.col = &its->collections[col_id];
1319                 its_send_single_vcommand(its, its_build_vmovp_cmd, &desc);
1320         }
1321
1322         raw_spin_unlock_irqrestore(&vmovp_lock, flags);
1323 }
1324
1325 static void its_send_vinvall(struct its_node *its, struct its_vpe *vpe)
1326 {
1327         struct its_cmd_desc desc;
1328
1329         desc.its_vinvall_cmd.vpe = vpe;
1330         its_send_single_vcommand(its, its_build_vinvall_cmd, &desc);
1331 }
1332
1333 static void its_send_vinv(struct its_device *dev, u32 event_id)
1334 {
1335         struct its_cmd_desc desc;
1336
1337         /*
1338          * There is no real VINV command. This is just a normal INV,
1339          * with a VSYNC instead of a SYNC.
1340          */
1341         desc.its_inv_cmd.dev = dev;
1342         desc.its_inv_cmd.event_id = event_id;
1343
1344         its_send_single_vcommand(dev->its, its_build_vinv_cmd, &desc);
1345 }
1346
1347 static void its_send_vint(struct its_device *dev, u32 event_id)
1348 {
1349         struct its_cmd_desc desc;
1350
1351         /*
1352          * There is no real VINT command. This is just a normal INT,
1353          * with a VSYNC instead of a SYNC.
1354          */
1355         desc.its_int_cmd.dev = dev;
1356         desc.its_int_cmd.event_id = event_id;
1357
1358         its_send_single_vcommand(dev->its, its_build_vint_cmd, &desc);
1359 }
1360
1361 static void its_send_vclear(struct its_device *dev, u32 event_id)
1362 {
1363         struct its_cmd_desc desc;
1364
1365         /*
1366          * There is no real VCLEAR command. This is just a normal CLEAR,
1367          * with a VSYNC instead of a SYNC.
1368          */
1369         desc.its_clear_cmd.dev = dev;
1370         desc.its_clear_cmd.event_id = event_id;
1371
1372         its_send_single_vcommand(dev->its, its_build_vclear_cmd, &desc);
1373 }
1374
1375 static void its_send_invdb(struct its_node *its, struct its_vpe *vpe)
1376 {
1377         struct its_cmd_desc desc;
1378
1379         desc.its_invdb_cmd.vpe = vpe;
1380         its_send_single_vcommand(its, its_build_invdb_cmd, &desc);
1381 }
1382
1383 /*
1384  * irqchip functions - assumes MSI, mostly.
1385  */
1386 static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
1387 {
1388         struct its_vlpi_map *map = get_vlpi_map(d);
1389         irq_hw_number_t hwirq;
1390         void *va;
1391         u8 *cfg;
1392
1393         if (map) {
1394                 va = page_address(map->vm->vprop_page);
1395                 hwirq = map->vintid;
1396
1397                 /* Remember the updated property */
1398                 map->properties &= ~clr;
1399                 map->properties |= set | LPI_PROP_GROUP1;
1400         } else {
1401                 va = gic_rdists->prop_table_va;
1402                 hwirq = d->hwirq;
1403         }
1404
1405         cfg = va + hwirq - 8192;
1406         *cfg &= ~clr;
1407         *cfg |= set | LPI_PROP_GROUP1;
1408
1409         /*
1410          * Make the above write visible to the redistributors.
1411          * And yes, we're flushing exactly: One. Single. Byte.
1412          * Humpf...
1413          */
1414         if (gic_rdists->flags & RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING)
1415                 gic_flush_dcache_to_poc(cfg, sizeof(*cfg));
1416         else
1417                 dsb(ishst);
1418 }
1419
1420 static void wait_for_syncr(void __iomem *rdbase)
1421 {
1422         while (readl_relaxed(rdbase + GICR_SYNCR) & 1)
1423                 cpu_relax();
1424 }
1425
1426 static void direct_lpi_inv(struct irq_data *d)
1427 {
1428         struct its_vlpi_map *map = get_vlpi_map(d);
1429         void __iomem *rdbase;
1430         unsigned long flags;
1431         u64 val;
1432         int cpu;
1433
1434         if (map) {
1435                 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1436
1437                 WARN_ON(!is_v4_1(its_dev->its));
1438
1439                 val  = GICR_INVLPIR_V;
1440                 val |= FIELD_PREP(GICR_INVLPIR_VPEID, map->vpe->vpe_id);
1441                 val |= FIELD_PREP(GICR_INVLPIR_INTID, map->vintid);
1442         } else {
1443                 val = d->hwirq;
1444         }
1445
1446         /* Target the redistributor this LPI is currently routed to */
1447         cpu = irq_to_cpuid_lock(d, &flags);
1448         raw_spin_lock(&gic_data_rdist_cpu(cpu)->rd_lock);
1449         rdbase = per_cpu_ptr(gic_rdists->rdist, cpu)->rd_base;
1450         gic_write_lpir(val, rdbase + GICR_INVLPIR);
1451
1452         wait_for_syncr(rdbase);
1453         raw_spin_unlock(&gic_data_rdist_cpu(cpu)->rd_lock);
1454         irq_to_cpuid_unlock(d, flags);
1455 }
1456
1457 static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
1458 {
1459         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1460
1461         lpi_write_config(d, clr, set);
1462         if (gic_rdists->has_direct_lpi &&
1463             (is_v4_1(its_dev->its) || !irqd_is_forwarded_to_vcpu(d)))
1464                 direct_lpi_inv(d);
1465         else if (!irqd_is_forwarded_to_vcpu(d))
1466                 its_send_inv(its_dev, its_get_event_id(d));
1467         else
1468                 its_send_vinv(its_dev, its_get_event_id(d));
1469 }
1470
1471 static void its_vlpi_set_doorbell(struct irq_data *d, bool enable)
1472 {
1473         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1474         u32 event = its_get_event_id(d);
1475         struct its_vlpi_map *map;
1476
1477         /*
1478          * GICv4.1 does away with the per-LPI nonsense, nothing to do
1479          * here.
1480          */
1481         if (is_v4_1(its_dev->its))
1482                 return;
1483
1484         map = dev_event_to_vlpi_map(its_dev, event);
1485
1486         if (map->db_enabled == enable)
1487                 return;
1488
1489         map->db_enabled = enable;
1490
1491         /*
1492          * More fun with the architecture:
1493          *
1494          * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI
1495          * value or to 1023, depending on the enable bit. But that
1496          * would be issueing a mapping for an /existing/ DevID+EventID
1497          * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI
1498          * to the /same/ vPE, using this opportunity to adjust the
1499          * doorbell. Mouahahahaha. We loves it, Precious.
1500          */
1501         its_send_vmovi(its_dev, event);
1502 }
1503
1504 static void its_mask_irq(struct irq_data *d)
1505 {
1506         if (irqd_is_forwarded_to_vcpu(d))
1507                 its_vlpi_set_doorbell(d, false);
1508
1509         lpi_update_config(d, LPI_PROP_ENABLED, 0);
1510 }
1511
1512 static void its_unmask_irq(struct irq_data *d)
1513 {
1514         if (irqd_is_forwarded_to_vcpu(d))
1515                 its_vlpi_set_doorbell(d, true);
1516
1517         lpi_update_config(d, 0, LPI_PROP_ENABLED);
1518 }
1519
1520 static __maybe_unused u32 its_read_lpi_count(struct irq_data *d, int cpu)
1521 {
1522         if (irqd_affinity_is_managed(d))
1523                 return atomic_read(&per_cpu_ptr(&cpu_lpi_count, cpu)->managed);
1524
1525         return atomic_read(&per_cpu_ptr(&cpu_lpi_count, cpu)->unmanaged);
1526 }
1527
1528 static void its_inc_lpi_count(struct irq_data *d, int cpu)
1529 {
1530         if (irqd_affinity_is_managed(d))
1531                 atomic_inc(&per_cpu_ptr(&cpu_lpi_count, cpu)->managed);
1532         else
1533                 atomic_inc(&per_cpu_ptr(&cpu_lpi_count, cpu)->unmanaged);
1534 }
1535
1536 static void its_dec_lpi_count(struct irq_data *d, int cpu)
1537 {
1538         if (irqd_affinity_is_managed(d))
1539                 atomic_dec(&per_cpu_ptr(&cpu_lpi_count, cpu)->managed);
1540         else
1541                 atomic_dec(&per_cpu_ptr(&cpu_lpi_count, cpu)->unmanaged);
1542 }
1543
1544 static unsigned int cpumask_pick_least_loaded(struct irq_data *d,
1545                                               const struct cpumask *cpu_mask)
1546 {
1547         unsigned int cpu = nr_cpu_ids, tmp;
1548         int count = S32_MAX;
1549
1550         for_each_cpu(tmp, cpu_mask) {
1551                 int this_count = its_read_lpi_count(d, tmp);
1552                 if (this_count < count) {
1553                         cpu = tmp;
1554                         count = this_count;
1555                 }
1556         }
1557
1558         return cpu;
1559 }
1560
1561 /*
1562  * As suggested by Thomas Gleixner in:
1563  * https://lore.kernel.org/r/87h80q2aoc.fsf@nanos.tec.linutronix.de
1564  */
1565 static int its_select_cpu(struct irq_data *d,
1566                           const struct cpumask *aff_mask)
1567 {
1568         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1569         cpumask_var_t tmpmask;
1570         int cpu, node;
1571
1572         if (!alloc_cpumask_var(&tmpmask, GFP_ATOMIC))
1573                 return -ENOMEM;
1574
1575         node = its_dev->its->numa_node;
1576
1577         if (!irqd_affinity_is_managed(d)) {
1578                 /* First try the NUMA node */
1579                 if (node != NUMA_NO_NODE) {
1580                         /*
1581                          * Try the intersection of the affinity mask and the
1582                          * node mask (and the online mask, just to be safe).
1583                          */
1584                         cpumask_and(tmpmask, cpumask_of_node(node), aff_mask);
1585                         cpumask_and(tmpmask, tmpmask, cpu_online_mask);
1586
1587                         /*
1588                          * Ideally, we would check if the mask is empty, and
1589                          * try again on the full node here.
1590                          *
1591                          * But it turns out that the way ACPI describes the
1592                          * affinity for ITSs only deals about memory, and
1593                          * not target CPUs, so it cannot describe a single
1594                          * ITS placed next to two NUMA nodes.
1595                          *
1596                          * Instead, just fallback on the online mask. This
1597                          * diverges from Thomas' suggestion above.
1598                          */
1599                         cpu = cpumask_pick_least_loaded(d, tmpmask);
1600                         if (cpu < nr_cpu_ids)
1601                                 goto out;
1602
1603                         /* If we can't cross sockets, give up */
1604                         if ((its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144))
1605                                 goto out;
1606
1607                         /* If the above failed, expand the search */
1608                 }
1609
1610                 /* Try the intersection of the affinity and online masks */
1611                 cpumask_and(tmpmask, aff_mask, cpu_online_mask);
1612
1613                 /* If that doesn't fly, the online mask is the last resort */
1614                 if (cpumask_empty(tmpmask))
1615                         cpumask_copy(tmpmask, cpu_online_mask);
1616
1617                 cpu = cpumask_pick_least_loaded(d, tmpmask);
1618         } else {
1619                 cpumask_and(tmpmask, irq_data_get_affinity_mask(d), cpu_online_mask);
1620
1621                 /* If we cannot cross sockets, limit the search to that node */
1622                 if ((its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) &&
1623                     node != NUMA_NO_NODE)
1624                         cpumask_and(tmpmask, tmpmask, cpumask_of_node(node));
1625
1626                 cpu = cpumask_pick_least_loaded(d, tmpmask);
1627         }
1628 out:
1629         free_cpumask_var(tmpmask);
1630
1631         pr_debug("IRQ%d -> %*pbl CPU%d\n", d->irq, cpumask_pr_args(aff_mask), cpu);
1632         return cpu;
1633 }
1634
1635 static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
1636                             bool force)
1637 {
1638         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1639         struct its_collection *target_col;
1640         u32 id = its_get_event_id(d);
1641         int cpu, prev_cpu;
1642
1643         /* A forwarded interrupt should use irq_set_vcpu_affinity */
1644         if (irqd_is_forwarded_to_vcpu(d))
1645                 return -EINVAL;
1646
1647         prev_cpu = its_dev->event_map.col_map[id];
1648         its_dec_lpi_count(d, prev_cpu);
1649
1650         if (!force)
1651                 cpu = its_select_cpu(d, mask_val);
1652         else
1653                 cpu = cpumask_pick_least_loaded(d, mask_val);
1654
1655         if (cpu < 0 || cpu >= nr_cpu_ids)
1656                 goto err;
1657
1658         /* don't set the affinity when the target cpu is same as current one */
1659         if (cpu != prev_cpu) {
1660                 target_col = &its_dev->its->collections[cpu];
1661                 its_send_movi(its_dev, target_col, id);
1662                 its_dev->event_map.col_map[id] = cpu;
1663                 irq_data_update_effective_affinity(d, cpumask_of(cpu));
1664         }
1665
1666         its_inc_lpi_count(d, cpu);
1667
1668         return IRQ_SET_MASK_OK_DONE;
1669
1670 err:
1671         its_inc_lpi_count(d, prev_cpu);
1672         return -EINVAL;
1673 }
1674
1675 static u64 its_irq_get_msi_base(struct its_device *its_dev)
1676 {
1677         struct its_node *its = its_dev->its;
1678
1679         return its->phys_base + GITS_TRANSLATER;
1680 }
1681
1682 static void its_irq_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
1683 {
1684         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1685         struct its_node *its;
1686         u64 addr;
1687
1688         its = its_dev->its;
1689         addr = its->get_msi_base(its_dev);
1690
1691         msg->address_lo         = lower_32_bits(addr);
1692         msg->address_hi         = upper_32_bits(addr);
1693         msg->data               = its_get_event_id(d);
1694
1695         iommu_dma_compose_msi_msg(irq_data_get_msi_desc(d), msg);
1696 }
1697
1698 static int its_irq_set_irqchip_state(struct irq_data *d,
1699                                      enum irqchip_irq_state which,
1700                                      bool state)
1701 {
1702         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1703         u32 event = its_get_event_id(d);
1704
1705         if (which != IRQCHIP_STATE_PENDING)
1706                 return -EINVAL;
1707
1708         if (irqd_is_forwarded_to_vcpu(d)) {
1709                 if (state)
1710                         its_send_vint(its_dev, event);
1711                 else
1712                         its_send_vclear(its_dev, event);
1713         } else {
1714                 if (state)
1715                         its_send_int(its_dev, event);
1716                 else
1717                         its_send_clear(its_dev, event);
1718         }
1719
1720         return 0;
1721 }
1722
1723 static int its_irq_retrigger(struct irq_data *d)
1724 {
1725         return !its_irq_set_irqchip_state(d, IRQCHIP_STATE_PENDING, true);
1726 }
1727
1728 /*
1729  * Two favourable cases:
1730  *
1731  * (a) Either we have a GICv4.1, and all vPEs have to be mapped at all times
1732  *     for vSGI delivery
1733  *
1734  * (b) Or the ITSs do not use a list map, meaning that VMOVP is cheap enough
1735  *     and we're better off mapping all VPEs always
1736  *
1737  * If neither (a) nor (b) is true, then we map vPEs on demand.
1738  *
1739  */
1740 static bool gic_requires_eager_mapping(void)
1741 {
1742         if (!its_list_map || gic_rdists->has_rvpeid)
1743                 return true;
1744
1745         return false;
1746 }
1747
1748 static void its_map_vm(struct its_node *its, struct its_vm *vm)
1749 {
1750         unsigned long flags;
1751
1752         if (gic_requires_eager_mapping())
1753                 return;
1754
1755         raw_spin_lock_irqsave(&vmovp_lock, flags);
1756
1757         /*
1758          * If the VM wasn't mapped yet, iterate over the vpes and get
1759          * them mapped now.
1760          */
1761         vm->vlpi_count[its->list_nr]++;
1762
1763         if (vm->vlpi_count[its->list_nr] == 1) {
1764                 int i;
1765
1766                 for (i = 0; i < vm->nr_vpes; i++) {
1767                         struct its_vpe *vpe = vm->vpes[i];
1768                         struct irq_data *d = irq_get_irq_data(vpe->irq);
1769
1770                         /* Map the VPE to the first possible CPU */
1771                         vpe->col_idx = cpumask_first(cpu_online_mask);
1772                         its_send_vmapp(its, vpe, true);
1773                         its_send_vinvall(its, vpe);
1774                         irq_data_update_effective_affinity(d, cpumask_of(vpe->col_idx));
1775                 }
1776         }
1777
1778         raw_spin_unlock_irqrestore(&vmovp_lock, flags);
1779 }
1780
1781 static void its_unmap_vm(struct its_node *its, struct its_vm *vm)
1782 {
1783         unsigned long flags;
1784
1785         /* Not using the ITS list? Everything is always mapped. */
1786         if (gic_requires_eager_mapping())
1787                 return;
1788
1789         raw_spin_lock_irqsave(&vmovp_lock, flags);
1790
1791         if (!--vm->vlpi_count[its->list_nr]) {
1792                 int i;
1793
1794                 for (i = 0; i < vm->nr_vpes; i++)
1795                         its_send_vmapp(its, vm->vpes[i], false);
1796         }
1797
1798         raw_spin_unlock_irqrestore(&vmovp_lock, flags);
1799 }
1800
1801 static int its_vlpi_map(struct irq_data *d, struct its_cmd_info *info)
1802 {
1803         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1804         u32 event = its_get_event_id(d);
1805         int ret = 0;
1806
1807         if (!info->map)
1808                 return -EINVAL;
1809
1810         raw_spin_lock(&its_dev->event_map.vlpi_lock);
1811
1812         if (!its_dev->event_map.vm) {
1813                 struct its_vlpi_map *maps;
1814
1815                 maps = kcalloc(its_dev->event_map.nr_lpis, sizeof(*maps),
1816                                GFP_ATOMIC);
1817                 if (!maps) {
1818                         ret = -ENOMEM;
1819                         goto out;
1820                 }
1821
1822                 its_dev->event_map.vm = info->map->vm;
1823                 its_dev->event_map.vlpi_maps = maps;
1824         } else if (its_dev->event_map.vm != info->map->vm) {
1825                 ret = -EINVAL;
1826                 goto out;
1827         }
1828
1829         /* Get our private copy of the mapping information */
1830         its_dev->event_map.vlpi_maps[event] = *info->map;
1831
1832         if (irqd_is_forwarded_to_vcpu(d)) {
1833                 /* Already mapped, move it around */
1834                 its_send_vmovi(its_dev, event);
1835         } else {
1836                 /* Ensure all the VPEs are mapped on this ITS */
1837                 its_map_vm(its_dev->its, info->map->vm);
1838
1839                 /*
1840                  * Flag the interrupt as forwarded so that we can
1841                  * start poking the virtual property table.
1842                  */
1843                 irqd_set_forwarded_to_vcpu(d);
1844
1845                 /* Write out the property to the prop table */
1846                 lpi_write_config(d, 0xff, info->map->properties);
1847
1848                 /* Drop the physical mapping */
1849                 its_send_discard(its_dev, event);
1850
1851                 /* and install the virtual one */
1852                 its_send_vmapti(its_dev, event);
1853
1854                 /* Increment the number of VLPIs */
1855                 its_dev->event_map.nr_vlpis++;
1856         }
1857
1858 out:
1859         raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1860         return ret;
1861 }
1862
1863 static int its_vlpi_get(struct irq_data *d, struct its_cmd_info *info)
1864 {
1865         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1866         struct its_vlpi_map *map;
1867         int ret = 0;
1868
1869         raw_spin_lock(&its_dev->event_map.vlpi_lock);
1870
1871         map = get_vlpi_map(d);
1872
1873         if (!its_dev->event_map.vm || !map) {
1874                 ret = -EINVAL;
1875                 goto out;
1876         }
1877
1878         /* Copy our mapping information to the incoming request */
1879         *info->map = *map;
1880
1881 out:
1882         raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1883         return ret;
1884 }
1885
1886 static int its_vlpi_unmap(struct irq_data *d)
1887 {
1888         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1889         u32 event = its_get_event_id(d);
1890         int ret = 0;
1891
1892         raw_spin_lock(&its_dev->event_map.vlpi_lock);
1893
1894         if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d)) {
1895                 ret = -EINVAL;
1896                 goto out;
1897         }
1898
1899         /* Drop the virtual mapping */
1900         its_send_discard(its_dev, event);
1901
1902         /* and restore the physical one */
1903         irqd_clr_forwarded_to_vcpu(d);
1904         its_send_mapti(its_dev, d->hwirq, event);
1905         lpi_update_config(d, 0xff, (LPI_PROP_DEFAULT_PRIO |
1906                                     LPI_PROP_ENABLED |
1907                                     LPI_PROP_GROUP1));
1908
1909         /* Potentially unmap the VM from this ITS */
1910         its_unmap_vm(its_dev->its, its_dev->event_map.vm);
1911
1912         /*
1913          * Drop the refcount and make the device available again if
1914          * this was the last VLPI.
1915          */
1916         if (!--its_dev->event_map.nr_vlpis) {
1917                 its_dev->event_map.vm = NULL;
1918                 kfree(its_dev->event_map.vlpi_maps);
1919         }
1920
1921 out:
1922         raw_spin_unlock(&its_dev->event_map.vlpi_lock);
1923         return ret;
1924 }
1925
1926 static int its_vlpi_prop_update(struct irq_data *d, struct its_cmd_info *info)
1927 {
1928         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1929
1930         if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
1931                 return -EINVAL;
1932
1933         if (info->cmd_type == PROP_UPDATE_AND_INV_VLPI)
1934                 lpi_update_config(d, 0xff, info->config);
1935         else
1936                 lpi_write_config(d, 0xff, info->config);
1937         its_vlpi_set_doorbell(d, !!(info->config & LPI_PROP_ENABLED));
1938
1939         return 0;
1940 }
1941
1942 static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
1943 {
1944         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1945         struct its_cmd_info *info = vcpu_info;
1946
1947         /* Need a v4 ITS */
1948         if (!is_v4(its_dev->its))
1949                 return -EINVAL;
1950
1951         /* Unmap request? */
1952         if (!info)
1953                 return its_vlpi_unmap(d);
1954
1955         switch (info->cmd_type) {
1956         case MAP_VLPI:
1957                 return its_vlpi_map(d, info);
1958
1959         case GET_VLPI:
1960                 return its_vlpi_get(d, info);
1961
1962         case PROP_UPDATE_VLPI:
1963         case PROP_UPDATE_AND_INV_VLPI:
1964                 return its_vlpi_prop_update(d, info);
1965
1966         default:
1967                 return -EINVAL;
1968         }
1969 }
1970
1971 static struct irq_chip its_irq_chip = {
1972         .name                   = "ITS",
1973         .irq_mask               = its_mask_irq,
1974         .irq_unmask             = its_unmask_irq,
1975         .irq_eoi                = irq_chip_eoi_parent,
1976         .irq_set_affinity       = its_set_affinity,
1977         .irq_compose_msi_msg    = its_irq_compose_msi_msg,
1978         .irq_set_irqchip_state  = its_irq_set_irqchip_state,
1979         .irq_retrigger          = its_irq_retrigger,
1980         .irq_set_vcpu_affinity  = its_irq_set_vcpu_affinity,
1981 };
1982
1983
1984 /*
1985  * How we allocate LPIs:
1986  *
1987  * lpi_range_list contains ranges of LPIs that are to available to
1988  * allocate from. To allocate LPIs, just pick the first range that
1989  * fits the required allocation, and reduce it by the required
1990  * amount. Once empty, remove the range from the list.
1991  *
1992  * To free a range of LPIs, add a free range to the list, sort it and
1993  * merge the result if the new range happens to be adjacent to an
1994  * already free block.
1995  *
1996  * The consequence of the above is that allocation is cost is low, but
1997  * freeing is expensive. We assumes that freeing rarely occurs.
1998  */
1999 #define ITS_MAX_LPI_NRBITS      16 /* 64K LPIs */
2000
2001 static DEFINE_MUTEX(lpi_range_lock);
2002 static LIST_HEAD(lpi_range_list);
2003
2004 struct lpi_range {
2005         struct list_head        entry;
2006         u32                     base_id;
2007         u32                     span;
2008 };
2009
2010 static struct lpi_range *mk_lpi_range(u32 base, u32 span)
2011 {
2012         struct lpi_range *range;
2013
2014         range = kmalloc(sizeof(*range), GFP_KERNEL);
2015         if (range) {
2016                 range->base_id = base;
2017                 range->span = span;
2018         }
2019
2020         return range;
2021 }
2022
2023 static int alloc_lpi_range(u32 nr_lpis, u32 *base)
2024 {
2025         struct lpi_range *range, *tmp;
2026         int err = -ENOSPC;
2027
2028         mutex_lock(&lpi_range_lock);
2029
2030         list_for_each_entry_safe(range, tmp, &lpi_range_list, entry) {
2031                 if (range->span >= nr_lpis) {
2032                         *base = range->base_id;
2033                         range->base_id += nr_lpis;
2034                         range->span -= nr_lpis;
2035
2036                         if (range->span == 0) {
2037                                 list_del(&range->entry);
2038                                 kfree(range);
2039                         }
2040
2041                         err = 0;
2042                         break;
2043                 }
2044         }
2045
2046         mutex_unlock(&lpi_range_lock);
2047
2048         pr_debug("ITS: alloc %u:%u\n", *base, nr_lpis);
2049         return err;
2050 }
2051
2052 static void merge_lpi_ranges(struct lpi_range *a, struct lpi_range *b)
2053 {
2054         if (&a->entry == &lpi_range_list || &b->entry == &lpi_range_list)
2055                 return;
2056         if (a->base_id + a->span != b->base_id)
2057                 return;
2058         b->base_id = a->base_id;
2059         b->span += a->span;
2060         list_del(&a->entry);
2061         kfree(a);
2062 }
2063
2064 static int free_lpi_range(u32 base, u32 nr_lpis)
2065 {
2066         struct lpi_range *new, *old;
2067
2068         new = mk_lpi_range(base, nr_lpis);
2069         if (!new)
2070                 return -ENOMEM;
2071
2072         mutex_lock(&lpi_range_lock);
2073
2074         list_for_each_entry_reverse(old, &lpi_range_list, entry) {
2075                 if (old->base_id < base)
2076                         break;
2077         }
2078         /*
2079          * old is the last element with ->base_id smaller than base,
2080          * so new goes right after it. If there are no elements with
2081          * ->base_id smaller than base, &old->entry ends up pointing
2082          * at the head of the list, and inserting new it the start of
2083          * the list is the right thing to do in that case as well.
2084          */
2085         list_add(&new->entry, &old->entry);
2086         /*
2087          * Now check if we can merge with the preceding and/or
2088          * following ranges.
2089          */
2090         merge_lpi_ranges(old, new);
2091         merge_lpi_ranges(new, list_next_entry(new, entry));
2092
2093         mutex_unlock(&lpi_range_lock);
2094         return 0;
2095 }
2096
2097 static int __init its_lpi_init(u32 id_bits)
2098 {
2099         u32 lpis = (1UL << id_bits) - 8192;
2100         u32 numlpis;
2101         int err;
2102
2103         numlpis = 1UL << GICD_TYPER_NUM_LPIS(gic_rdists->gicd_typer);
2104
2105         if (numlpis > 2 && !WARN_ON(numlpis > lpis)) {
2106                 lpis = numlpis;
2107                 pr_info("ITS: Using hypervisor restricted LPI range [%u]\n",
2108                         lpis);
2109         }
2110
2111         /*
2112          * Initializing the allocator is just the same as freeing the
2113          * full range of LPIs.
2114          */
2115         err = free_lpi_range(8192, lpis);
2116         pr_debug("ITS: Allocator initialized for %u LPIs\n", lpis);
2117         return err;
2118 }
2119
2120 static unsigned long *its_lpi_alloc(int nr_irqs, u32 *base, int *nr_ids)
2121 {
2122         unsigned long *bitmap = NULL;
2123         int err = 0;
2124
2125         do {
2126                 err = alloc_lpi_range(nr_irqs, base);
2127                 if (!err)
2128                         break;
2129
2130                 nr_irqs /= 2;
2131         } while (nr_irqs > 0);
2132
2133         if (!nr_irqs)
2134                 err = -ENOSPC;
2135
2136         if (err)
2137                 goto out;
2138
2139         bitmap = kcalloc(BITS_TO_LONGS(nr_irqs), sizeof (long), GFP_ATOMIC);
2140         if (!bitmap)
2141                 goto out;
2142
2143         *nr_ids = nr_irqs;
2144
2145 out:
2146         if (!bitmap)
2147                 *base = *nr_ids = 0;
2148
2149         return bitmap;
2150 }
2151
2152 static void its_lpi_free(unsigned long *bitmap, u32 base, u32 nr_ids)
2153 {
2154         WARN_ON(free_lpi_range(base, nr_ids));
2155         kfree(bitmap);
2156 }
2157
2158 static void gic_reset_prop_table(void *va)
2159 {
2160         /* Priority 0xa0, Group-1, disabled */
2161         memset(va, LPI_PROP_DEFAULT_PRIO | LPI_PROP_GROUP1, LPI_PROPBASE_SZ);
2162
2163         /* Make sure the GIC will observe the written configuration */
2164         gic_flush_dcache_to_poc(va, LPI_PROPBASE_SZ);
2165 }
2166
2167 static struct page *its_allocate_prop_table(gfp_t gfp_flags)
2168 {
2169         struct page *prop_page;
2170
2171         prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ));
2172         if (!prop_page)
2173                 return NULL;
2174
2175         gic_reset_prop_table(page_address(prop_page));
2176
2177         return prop_page;
2178 }
2179
2180 static void its_free_prop_table(struct page *prop_page)
2181 {
2182         free_pages((unsigned long)page_address(prop_page),
2183                    get_order(LPI_PROPBASE_SZ));
2184 }
2185
2186 static bool gic_check_reserved_range(phys_addr_t addr, unsigned long size)
2187 {
2188         phys_addr_t start, end, addr_end;
2189         u64 i;
2190
2191         /*
2192          * We don't bother checking for a kdump kernel as by
2193          * construction, the LPI tables are out of this kernel's
2194          * memory map.
2195          */
2196         if (is_kdump_kernel())
2197                 return true;
2198
2199         addr_end = addr + size - 1;
2200
2201         for_each_reserved_mem_range(i, &start, &end) {
2202                 if (addr >= start && addr_end <= end)
2203                         return true;
2204         }
2205
2206         /* Not found, not a good sign... */
2207         pr_warn("GICv3: Expected reserved range [%pa:%pa], not found\n",
2208                 &addr, &addr_end);
2209         add_taint(TAINT_CRAP, LOCKDEP_STILL_OK);
2210         return false;
2211 }
2212
2213 static int gic_reserve_range(phys_addr_t addr, unsigned long size)
2214 {
2215         if (efi_enabled(EFI_CONFIG_TABLES))
2216                 return efi_mem_reserve_persistent(addr, size);
2217
2218         return 0;
2219 }
2220
2221 static int __init its_setup_lpi_prop_table(void)
2222 {
2223         if (gic_rdists->flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED) {
2224                 u64 val;
2225
2226                 val = gicr_read_propbaser(gic_data_rdist_rd_base() + GICR_PROPBASER);
2227                 lpi_id_bits = (val & GICR_PROPBASER_IDBITS_MASK) + 1;
2228
2229                 gic_rdists->prop_table_pa = val & GENMASK_ULL(51, 12);
2230                 gic_rdists->prop_table_va = memremap(gic_rdists->prop_table_pa,
2231                                                      LPI_PROPBASE_SZ,
2232                                                      MEMREMAP_WB);
2233                 gic_reset_prop_table(gic_rdists->prop_table_va);
2234         } else {
2235                 struct page *page;
2236
2237                 lpi_id_bits = min_t(u32,
2238                                     GICD_TYPER_ID_BITS(gic_rdists->gicd_typer),
2239                                     ITS_MAX_LPI_NRBITS);
2240                 page = its_allocate_prop_table(GFP_NOWAIT);
2241                 if (!page) {
2242                         pr_err("Failed to allocate PROPBASE\n");
2243                         return -ENOMEM;
2244                 }
2245
2246                 gic_rdists->prop_table_pa = page_to_phys(page);
2247                 gic_rdists->prop_table_va = page_address(page);
2248                 WARN_ON(gic_reserve_range(gic_rdists->prop_table_pa,
2249                                           LPI_PROPBASE_SZ));
2250         }
2251
2252         pr_info("GICv3: using LPI property table @%pa\n",
2253                 &gic_rdists->prop_table_pa);
2254
2255         return its_lpi_init(lpi_id_bits);
2256 }
2257
2258 static const char *its_base_type_string[] = {
2259         [GITS_BASER_TYPE_DEVICE]        = "Devices",
2260         [GITS_BASER_TYPE_VCPU]          = "Virtual CPUs",
2261         [GITS_BASER_TYPE_RESERVED3]     = "Reserved (3)",
2262         [GITS_BASER_TYPE_COLLECTION]    = "Interrupt Collections",
2263         [GITS_BASER_TYPE_RESERVED5]     = "Reserved (5)",
2264         [GITS_BASER_TYPE_RESERVED6]     = "Reserved (6)",
2265         [GITS_BASER_TYPE_RESERVED7]     = "Reserved (7)",
2266 };
2267
2268 static u64 its_read_baser(struct its_node *its, struct its_baser *baser)
2269 {
2270         u32 idx = baser - its->tables;
2271
2272         return gits_read_baser(its->base + GITS_BASER + (idx << 3));
2273 }
2274
2275 static void its_write_baser(struct its_node *its, struct its_baser *baser,
2276                             u64 val)
2277 {
2278         u32 idx = baser - its->tables;
2279
2280         gits_write_baser(val, its->base + GITS_BASER + (idx << 3));
2281         baser->val = its_read_baser(its, baser);
2282 }
2283
2284 static int its_setup_baser(struct its_node *its, struct its_baser *baser,
2285                            u64 cache, u64 shr, u32 order, bool indirect)
2286 {
2287         u64 val = its_read_baser(its, baser);
2288         u64 esz = GITS_BASER_ENTRY_SIZE(val);
2289         u64 type = GITS_BASER_TYPE(val);
2290         u64 baser_phys, tmp;
2291         u32 alloc_pages, psz;
2292         struct page *page;
2293         void *base;
2294
2295         psz = baser->psz;
2296         alloc_pages = (PAGE_ORDER_TO_SIZE(order) / psz);
2297         if (alloc_pages > GITS_BASER_PAGES_MAX) {
2298                 pr_warn("ITS@%pa: %s too large, reduce ITS pages %u->%u\n",
2299                         &its->phys_base, its_base_type_string[type],
2300                         alloc_pages, GITS_BASER_PAGES_MAX);
2301                 alloc_pages = GITS_BASER_PAGES_MAX;
2302                 order = get_order(GITS_BASER_PAGES_MAX * psz);
2303         }
2304
2305         page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO, order);
2306         if (!page)
2307                 return -ENOMEM;
2308
2309         base = (void *)page_address(page);
2310         baser_phys = virt_to_phys(base);
2311
2312         /* Check if the physical address of the memory is above 48bits */
2313         if (IS_ENABLED(CONFIG_ARM64_64K_PAGES) && (baser_phys >> 48)) {
2314
2315                 /* 52bit PA is supported only when PageSize=64K */
2316                 if (psz != SZ_64K) {
2317                         pr_err("ITS: no 52bit PA support when psz=%d\n", psz);
2318                         free_pages((unsigned long)base, order);
2319                         return -ENXIO;
2320                 }
2321
2322                 /* Convert 52bit PA to 48bit field */
2323                 baser_phys = GITS_BASER_PHYS_52_to_48(baser_phys);
2324         }
2325
2326 retry_baser:
2327         val = (baser_phys                                        |
2328                 (type << GITS_BASER_TYPE_SHIFT)                  |
2329                 ((esz - 1) << GITS_BASER_ENTRY_SIZE_SHIFT)       |
2330                 ((alloc_pages - 1) << GITS_BASER_PAGES_SHIFT)    |
2331                 cache                                            |
2332                 shr                                              |
2333                 GITS_BASER_VALID);
2334
2335         val |=  indirect ? GITS_BASER_INDIRECT : 0x0;
2336
2337         switch (psz) {
2338         case SZ_4K:
2339                 val |= GITS_BASER_PAGE_SIZE_4K;
2340                 break;
2341         case SZ_16K:
2342                 val |= GITS_BASER_PAGE_SIZE_16K;
2343                 break;
2344         case SZ_64K:
2345                 val |= GITS_BASER_PAGE_SIZE_64K;
2346                 break;
2347         }
2348
2349         its_write_baser(its, baser, val);
2350         tmp = baser->val;
2351
2352         if ((val ^ tmp) & GITS_BASER_SHAREABILITY_MASK) {
2353                 /*
2354                  * Shareability didn't stick. Just use
2355                  * whatever the read reported, which is likely
2356                  * to be the only thing this redistributor
2357                  * supports. If that's zero, make it
2358                  * non-cacheable as well.
2359                  */
2360                 shr = tmp & GITS_BASER_SHAREABILITY_MASK;
2361                 if (!shr) {
2362                         cache = GITS_BASER_nC;
2363                         gic_flush_dcache_to_poc(base, PAGE_ORDER_TO_SIZE(order));
2364                 }
2365                 goto retry_baser;
2366         }
2367
2368         if (val != tmp) {
2369                 pr_err("ITS@%pa: %s doesn't stick: %llx %llx\n",
2370                        &its->phys_base, its_base_type_string[type],
2371                        val, tmp);
2372                 free_pages((unsigned long)base, order);
2373                 return -ENXIO;
2374         }
2375
2376         baser->order = order;
2377         baser->base = base;
2378         baser->psz = psz;
2379         tmp = indirect ? GITS_LVL1_ENTRY_SIZE : esz;
2380
2381         pr_info("ITS@%pa: allocated %d %s @%lx (%s, esz %d, psz %dK, shr %d)\n",
2382                 &its->phys_base, (int)(PAGE_ORDER_TO_SIZE(order) / (int)tmp),
2383                 its_base_type_string[type],
2384                 (unsigned long)virt_to_phys(base),
2385                 indirect ? "indirect" : "flat", (int)esz,
2386                 psz / SZ_1K, (int)shr >> GITS_BASER_SHAREABILITY_SHIFT);
2387
2388         return 0;
2389 }
2390
2391 static bool its_parse_indirect_baser(struct its_node *its,
2392                                      struct its_baser *baser,
2393                                      u32 *order, u32 ids)
2394 {
2395         u64 tmp = its_read_baser(its, baser);
2396         u64 type = GITS_BASER_TYPE(tmp);
2397         u64 esz = GITS_BASER_ENTRY_SIZE(tmp);
2398         u64 val = GITS_BASER_InnerShareable | GITS_BASER_RaWaWb;
2399         u32 new_order = *order;
2400         u32 psz = baser->psz;
2401         bool indirect = false;
2402
2403         /* No need to enable Indirection if memory requirement < (psz*2)bytes */
2404         if ((esz << ids) > (psz * 2)) {
2405                 /*
2406                  * Find out whether hw supports a single or two-level table by
2407                  * table by reading bit at offset '62' after writing '1' to it.
2408                  */
2409                 its_write_baser(its, baser, val | GITS_BASER_INDIRECT);
2410                 indirect = !!(baser->val & GITS_BASER_INDIRECT);
2411
2412                 if (indirect) {
2413                         /*
2414                          * The size of the lvl2 table is equal to ITS page size
2415                          * which is 'psz'. For computing lvl1 table size,
2416                          * subtract ID bits that sparse lvl2 table from 'ids'
2417                          * which is reported by ITS hardware times lvl1 table
2418                          * entry size.
2419                          */
2420                         ids -= ilog2(psz / (int)esz);
2421                         esz = GITS_LVL1_ENTRY_SIZE;
2422                 }
2423         }
2424
2425         /*
2426          * Allocate as many entries as required to fit the
2427          * range of device IDs that the ITS can grok... The ID
2428          * space being incredibly sparse, this results in a
2429          * massive waste of memory if two-level device table
2430          * feature is not supported by hardware.
2431          */
2432         new_order = max_t(u32, get_order(esz << ids), new_order);
2433         if (new_order >= MAX_ORDER) {
2434                 new_order = MAX_ORDER - 1;
2435                 ids = ilog2(PAGE_ORDER_TO_SIZE(new_order) / (int)esz);
2436                 pr_warn("ITS@%pa: %s Table too large, reduce ids %llu->%u\n",
2437                         &its->phys_base, its_base_type_string[type],
2438                         device_ids(its), ids);
2439         }
2440
2441         *order = new_order;
2442
2443         return indirect;
2444 }
2445
2446 static u32 compute_common_aff(u64 val)
2447 {
2448         u32 aff, clpiaff;
2449
2450         aff = FIELD_GET(GICR_TYPER_AFFINITY, val);
2451         clpiaff = FIELD_GET(GICR_TYPER_COMMON_LPI_AFF, val);
2452
2453         return aff & ~(GENMASK(31, 0) >> (clpiaff * 8));
2454 }
2455
2456 static u32 compute_its_aff(struct its_node *its)
2457 {
2458         u64 val;
2459         u32 svpet;
2460
2461         /*
2462          * Reencode the ITS SVPET and MPIDR as a GICR_TYPER, and compute
2463          * the resulting affinity. We then use that to see if this match
2464          * our own affinity.
2465          */
2466         svpet = FIELD_GET(GITS_TYPER_SVPET, its->typer);
2467         val  = FIELD_PREP(GICR_TYPER_COMMON_LPI_AFF, svpet);
2468         val |= FIELD_PREP(GICR_TYPER_AFFINITY, its->mpidr);
2469         return compute_common_aff(val);
2470 }
2471
2472 static struct its_node *find_sibling_its(struct its_node *cur_its)
2473 {
2474         struct its_node *its;
2475         u32 aff;
2476
2477         if (!FIELD_GET(GITS_TYPER_SVPET, cur_its->typer))
2478                 return NULL;
2479
2480         aff = compute_its_aff(cur_its);
2481
2482         list_for_each_entry(its, &its_nodes, entry) {
2483                 u64 baser;
2484
2485                 if (!is_v4_1(its) || its == cur_its)
2486                         continue;
2487
2488                 if (!FIELD_GET(GITS_TYPER_SVPET, its->typer))
2489                         continue;
2490
2491                 if (aff != compute_its_aff(its))
2492                         continue;
2493
2494                 /* GICv4.1 guarantees that the vPE table is GITS_BASER2 */
2495                 baser = its->tables[2].val;
2496                 if (!(baser & GITS_BASER_VALID))
2497                         continue;
2498
2499                 return its;
2500         }
2501
2502         return NULL;
2503 }
2504
2505 static void its_free_tables(struct its_node *its)
2506 {
2507         int i;
2508
2509         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
2510                 if (its->tables[i].base) {
2511                         free_pages((unsigned long)its->tables[i].base,
2512                                    its->tables[i].order);
2513                         its->tables[i].base = NULL;
2514                 }
2515         }
2516 }
2517
2518 static int its_probe_baser_psz(struct its_node *its, struct its_baser *baser)
2519 {
2520         u64 psz = SZ_64K;
2521
2522         while (psz) {
2523                 u64 val, gpsz;
2524
2525                 val = its_read_baser(its, baser);
2526                 val &= ~GITS_BASER_PAGE_SIZE_MASK;
2527
2528                 switch (psz) {
2529                 case SZ_64K:
2530                         gpsz = GITS_BASER_PAGE_SIZE_64K;
2531                         break;
2532                 case SZ_16K:
2533                         gpsz = GITS_BASER_PAGE_SIZE_16K;
2534                         break;
2535                 case SZ_4K:
2536                 default:
2537                         gpsz = GITS_BASER_PAGE_SIZE_4K;
2538                         break;
2539                 }
2540
2541                 gpsz >>= GITS_BASER_PAGE_SIZE_SHIFT;
2542
2543                 val |= FIELD_PREP(GITS_BASER_PAGE_SIZE_MASK, gpsz);
2544                 its_write_baser(its, baser, val);
2545
2546                 if (FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser->val) == gpsz)
2547                         break;
2548
2549                 switch (psz) {
2550                 case SZ_64K:
2551                         psz = SZ_16K;
2552                         break;
2553                 case SZ_16K:
2554                         psz = SZ_4K;
2555                         break;
2556                 case SZ_4K:
2557                 default:
2558                         return -1;
2559                 }
2560         }
2561
2562         baser->psz = psz;
2563         return 0;
2564 }
2565
2566 static int its_alloc_tables(struct its_node *its)
2567 {
2568         u64 shr = GITS_BASER_InnerShareable;
2569         u64 cache = GITS_BASER_RaWaWb;
2570         int err, i;
2571
2572         if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_22375)
2573                 /* erratum 24313: ignore memory access type */
2574                 cache = GITS_BASER_nCnB;
2575
2576         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
2577                 struct its_baser *baser = its->tables + i;
2578                 u64 val = its_read_baser(its, baser);
2579                 u64 type = GITS_BASER_TYPE(val);
2580                 bool indirect = false;
2581                 u32 order;
2582
2583                 if (type == GITS_BASER_TYPE_NONE)
2584                         continue;
2585
2586                 if (its_probe_baser_psz(its, baser)) {
2587                         its_free_tables(its);
2588                         return -ENXIO;
2589                 }
2590
2591                 order = get_order(baser->psz);
2592
2593                 switch (type) {
2594                 case GITS_BASER_TYPE_DEVICE:
2595                         indirect = its_parse_indirect_baser(its, baser, &order,
2596                                                             device_ids(its));
2597                         break;
2598
2599                 case GITS_BASER_TYPE_VCPU:
2600                         if (is_v4_1(its)) {
2601                                 struct its_node *sibling;
2602
2603                                 WARN_ON(i != 2);
2604                                 if ((sibling = find_sibling_its(its))) {
2605                                         *baser = sibling->tables[2];
2606                                         its_write_baser(its, baser, baser->val);
2607                                         continue;
2608                                 }
2609                         }
2610
2611                         indirect = its_parse_indirect_baser(its, baser, &order,
2612                                                             ITS_MAX_VPEID_BITS);
2613                         break;
2614                 }
2615
2616                 err = its_setup_baser(its, baser, cache, shr, order, indirect);
2617                 if (err < 0) {
2618                         its_free_tables(its);
2619                         return err;
2620                 }
2621
2622                 /* Update settings which will be used for next BASERn */
2623                 cache = baser->val & GITS_BASER_CACHEABILITY_MASK;
2624                 shr = baser->val & GITS_BASER_SHAREABILITY_MASK;
2625         }
2626
2627         return 0;
2628 }
2629
2630 static u64 inherit_vpe_l1_table_from_its(void)
2631 {
2632         struct its_node *its;
2633         u64 val;
2634         u32 aff;
2635
2636         val = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER);
2637         aff = compute_common_aff(val);
2638
2639         list_for_each_entry(its, &its_nodes, entry) {
2640                 u64 baser, addr;
2641
2642                 if (!is_v4_1(its))
2643                         continue;
2644
2645                 if (!FIELD_GET(GITS_TYPER_SVPET, its->typer))
2646                         continue;
2647
2648                 if (aff != compute_its_aff(its))
2649                         continue;
2650
2651                 /* GICv4.1 guarantees that the vPE table is GITS_BASER2 */
2652                 baser = its->tables[2].val;
2653                 if (!(baser & GITS_BASER_VALID))
2654                         continue;
2655
2656                 /* We have a winner! */
2657                 gic_data_rdist()->vpe_l1_base = its->tables[2].base;
2658
2659                 val  = GICR_VPROPBASER_4_1_VALID;
2660                 if (baser & GITS_BASER_INDIRECT)
2661                         val |= GICR_VPROPBASER_4_1_INDIRECT;
2662                 val |= FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE,
2663                                   FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser));
2664                 switch (FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser)) {
2665                 case GIC_PAGE_SIZE_64K:
2666                         addr = GITS_BASER_ADDR_48_to_52(baser);
2667                         break;
2668                 default:
2669                         addr = baser & GENMASK_ULL(47, 12);
2670                         break;
2671                 }
2672                 val |= FIELD_PREP(GICR_VPROPBASER_4_1_ADDR, addr >> 12);
2673                 val |= FIELD_PREP(GICR_VPROPBASER_SHAREABILITY_MASK,
2674                                   FIELD_GET(GITS_BASER_SHAREABILITY_MASK, baser));
2675                 val |= FIELD_PREP(GICR_VPROPBASER_INNER_CACHEABILITY_MASK,
2676                                   FIELD_GET(GITS_BASER_INNER_CACHEABILITY_MASK, baser));
2677                 val |= FIELD_PREP(GICR_VPROPBASER_4_1_SIZE, GITS_BASER_NR_PAGES(baser) - 1);
2678
2679                 return val;
2680         }
2681
2682         return 0;
2683 }
2684
2685 static u64 inherit_vpe_l1_table_from_rd(cpumask_t **mask)
2686 {
2687         u32 aff;
2688         u64 val;
2689         int cpu;
2690
2691         val = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER);
2692         aff = compute_common_aff(val);
2693
2694         for_each_possible_cpu(cpu) {
2695                 void __iomem *base = gic_data_rdist_cpu(cpu)->rd_base;
2696
2697                 if (!base || cpu == smp_processor_id())
2698                         continue;
2699
2700                 val = gic_read_typer(base + GICR_TYPER);
2701                 if (aff != compute_common_aff(val))
2702                         continue;
2703
2704                 /*
2705                  * At this point, we have a victim. This particular CPU
2706                  * has already booted, and has an affinity that matches
2707                  * ours wrt CommonLPIAff. Let's use its own VPROPBASER.
2708                  * Make sure we don't write the Z bit in that case.
2709                  */
2710                 val = gicr_read_vpropbaser(base + SZ_128K + GICR_VPROPBASER);
2711                 val &= ~GICR_VPROPBASER_4_1_Z;
2712
2713                 gic_data_rdist()->vpe_l1_base = gic_data_rdist_cpu(cpu)->vpe_l1_base;
2714                 *mask = gic_data_rdist_cpu(cpu)->vpe_table_mask;
2715
2716                 return val;
2717         }
2718
2719         return 0;
2720 }
2721
2722 static bool allocate_vpe_l2_table(int cpu, u32 id)
2723 {
2724         void __iomem *base = gic_data_rdist_cpu(cpu)->rd_base;
2725         unsigned int psz, esz, idx, npg, gpsz;
2726         u64 val;
2727         struct page *page;
2728         __le64 *table;
2729
2730         if (!gic_rdists->has_rvpeid)
2731                 return true;
2732
2733         /* Skip non-present CPUs */
2734         if (!base)
2735                 return true;
2736
2737         val  = gicr_read_vpropbaser(base + SZ_128K + GICR_VPROPBASER);
2738
2739         esz  = FIELD_GET(GICR_VPROPBASER_4_1_ENTRY_SIZE, val) + 1;
2740         gpsz = FIELD_GET(GICR_VPROPBASER_4_1_PAGE_SIZE, val);
2741         npg  = FIELD_GET(GICR_VPROPBASER_4_1_SIZE, val) + 1;
2742
2743         switch (gpsz) {
2744         default:
2745                 WARN_ON(1);
2746                 fallthrough;
2747         case GIC_PAGE_SIZE_4K:
2748                 psz = SZ_4K;
2749                 break;
2750         case GIC_PAGE_SIZE_16K:
2751                 psz = SZ_16K;
2752                 break;
2753         case GIC_PAGE_SIZE_64K:
2754                 psz = SZ_64K;
2755                 break;
2756         }
2757
2758         /* Don't allow vpe_id that exceeds single, flat table limit */
2759         if (!(val & GICR_VPROPBASER_4_1_INDIRECT))
2760                 return (id < (npg * psz / (esz * SZ_8)));
2761
2762         /* Compute 1st level table index & check if that exceeds table limit */
2763         idx = id >> ilog2(psz / (esz * SZ_8));
2764         if (idx >= (npg * psz / GITS_LVL1_ENTRY_SIZE))
2765                 return false;
2766
2767         table = gic_data_rdist_cpu(cpu)->vpe_l1_base;
2768
2769         /* Allocate memory for 2nd level table */
2770         if (!table[idx]) {
2771                 page = alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(psz));
2772                 if (!page)
2773                         return false;
2774
2775                 /* Flush Lvl2 table to PoC if hw doesn't support coherency */
2776                 if (!(val & GICR_VPROPBASER_SHAREABILITY_MASK))
2777                         gic_flush_dcache_to_poc(page_address(page), psz);
2778
2779                 table[idx] = cpu_to_le64(page_to_phys(page) | GITS_BASER_VALID);
2780
2781                 /* Flush Lvl1 entry to PoC if hw doesn't support coherency */
2782                 if (!(val & GICR_VPROPBASER_SHAREABILITY_MASK))
2783                         gic_flush_dcache_to_poc(table + idx, GITS_LVL1_ENTRY_SIZE);
2784
2785                 /* Ensure updated table contents are visible to RD hardware */
2786                 dsb(sy);
2787         }
2788
2789         return true;
2790 }
2791
2792 static int allocate_vpe_l1_table(void)
2793 {
2794         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
2795         u64 val, gpsz, npg, pa;
2796         unsigned int psz = SZ_64K;
2797         unsigned int np, epp, esz;
2798         struct page *page;
2799
2800         if (!gic_rdists->has_rvpeid)
2801                 return 0;
2802
2803         /*
2804          * if VPENDBASER.Valid is set, disable any previously programmed
2805          * VPE by setting PendingLast while clearing Valid. This has the
2806          * effect of making sure no doorbell will be generated and we can
2807          * then safely clear VPROPBASER.Valid.
2808          */
2809         if (gicr_read_vpendbaser(vlpi_base + GICR_VPENDBASER) & GICR_VPENDBASER_Valid)
2810                 gicr_write_vpendbaser(GICR_VPENDBASER_PendingLast,
2811                                       vlpi_base + GICR_VPENDBASER);
2812
2813         /*
2814          * If we can inherit the configuration from another RD, let's do
2815          * so. Otherwise, we have to go through the allocation process. We
2816          * assume that all RDs have the exact same requirements, as
2817          * nothing will work otherwise.
2818          */
2819         val = inherit_vpe_l1_table_from_rd(&gic_data_rdist()->vpe_table_mask);
2820         if (val & GICR_VPROPBASER_4_1_VALID)
2821                 goto out;
2822
2823         gic_data_rdist()->vpe_table_mask = kzalloc(sizeof(cpumask_t), GFP_ATOMIC);
2824         if (!gic_data_rdist()->vpe_table_mask)
2825                 return -ENOMEM;
2826
2827         val = inherit_vpe_l1_table_from_its();
2828         if (val & GICR_VPROPBASER_4_1_VALID)
2829                 goto out;
2830
2831         /* First probe the page size */
2832         val = FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE, GIC_PAGE_SIZE_64K);
2833         gicr_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
2834         val = gicr_read_vpropbaser(vlpi_base + GICR_VPROPBASER);
2835         gpsz = FIELD_GET(GICR_VPROPBASER_4_1_PAGE_SIZE, val);
2836         esz = FIELD_GET(GICR_VPROPBASER_4_1_ENTRY_SIZE, val);
2837
2838         switch (gpsz) {
2839         default:
2840                 gpsz = GIC_PAGE_SIZE_4K;
2841                 fallthrough;
2842         case GIC_PAGE_SIZE_4K:
2843                 psz = SZ_4K;
2844                 break;
2845         case GIC_PAGE_SIZE_16K:
2846                 psz = SZ_16K;
2847                 break;
2848         case GIC_PAGE_SIZE_64K:
2849                 psz = SZ_64K;
2850                 break;
2851         }
2852
2853         /*
2854          * Start populating the register from scratch, including RO fields
2855          * (which we want to print in debug cases...)
2856          */
2857         val = 0;
2858         val |= FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE, gpsz);
2859         val |= FIELD_PREP(GICR_VPROPBASER_4_1_ENTRY_SIZE, esz);
2860
2861         /* How many entries per GIC page? */
2862         esz++;
2863         epp = psz / (esz * SZ_8);
2864
2865         /*
2866          * If we need more than just a single L1 page, flag the table
2867          * as indirect and compute the number of required L1 pages.
2868          */
2869         if (epp < ITS_MAX_VPEID) {
2870                 int nl2;
2871
2872                 val |= GICR_VPROPBASER_4_1_INDIRECT;
2873
2874                 /* Number of L2 pages required to cover the VPEID space */
2875                 nl2 = DIV_ROUND_UP(ITS_MAX_VPEID, epp);
2876
2877                 /* Number of L1 pages to point to the L2 pages */
2878                 npg = DIV_ROUND_UP(nl2 * SZ_8, psz);
2879         } else {
2880                 npg = 1;
2881         }
2882
2883         val |= FIELD_PREP(GICR_VPROPBASER_4_1_SIZE, npg - 1);
2884
2885         /* Right, that's the number of CPU pages we need for L1 */
2886         np = DIV_ROUND_UP(npg * psz, PAGE_SIZE);
2887
2888         pr_debug("np = %d, npg = %lld, psz = %d, epp = %d, esz = %d\n",
2889                  np, npg, psz, epp, esz);
2890         page = alloc_pages(GFP_ATOMIC | __GFP_ZERO, get_order(np * PAGE_SIZE));
2891         if (!page)
2892                 return -ENOMEM;
2893
2894         gic_data_rdist()->vpe_l1_base = page_address(page);
2895         pa = virt_to_phys(page_address(page));
2896         WARN_ON(!IS_ALIGNED(pa, psz));
2897
2898         val |= FIELD_PREP(GICR_VPROPBASER_4_1_ADDR, pa >> 12);
2899         val |= GICR_VPROPBASER_RaWb;
2900         val |= GICR_VPROPBASER_InnerShareable;
2901         val |= GICR_VPROPBASER_4_1_Z;
2902         val |= GICR_VPROPBASER_4_1_VALID;
2903
2904 out:
2905         gicr_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
2906         cpumask_set_cpu(smp_processor_id(), gic_data_rdist()->vpe_table_mask);
2907
2908         pr_debug("CPU%d: VPROPBASER = %llx %*pbl\n",
2909                  smp_processor_id(), val,
2910                  cpumask_pr_args(gic_data_rdist()->vpe_table_mask));
2911
2912         return 0;
2913 }
2914
2915 static int its_alloc_collections(struct its_node *its)
2916 {
2917         int i;
2918
2919         its->collections = kcalloc(nr_cpu_ids, sizeof(*its->collections),
2920                                    GFP_KERNEL);
2921         if (!its->collections)
2922                 return -ENOMEM;
2923
2924         for (i = 0; i < nr_cpu_ids; i++)
2925                 its->collections[i].target_address = ~0ULL;
2926
2927         return 0;
2928 }
2929
2930 static struct page *its_allocate_pending_table(gfp_t gfp_flags)
2931 {
2932         struct page *pend_page;
2933
2934         pend_page = alloc_pages(gfp_flags | __GFP_ZERO,
2935                                 get_order(LPI_PENDBASE_SZ));
2936         if (!pend_page)
2937                 return NULL;
2938
2939         /* Make sure the GIC will observe the zero-ed page */
2940         gic_flush_dcache_to_poc(page_address(pend_page), LPI_PENDBASE_SZ);
2941
2942         return pend_page;
2943 }
2944
2945 static void its_free_pending_table(struct page *pt)
2946 {
2947         free_pages((unsigned long)page_address(pt), get_order(LPI_PENDBASE_SZ));
2948 }
2949
2950 /*
2951  * Booting with kdump and LPIs enabled is generally fine. Any other
2952  * case is wrong in the absence of firmware/EFI support.
2953  */
2954 static bool enabled_lpis_allowed(void)
2955 {
2956         phys_addr_t addr;
2957         u64 val;
2958
2959         /* Check whether the property table is in a reserved region */
2960         val = gicr_read_propbaser(gic_data_rdist_rd_base() + GICR_PROPBASER);
2961         addr = val & GENMASK_ULL(51, 12);
2962
2963         return gic_check_reserved_range(addr, LPI_PROPBASE_SZ);
2964 }
2965
2966 static int __init allocate_lpi_tables(void)
2967 {
2968         u64 val;
2969         int err, cpu;
2970
2971         /*
2972          * If LPIs are enabled while we run this from the boot CPU,
2973          * flag the RD tables as pre-allocated if the stars do align.
2974          */
2975         val = readl_relaxed(gic_data_rdist_rd_base() + GICR_CTLR);
2976         if ((val & GICR_CTLR_ENABLE_LPIS) && enabled_lpis_allowed()) {
2977                 gic_rdists->flags |= (RDIST_FLAGS_RD_TABLES_PREALLOCATED |
2978                                       RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING);
2979                 pr_info("GICv3: Using preallocated redistributor tables\n");
2980         }
2981
2982         err = its_setup_lpi_prop_table();
2983         if (err)
2984                 return err;
2985
2986         /*
2987          * We allocate all the pending tables anyway, as we may have a
2988          * mix of RDs that have had LPIs enabled, and some that
2989          * don't. We'll free the unused ones as each CPU comes online.
2990          */
2991         for_each_possible_cpu(cpu) {
2992                 struct page *pend_page;
2993
2994                 pend_page = its_allocate_pending_table(GFP_NOWAIT);
2995                 if (!pend_page) {
2996                         pr_err("Failed to allocate PENDBASE for CPU%d\n", cpu);
2997                         return -ENOMEM;
2998                 }
2999
3000                 gic_data_rdist_cpu(cpu)->pend_page = pend_page;
3001         }
3002
3003         return 0;
3004 }
3005
3006 static u64 its_clear_vpend_valid(void __iomem *vlpi_base, u64 clr, u64 set)
3007 {
3008         u32 count = 1000000;    /* 1s! */
3009         bool clean;
3010         u64 val;
3011
3012         val = gicr_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
3013         val &= ~GICR_VPENDBASER_Valid;
3014         val &= ~clr;
3015         val |= set;
3016         gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
3017
3018         do {
3019                 val = gicr_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
3020                 clean = !(val & GICR_VPENDBASER_Dirty);
3021                 if (!clean) {
3022                         count--;
3023                         cpu_relax();
3024                         udelay(1);
3025                 }
3026         } while (!clean && count);
3027
3028         if (unlikely(val & GICR_VPENDBASER_Dirty)) {
3029                 pr_err_ratelimited("ITS virtual pending table not cleaning\n");
3030                 val |= GICR_VPENDBASER_PendingLast;
3031         }
3032
3033         return val;
3034 }
3035
3036 static void its_cpu_init_lpis(void)
3037 {
3038         void __iomem *rbase = gic_data_rdist_rd_base();
3039         struct page *pend_page;
3040         phys_addr_t paddr;
3041         u64 val, tmp;
3042
3043         if (gic_data_rdist()->lpi_enabled)
3044                 return;
3045
3046         val = readl_relaxed(rbase + GICR_CTLR);
3047         if ((gic_rdists->flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED) &&
3048             (val & GICR_CTLR_ENABLE_LPIS)) {
3049                 /*
3050                  * Check that we get the same property table on all
3051                  * RDs. If we don't, this is hopeless.
3052                  */
3053                 paddr = gicr_read_propbaser(rbase + GICR_PROPBASER);
3054                 paddr &= GENMASK_ULL(51, 12);
3055                 if (WARN_ON(gic_rdists->prop_table_pa != paddr))
3056                         add_taint(TAINT_CRAP, LOCKDEP_STILL_OK);
3057
3058                 paddr = gicr_read_pendbaser(rbase + GICR_PENDBASER);
3059                 paddr &= GENMASK_ULL(51, 16);
3060
3061                 WARN_ON(!gic_check_reserved_range(paddr, LPI_PENDBASE_SZ));
3062                 its_free_pending_table(gic_data_rdist()->pend_page);
3063                 gic_data_rdist()->pend_page = NULL;
3064
3065                 goto out;
3066         }
3067
3068         pend_page = gic_data_rdist()->pend_page;
3069         paddr = page_to_phys(pend_page);
3070         WARN_ON(gic_reserve_range(paddr, LPI_PENDBASE_SZ));
3071
3072         /* set PROPBASE */
3073         val = (gic_rdists->prop_table_pa |
3074                GICR_PROPBASER_InnerShareable |
3075                GICR_PROPBASER_RaWaWb |
3076                ((LPI_NRBITS - 1) & GICR_PROPBASER_IDBITS_MASK));
3077
3078         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
3079         tmp = gicr_read_propbaser(rbase + GICR_PROPBASER);
3080
3081         if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) {
3082                 if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) {
3083                         /*
3084                          * The HW reports non-shareable, we must
3085                          * remove the cacheability attributes as
3086                          * well.
3087                          */
3088                         val &= ~(GICR_PROPBASER_SHAREABILITY_MASK |
3089                                  GICR_PROPBASER_CACHEABILITY_MASK);
3090                         val |= GICR_PROPBASER_nC;
3091                         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
3092                 }
3093                 pr_info_once("GIC: using cache flushing for LPI property table\n");
3094                 gic_rdists->flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING;
3095         }
3096
3097         /* set PENDBASE */
3098         val = (page_to_phys(pend_page) |
3099                GICR_PENDBASER_InnerShareable |
3100                GICR_PENDBASER_RaWaWb);
3101
3102         gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
3103         tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER);
3104
3105         if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) {
3106                 /*
3107                  * The HW reports non-shareable, we must remove the
3108                  * cacheability attributes as well.
3109                  */
3110                 val &= ~(GICR_PENDBASER_SHAREABILITY_MASK |
3111                          GICR_PENDBASER_CACHEABILITY_MASK);
3112                 val |= GICR_PENDBASER_nC;
3113                 gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
3114         }
3115
3116         /* Enable LPIs */
3117         val = readl_relaxed(rbase + GICR_CTLR);
3118         val |= GICR_CTLR_ENABLE_LPIS;
3119         writel_relaxed(val, rbase + GICR_CTLR);
3120
3121         if (gic_rdists->has_vlpis && !gic_rdists->has_rvpeid) {
3122                 void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
3123
3124                 /*
3125                  * It's possible for CPU to receive VLPIs before it is
3126                  * sheduled as a vPE, especially for the first CPU, and the
3127                  * VLPI with INTID larger than 2^(IDbits+1) will be considered
3128                  * as out of range and dropped by GIC.
3129                  * So we initialize IDbits to known value to avoid VLPI drop.
3130                  */
3131                 val = (LPI_NRBITS - 1) & GICR_VPROPBASER_IDBITS_MASK;
3132                 pr_debug("GICv4: CPU%d: Init IDbits to 0x%llx for GICR_VPROPBASER\n",
3133                         smp_processor_id(), val);
3134                 gicr_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
3135
3136                 /*
3137                  * Also clear Valid bit of GICR_VPENDBASER, in case some
3138                  * ancient programming gets left in and has possibility of
3139                  * corrupting memory.
3140                  */
3141                 val = its_clear_vpend_valid(vlpi_base, 0, 0);
3142         }
3143
3144         if (allocate_vpe_l1_table()) {
3145                 /*
3146                  * If the allocation has failed, we're in massive trouble.
3147                  * Disable direct injection, and pray that no VM was
3148                  * already running...
3149                  */
3150                 gic_rdists->has_rvpeid = false;
3151                 gic_rdists->has_vlpis = false;
3152         }
3153
3154         /* Make sure the GIC has seen the above */
3155         dsb(sy);
3156 out:
3157         gic_data_rdist()->lpi_enabled = true;
3158         pr_info("GICv3: CPU%d: using %s LPI pending table @%pa\n",
3159                 smp_processor_id(),
3160                 gic_data_rdist()->pend_page ? "allocated" : "reserved",
3161                 &paddr);
3162 }
3163
3164 static void its_cpu_init_collection(struct its_node *its)
3165 {
3166         int cpu = smp_processor_id();
3167         u64 target;
3168
3169         /* avoid cross node collections and its mapping */
3170         if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
3171                 struct device_node *cpu_node;
3172
3173                 cpu_node = of_get_cpu_node(cpu, NULL);
3174                 if (its->numa_node != NUMA_NO_NODE &&
3175                         its->numa_node != of_node_to_nid(cpu_node))
3176                         return;
3177         }
3178
3179         /*
3180          * We now have to bind each collection to its target
3181          * redistributor.
3182          */
3183         if (gic_read_typer(its->base + GITS_TYPER) & GITS_TYPER_PTA) {
3184                 /*
3185                  * This ITS wants the physical address of the
3186                  * redistributor.
3187                  */
3188                 target = gic_data_rdist()->phys_base;
3189         } else {
3190                 /* This ITS wants a linear CPU number. */
3191                 target = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER);
3192                 target = GICR_TYPER_CPU_NUMBER(target) << 16;
3193         }
3194
3195         /* Perform collection mapping */
3196         its->collections[cpu].target_address = target;
3197         its->collections[cpu].col_id = cpu;
3198
3199         its_send_mapc(its, &its->collections[cpu], 1);
3200         its_send_invall(its, &its->collections[cpu]);
3201 }
3202
3203 static void its_cpu_init_collections(void)
3204 {
3205         struct its_node *its;
3206
3207         raw_spin_lock(&its_lock);
3208
3209         list_for_each_entry(its, &its_nodes, entry)
3210                 its_cpu_init_collection(its);
3211
3212         raw_spin_unlock(&its_lock);
3213 }
3214
3215 static struct its_device *its_find_device(struct its_node *its, u32 dev_id)
3216 {
3217         struct its_device *its_dev = NULL, *tmp;
3218         unsigned long flags;
3219
3220         raw_spin_lock_irqsave(&its->lock, flags);
3221
3222         list_for_each_entry(tmp, &its->its_device_list, entry) {
3223                 if (tmp->device_id == dev_id) {
3224                         its_dev = tmp;
3225                         break;
3226                 }
3227         }
3228
3229         raw_spin_unlock_irqrestore(&its->lock, flags);
3230
3231         return its_dev;
3232 }
3233
3234 static struct its_baser *its_get_baser(struct its_node *its, u32 type)
3235 {
3236         int i;
3237
3238         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
3239                 if (GITS_BASER_TYPE(its->tables[i].val) == type)
3240                         return &its->tables[i];
3241         }
3242
3243         return NULL;
3244 }
3245
3246 static bool its_alloc_table_entry(struct its_node *its,
3247                                   struct its_baser *baser, u32 id)
3248 {
3249         struct page *page;
3250         u32 esz, idx;
3251         __le64 *table;
3252
3253         /* Don't allow device id that exceeds single, flat table limit */
3254         esz = GITS_BASER_ENTRY_SIZE(baser->val);
3255         if (!(baser->val & GITS_BASER_INDIRECT))
3256                 return (id < (PAGE_ORDER_TO_SIZE(baser->order) / esz));
3257
3258         /* Compute 1st level table index & check if that exceeds table limit */
3259         idx = id >> ilog2(baser->psz / esz);
3260         if (idx >= (PAGE_ORDER_TO_SIZE(baser->order) / GITS_LVL1_ENTRY_SIZE))
3261                 return false;
3262
3263         table = baser->base;
3264
3265         /* Allocate memory for 2nd level table */
3266         if (!table[idx]) {
3267                 page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO,
3268                                         get_order(baser->psz));
3269                 if (!page)
3270                         return false;
3271
3272                 /* Flush Lvl2 table to PoC if hw doesn't support coherency */
3273                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
3274                         gic_flush_dcache_to_poc(page_address(page), baser->psz);
3275
3276                 table[idx] = cpu_to_le64(page_to_phys(page) | GITS_BASER_VALID);
3277
3278                 /* Flush Lvl1 entry to PoC if hw doesn't support coherency */
3279                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
3280                         gic_flush_dcache_to_poc(table + idx, GITS_LVL1_ENTRY_SIZE);
3281
3282                 /* Ensure updated table contents are visible to ITS hardware */
3283                 dsb(sy);
3284         }
3285
3286         return true;
3287 }
3288
3289 static bool its_alloc_device_table(struct its_node *its, u32 dev_id)
3290 {
3291         struct its_baser *baser;
3292
3293         baser = its_get_baser(its, GITS_BASER_TYPE_DEVICE);
3294
3295         /* Don't allow device id that exceeds ITS hardware limit */
3296         if (!baser)
3297                 return (ilog2(dev_id) < device_ids(its));
3298
3299         return its_alloc_table_entry(its, baser, dev_id);
3300 }
3301
3302 static bool its_alloc_vpe_table(u32 vpe_id)
3303 {
3304         struct its_node *its;
3305         int cpu;
3306
3307         /*
3308          * Make sure the L2 tables are allocated on *all* v4 ITSs. We
3309          * could try and only do it on ITSs corresponding to devices
3310          * that have interrupts targeted at this VPE, but the
3311          * complexity becomes crazy (and you have tons of memory
3312          * anyway, right?).
3313          */
3314         list_for_each_entry(its, &its_nodes, entry) {
3315                 struct its_baser *baser;
3316
3317                 if (!is_v4(its))
3318                         continue;
3319
3320                 baser = its_get_baser(its, GITS_BASER_TYPE_VCPU);
3321                 if (!baser)
3322                         return false;
3323
3324                 if (!its_alloc_table_entry(its, baser, vpe_id))
3325                         return false;
3326         }
3327
3328         /* Non v4.1? No need to iterate RDs and go back early. */
3329         if (!gic_rdists->has_rvpeid)
3330                 return true;
3331
3332         /*
3333          * Make sure the L2 tables are allocated for all copies of
3334          * the L1 table on *all* v4.1 RDs.
3335          */
3336         for_each_possible_cpu(cpu) {
3337                 if (!allocate_vpe_l2_table(cpu, vpe_id))
3338                         return false;
3339         }
3340
3341         return true;
3342 }
3343
3344 static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
3345                                             int nvecs, bool alloc_lpis)
3346 {
3347         struct its_device *dev;
3348         unsigned long *lpi_map = NULL;
3349         unsigned long flags;
3350         u16 *col_map = NULL;
3351         void *itt;
3352         int lpi_base;
3353         int nr_lpis;
3354         int nr_ites;
3355         int sz;
3356
3357         if (!its_alloc_device_table(its, dev_id))
3358                 return NULL;
3359
3360         if (WARN_ON(!is_power_of_2(nvecs)))
3361                 nvecs = roundup_pow_of_two(nvecs);
3362
3363         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3364         /*
3365          * Even if the device wants a single LPI, the ITT must be
3366          * sized as a power of two (and you need at least one bit...).
3367          */
3368         nr_ites = max(2, nvecs);
3369         sz = nr_ites * (FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, its->typer) + 1);
3370         sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
3371         itt = kzalloc_node(sz, GFP_KERNEL, its->numa_node);
3372         if (alloc_lpis) {
3373                 lpi_map = its_lpi_alloc(nvecs, &lpi_base, &nr_lpis);
3374                 if (lpi_map)
3375                         col_map = kcalloc(nr_lpis, sizeof(*col_map),
3376                                           GFP_KERNEL);
3377         } else {
3378                 col_map = kcalloc(nr_ites, sizeof(*col_map), GFP_KERNEL);
3379                 nr_lpis = 0;
3380                 lpi_base = 0;
3381         }
3382
3383         if (!dev || !itt ||  !col_map || (!lpi_map && alloc_lpis)) {
3384                 kfree(dev);
3385                 kfree(itt);
3386                 kfree(lpi_map);
3387                 kfree(col_map);
3388                 return NULL;
3389         }
3390
3391         gic_flush_dcache_to_poc(itt, sz);
3392
3393         dev->its = its;
3394         dev->itt = itt;
3395         dev->nr_ites = nr_ites;
3396         dev->event_map.lpi_map = lpi_map;
3397         dev->event_map.col_map = col_map;
3398         dev->event_map.lpi_base = lpi_base;
3399         dev->event_map.nr_lpis = nr_lpis;
3400         raw_spin_lock_init(&dev->event_map.vlpi_lock);
3401         dev->device_id = dev_id;
3402         INIT_LIST_HEAD(&dev->entry);
3403
3404         raw_spin_lock_irqsave(&its->lock, flags);
3405         list_add(&dev->entry, &its->its_device_list);
3406         raw_spin_unlock_irqrestore(&its->lock, flags);
3407
3408         /* Map device to its ITT */
3409         its_send_mapd(dev, 1);
3410
3411         return dev;
3412 }
3413
3414 static void its_free_device(struct its_device *its_dev)
3415 {
3416         unsigned long flags;
3417
3418         raw_spin_lock_irqsave(&its_dev->its->lock, flags);
3419         list_del(&its_dev->entry);
3420         raw_spin_unlock_irqrestore(&its_dev->its->lock, flags);
3421         kfree(its_dev->event_map.col_map);
3422         kfree(its_dev->itt);
3423         kfree(its_dev);
3424 }
3425
3426 static int its_alloc_device_irq(struct its_device *dev, int nvecs, irq_hw_number_t *hwirq)
3427 {
3428         int idx;
3429
3430         /* Find a free LPI region in lpi_map and allocate them. */
3431         idx = bitmap_find_free_region(dev->event_map.lpi_map,
3432                                       dev->event_map.nr_lpis,
3433                                       get_count_order(nvecs));
3434         if (idx < 0)
3435                 return -ENOSPC;
3436
3437         *hwirq = dev->event_map.lpi_base + idx;
3438
3439         return 0;
3440 }
3441
3442 static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
3443                            int nvec, msi_alloc_info_t *info)
3444 {
3445         struct its_node *its;
3446         struct its_device *its_dev;
3447         struct msi_domain_info *msi_info;
3448         u32 dev_id;
3449         int err = 0;
3450
3451         /*
3452          * We ignore "dev" entirely, and rely on the dev_id that has
3453          * been passed via the scratchpad. This limits this domain's
3454          * usefulness to upper layers that definitely know that they
3455          * are built on top of the ITS.
3456          */
3457         dev_id = info->scratchpad[0].ul;
3458
3459         msi_info = msi_get_domain_info(domain);
3460         its = msi_info->data;
3461
3462         if (!gic_rdists->has_direct_lpi &&
3463             vpe_proxy.dev &&
3464             vpe_proxy.dev->its == its &&
3465             dev_id == vpe_proxy.dev->device_id) {
3466                 /* Bad luck. Get yourself a better implementation */
3467                 WARN_ONCE(1, "DevId %x clashes with GICv4 VPE proxy device\n",
3468                           dev_id);
3469                 return -EINVAL;
3470         }
3471
3472         mutex_lock(&its->dev_alloc_lock);
3473         its_dev = its_find_device(its, dev_id);
3474         if (its_dev) {
3475                 /*
3476                  * We already have seen this ID, probably through
3477                  * another alias (PCI bridge of some sort). No need to
3478                  * create the device.
3479                  */
3480                 its_dev->shared = true;
3481                 pr_debug("Reusing ITT for devID %x\n", dev_id);
3482                 goto out;
3483         }
3484
3485         its_dev = its_create_device(its, dev_id, nvec, true);
3486         if (!its_dev) {
3487                 err = -ENOMEM;
3488                 goto out;
3489         }
3490
3491         pr_debug("ITT %d entries, %d bits\n", nvec, ilog2(nvec));
3492 out:
3493         mutex_unlock(&its->dev_alloc_lock);
3494         info->scratchpad[0].ptr = its_dev;
3495         return err;
3496 }
3497
3498 static struct msi_domain_ops its_msi_domain_ops = {
3499         .msi_prepare    = its_msi_prepare,
3500 };
3501
3502 static int its_irq_gic_domain_alloc(struct irq_domain *domain,
3503                                     unsigned int virq,
3504                                     irq_hw_number_t hwirq)
3505 {
3506         struct irq_fwspec fwspec;
3507
3508         if (irq_domain_get_of_node(domain->parent)) {
3509                 fwspec.fwnode = domain->parent->fwnode;
3510                 fwspec.param_count = 3;
3511                 fwspec.param[0] = GIC_IRQ_TYPE_LPI;
3512                 fwspec.param[1] = hwirq;
3513                 fwspec.param[2] = IRQ_TYPE_EDGE_RISING;
3514         } else if (is_fwnode_irqchip(domain->parent->fwnode)) {
3515                 fwspec.fwnode = domain->parent->fwnode;
3516                 fwspec.param_count = 2;
3517                 fwspec.param[0] = hwirq;
3518                 fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
3519         } else {
3520                 return -EINVAL;
3521         }
3522
3523         return irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec);
3524 }
3525
3526 static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
3527                                 unsigned int nr_irqs, void *args)
3528 {
3529         msi_alloc_info_t *info = args;
3530         struct its_device *its_dev = info->scratchpad[0].ptr;
3531         struct its_node *its = its_dev->its;
3532         struct irq_data *irqd;
3533         irq_hw_number_t hwirq;
3534         int err;
3535         int i;
3536
3537         err = its_alloc_device_irq(its_dev, nr_irqs, &hwirq);
3538         if (err)
3539                 return err;
3540
3541         err = iommu_dma_prepare_msi(info->desc, its->get_msi_base(its_dev));
3542         if (err)
3543                 return err;
3544
3545         for (i = 0; i < nr_irqs; i++) {
3546                 err = its_irq_gic_domain_alloc(domain, virq + i, hwirq + i);
3547                 if (err)
3548                         return err;
3549
3550                 irq_domain_set_hwirq_and_chip(domain, virq + i,
3551                                               hwirq + i, &its_irq_chip, its_dev);
3552                 irqd = irq_get_irq_data(virq + i);
3553                 irqd_set_single_target(irqd);
3554                 irqd_set_affinity_on_activate(irqd);
3555                 pr_debug("ID:%d pID:%d vID:%d\n",
3556                          (int)(hwirq + i - its_dev->event_map.lpi_base),
3557                          (int)(hwirq + i), virq + i);
3558         }
3559
3560         return 0;
3561 }
3562
3563 static int its_irq_domain_activate(struct irq_domain *domain,
3564                                    struct irq_data *d, bool reserve)
3565 {
3566         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3567         u32 event = its_get_event_id(d);
3568         int cpu;
3569
3570         cpu = its_select_cpu(d, cpu_online_mask);
3571         if (cpu < 0 || cpu >= nr_cpu_ids)
3572                 return -EINVAL;
3573
3574         its_inc_lpi_count(d, cpu);
3575         its_dev->event_map.col_map[event] = cpu;
3576         irq_data_update_effective_affinity(d, cpumask_of(cpu));
3577
3578         /* Map the GIC IRQ and event to the device */
3579         its_send_mapti(its_dev, d->hwirq, event);
3580         return 0;
3581 }
3582
3583 static void its_irq_domain_deactivate(struct irq_domain *domain,
3584                                       struct irq_data *d)
3585 {
3586         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3587         u32 event = its_get_event_id(d);
3588
3589         its_dec_lpi_count(d, its_dev->event_map.col_map[event]);
3590         /* Stop the delivery of interrupts */
3591         its_send_discard(its_dev, event);
3592 }
3593
3594 static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
3595                                 unsigned int nr_irqs)
3596 {
3597         struct irq_data *d = irq_domain_get_irq_data(domain, virq);
3598         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3599         struct its_node *its = its_dev->its;
3600         int i;
3601
3602         bitmap_release_region(its_dev->event_map.lpi_map,
3603                               its_get_event_id(irq_domain_get_irq_data(domain, virq)),
3604                               get_count_order(nr_irqs));
3605
3606         for (i = 0; i < nr_irqs; i++) {
3607                 struct irq_data *data = irq_domain_get_irq_data(domain,
3608                                                                 virq + i);
3609                 /* Nuke the entry in the domain */
3610                 irq_domain_reset_irq_data(data);
3611         }
3612
3613         mutex_lock(&its->dev_alloc_lock);
3614
3615         /*
3616          * If all interrupts have been freed, start mopping the
3617          * floor. This is conditionned on the device not being shared.
3618          */
3619         if (!its_dev->shared &&
3620             bitmap_empty(its_dev->event_map.lpi_map,
3621                          its_dev->event_map.nr_lpis)) {
3622                 its_lpi_free(its_dev->event_map.lpi_map,
3623                              its_dev->event_map.lpi_base,
3624                              its_dev->event_map.nr_lpis);
3625
3626                 /* Unmap device/itt */
3627                 its_send_mapd(its_dev, 0);
3628                 its_free_device(its_dev);
3629         }
3630
3631         mutex_unlock(&its->dev_alloc_lock);
3632
3633         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
3634 }
3635
3636 static const struct irq_domain_ops its_domain_ops = {
3637         .alloc                  = its_irq_domain_alloc,
3638         .free                   = its_irq_domain_free,
3639         .activate               = its_irq_domain_activate,
3640         .deactivate             = its_irq_domain_deactivate,
3641 };
3642
3643 /*
3644  * This is insane.
3645  *
3646  * If a GICv4.0 doesn't implement Direct LPIs (which is extremely
3647  * likely), the only way to perform an invalidate is to use a fake
3648  * device to issue an INV command, implying that the LPI has first
3649  * been mapped to some event on that device. Since this is not exactly
3650  * cheap, we try to keep that mapping around as long as possible, and
3651  * only issue an UNMAP if we're short on available slots.
3652  *
3653  * Broken by design(tm).
3654  *
3655  * GICv4.1, on the other hand, mandates that we're able to invalidate
3656  * by writing to a MMIO register. It doesn't implement the whole of
3657  * DirectLPI, but that's good enough. And most of the time, we don't
3658  * even have to invalidate anything, as the redistributor can be told
3659  * whether to generate a doorbell or not (we thus leave it enabled,
3660  * always).
3661  */
3662 static void its_vpe_db_proxy_unmap_locked(struct its_vpe *vpe)
3663 {
3664         /* GICv4.1 doesn't use a proxy, so nothing to do here */
3665         if (gic_rdists->has_rvpeid)
3666                 return;
3667
3668         /* Already unmapped? */
3669         if (vpe->vpe_proxy_event == -1)
3670                 return;
3671
3672         its_send_discard(vpe_proxy.dev, vpe->vpe_proxy_event);
3673         vpe_proxy.vpes[vpe->vpe_proxy_event] = NULL;
3674
3675         /*
3676          * We don't track empty slots at all, so let's move the
3677          * next_victim pointer if we can quickly reuse that slot
3678          * instead of nuking an existing entry. Not clear that this is
3679          * always a win though, and this might just generate a ripple
3680          * effect... Let's just hope VPEs don't migrate too often.
3681          */
3682         if (vpe_proxy.vpes[vpe_proxy.next_victim])
3683                 vpe_proxy.next_victim = vpe->vpe_proxy_event;
3684
3685         vpe->vpe_proxy_event = -1;
3686 }
3687
3688 static void its_vpe_db_proxy_unmap(struct its_vpe *vpe)
3689 {
3690         /* GICv4.1 doesn't use a proxy, so nothing to do here */
3691         if (gic_rdists->has_rvpeid)
3692                 return;
3693
3694         if (!gic_rdists->has_direct_lpi) {
3695                 unsigned long flags;
3696
3697                 raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
3698                 its_vpe_db_proxy_unmap_locked(vpe);
3699                 raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
3700         }
3701 }
3702
3703 static void its_vpe_db_proxy_map_locked(struct its_vpe *vpe)
3704 {
3705         /* GICv4.1 doesn't use a proxy, so nothing to do here */
3706         if (gic_rdists->has_rvpeid)
3707                 return;
3708
3709         /* Already mapped? */
3710         if (vpe->vpe_proxy_event != -1)
3711                 return;
3712
3713         /* This slot was already allocated. Kick the other VPE out. */
3714         if (vpe_proxy.vpes[vpe_proxy.next_victim])
3715                 its_vpe_db_proxy_unmap_locked(vpe_proxy.vpes[vpe_proxy.next_victim]);
3716
3717         /* Map the new VPE instead */
3718         vpe_proxy.vpes[vpe_proxy.next_victim] = vpe;
3719         vpe->vpe_proxy_event = vpe_proxy.next_victim;
3720         vpe_proxy.next_victim = (vpe_proxy.next_victim + 1) % vpe_proxy.dev->nr_ites;
3721
3722         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = vpe->col_idx;
3723         its_send_mapti(vpe_proxy.dev, vpe->vpe_db_lpi, vpe->vpe_proxy_event);
3724 }
3725
3726 static void its_vpe_db_proxy_move(struct its_vpe *vpe, int from, int to)
3727 {
3728         unsigned long flags;
3729         struct its_collection *target_col;
3730
3731         /* GICv4.1 doesn't use a proxy, so nothing to do here */
3732         if (gic_rdists->has_rvpeid)
3733                 return;
3734
3735         if (gic_rdists->has_direct_lpi) {
3736                 void __iomem *rdbase;
3737
3738                 rdbase = per_cpu_ptr(gic_rdists->rdist, from)->rd_base;
3739                 gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
3740                 wait_for_syncr(rdbase);
3741
3742                 return;
3743         }
3744
3745         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
3746
3747         its_vpe_db_proxy_map_locked(vpe);
3748
3749         target_col = &vpe_proxy.dev->its->collections[to];
3750         its_send_movi(vpe_proxy.dev, target_col, vpe->vpe_proxy_event);
3751         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = to;
3752
3753         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
3754 }
3755
3756 static int its_vpe_set_affinity(struct irq_data *d,
3757                                 const struct cpumask *mask_val,
3758                                 bool force)
3759 {
3760         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
3761         int from, cpu = cpumask_first(mask_val);
3762         unsigned long flags;
3763
3764         /*
3765          * Changing affinity is mega expensive, so let's be as lazy as
3766          * we can and only do it if we really have to. Also, if mapped
3767          * into the proxy device, we need to move the doorbell
3768          * interrupt to its new location.
3769          *
3770          * Another thing is that changing the affinity of a vPE affects
3771          * *other interrupts* such as all the vLPIs that are routed to
3772          * this vPE. This means that the irq_desc lock is not enough to
3773          * protect us, and that we must ensure nobody samples vpe->col_idx
3774          * during the update, hence the lock below which must also be
3775          * taken on any vLPI handling path that evaluates vpe->col_idx.
3776          */
3777         from = vpe_to_cpuid_lock(vpe, &flags);
3778         if (from == cpu)
3779                 goto out;
3780
3781         vpe->col_idx = cpu;
3782
3783         /*
3784          * GICv4.1 allows us to skip VMOVP if moving to a cpu whose RD
3785          * is sharing its VPE table with the current one.
3786          */
3787         if (gic_data_rdist_cpu(cpu)->vpe_table_mask &&
3788             cpumask_test_cpu(from, gic_data_rdist_cpu(cpu)->vpe_table_mask))
3789                 goto out;
3790
3791         its_send_vmovp(vpe);
3792         its_vpe_db_proxy_move(vpe, from, cpu);
3793
3794 out:
3795         irq_data_update_effective_affinity(d, cpumask_of(cpu));
3796         vpe_to_cpuid_unlock(vpe, flags);
3797
3798         return IRQ_SET_MASK_OK_DONE;
3799 }
3800
3801 static void its_wait_vpt_parse_complete(void)
3802 {
3803         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
3804         u64 val;
3805
3806         if (!gic_rdists->has_vpend_valid_dirty)
3807                 return;
3808
3809         WARN_ON_ONCE(readq_relaxed_poll_timeout_atomic(vlpi_base + GICR_VPENDBASER,
3810                                                        val,
3811                                                        !(val & GICR_VPENDBASER_Dirty),
3812                                                        10, 500));
3813 }
3814
3815 static void its_vpe_schedule(struct its_vpe *vpe)
3816 {
3817         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
3818         u64 val;
3819
3820         /* Schedule the VPE */
3821         val  = virt_to_phys(page_address(vpe->its_vm->vprop_page)) &
3822                 GENMASK_ULL(51, 12);
3823         val |= (LPI_NRBITS - 1) & GICR_VPROPBASER_IDBITS_MASK;
3824         val |= GICR_VPROPBASER_RaWb;
3825         val |= GICR_VPROPBASER_InnerShareable;
3826         gicr_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
3827
3828         val  = virt_to_phys(page_address(vpe->vpt_page)) &
3829                 GENMASK_ULL(51, 16);
3830         val |= GICR_VPENDBASER_RaWaWb;
3831         val |= GICR_VPENDBASER_InnerShareable;
3832         /*
3833          * There is no good way of finding out if the pending table is
3834          * empty as we can race against the doorbell interrupt very
3835          * easily. So in the end, vpe->pending_last is only an
3836          * indication that the vcpu has something pending, not one
3837          * that the pending table is empty. A good implementation
3838          * would be able to read its coarse map pretty quickly anyway,
3839          * making this a tolerable issue.
3840          */
3841         val |= GICR_VPENDBASER_PendingLast;
3842         val |= vpe->idai ? GICR_VPENDBASER_IDAI : 0;
3843         val |= GICR_VPENDBASER_Valid;
3844         gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
3845
3846         its_wait_vpt_parse_complete();
3847 }
3848
3849 static void its_vpe_deschedule(struct its_vpe *vpe)
3850 {
3851         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
3852         u64 val;
3853
3854         val = its_clear_vpend_valid(vlpi_base, 0, 0);
3855
3856         vpe->idai = !!(val & GICR_VPENDBASER_IDAI);
3857         vpe->pending_last = !!(val & GICR_VPENDBASER_PendingLast);
3858 }
3859
3860 static void its_vpe_invall(struct its_vpe *vpe)
3861 {
3862         struct its_node *its;
3863
3864         list_for_each_entry(its, &its_nodes, entry) {
3865                 if (!is_v4(its))
3866                         continue;
3867
3868                 if (its_list_map && !vpe->its_vm->vlpi_count[its->list_nr])
3869                         continue;
3870
3871                 /*
3872                  * Sending a VINVALL to a single ITS is enough, as all
3873                  * we need is to reach the redistributors.
3874                  */
3875                 its_send_vinvall(its, vpe);
3876                 return;
3877         }
3878 }
3879
3880 static int its_vpe_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
3881 {
3882         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
3883         struct its_cmd_info *info = vcpu_info;
3884
3885         switch (info->cmd_type) {
3886         case SCHEDULE_VPE:
3887                 its_vpe_schedule(vpe);
3888                 return 0;
3889
3890         case DESCHEDULE_VPE:
3891                 its_vpe_deschedule(vpe);
3892                 return 0;
3893
3894         case INVALL_VPE:
3895                 its_vpe_invall(vpe);
3896                 return 0;
3897
3898         default:
3899                 return -EINVAL;
3900         }
3901 }
3902
3903 static void its_vpe_send_cmd(struct its_vpe *vpe,
3904                              void (*cmd)(struct its_device *, u32))
3905 {
3906         unsigned long flags;
3907
3908         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
3909
3910         its_vpe_db_proxy_map_locked(vpe);
3911         cmd(vpe_proxy.dev, vpe->vpe_proxy_event);
3912
3913         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
3914 }
3915
3916 static void its_vpe_send_inv(struct irq_data *d)
3917 {
3918         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
3919
3920         if (gic_rdists->has_direct_lpi) {
3921                 void __iomem *rdbase;
3922
3923                 /* Target the redistributor this VPE is currently known on */
3924                 raw_spin_lock(&gic_data_rdist_cpu(vpe->col_idx)->rd_lock);
3925                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
3926                 gic_write_lpir(d->parent_data->hwirq, rdbase + GICR_INVLPIR);
3927                 wait_for_syncr(rdbase);
3928                 raw_spin_unlock(&gic_data_rdist_cpu(vpe->col_idx)->rd_lock);
3929         } else {
3930                 its_vpe_send_cmd(vpe, its_send_inv);
3931         }
3932 }
3933
3934 static void its_vpe_mask_irq(struct irq_data *d)
3935 {
3936         /*
3937          * We need to unmask the LPI, which is described by the parent
3938          * irq_data. Instead of calling into the parent (which won't
3939          * exactly do the right thing, let's simply use the
3940          * parent_data pointer. Yes, I'm naughty.
3941          */
3942         lpi_write_config(d->parent_data, LPI_PROP_ENABLED, 0);
3943         its_vpe_send_inv(d);
3944 }
3945
3946 static void its_vpe_unmask_irq(struct irq_data *d)
3947 {
3948         /* Same hack as above... */
3949         lpi_write_config(d->parent_data, 0, LPI_PROP_ENABLED);
3950         its_vpe_send_inv(d);
3951 }
3952
3953 static int its_vpe_set_irqchip_state(struct irq_data *d,
3954                                      enum irqchip_irq_state which,
3955                                      bool state)
3956 {
3957         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
3958
3959         if (which != IRQCHIP_STATE_PENDING)
3960                 return -EINVAL;
3961
3962         if (gic_rdists->has_direct_lpi) {
3963                 void __iomem *rdbase;
3964
3965                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
3966                 if (state) {
3967                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_SETLPIR);
3968                 } else {
3969                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
3970                         wait_for_syncr(rdbase);
3971                 }
3972         } else {
3973                 if (state)
3974                         its_vpe_send_cmd(vpe, its_send_int);
3975                 else
3976                         its_vpe_send_cmd(vpe, its_send_clear);
3977         }
3978
3979         return 0;
3980 }
3981
3982 static int its_vpe_retrigger(struct irq_data *d)
3983 {
3984         return !its_vpe_set_irqchip_state(d, IRQCHIP_STATE_PENDING, true);
3985 }
3986
3987 static struct irq_chip its_vpe_irq_chip = {
3988         .name                   = "GICv4-vpe",
3989         .irq_mask               = its_vpe_mask_irq,
3990         .irq_unmask             = its_vpe_unmask_irq,
3991         .irq_eoi                = irq_chip_eoi_parent,
3992         .irq_set_affinity       = its_vpe_set_affinity,
3993         .irq_retrigger          = its_vpe_retrigger,
3994         .irq_set_irqchip_state  = its_vpe_set_irqchip_state,
3995         .irq_set_vcpu_affinity  = its_vpe_set_vcpu_affinity,
3996 };
3997
3998 static struct its_node *find_4_1_its(void)
3999 {
4000         static struct its_node *its = NULL;
4001
4002         if (!its) {
4003                 list_for_each_entry(its, &its_nodes, entry) {
4004                         if (is_v4_1(its))
4005                                 return its;
4006                 }
4007
4008                 /* Oops? */
4009                 its = NULL;
4010         }
4011
4012         return its;
4013 }
4014
4015 static void its_vpe_4_1_send_inv(struct irq_data *d)
4016 {
4017         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4018         struct its_node *its;
4019
4020         /*
4021          * GICv4.1 wants doorbells to be invalidated using the
4022          * INVDB command in order to be broadcast to all RDs. Send
4023          * it to the first valid ITS, and let the HW do its magic.
4024          */
4025         its = find_4_1_its();
4026         if (its)
4027                 its_send_invdb(its, vpe);
4028 }
4029
4030 static void its_vpe_4_1_mask_irq(struct irq_data *d)
4031 {
4032         lpi_write_config(d->parent_data, LPI_PROP_ENABLED, 0);
4033         its_vpe_4_1_send_inv(d);
4034 }
4035
4036 static void its_vpe_4_1_unmask_irq(struct irq_data *d)
4037 {
4038         lpi_write_config(d->parent_data, 0, LPI_PROP_ENABLED);
4039         its_vpe_4_1_send_inv(d);
4040 }
4041
4042 static void its_vpe_4_1_schedule(struct its_vpe *vpe,
4043                                  struct its_cmd_info *info)
4044 {
4045         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
4046         u64 val = 0;
4047
4048         /* Schedule the VPE */
4049         val |= GICR_VPENDBASER_Valid;
4050         val |= info->g0en ? GICR_VPENDBASER_4_1_VGRP0EN : 0;
4051         val |= info->g1en ? GICR_VPENDBASER_4_1_VGRP1EN : 0;
4052         val |= FIELD_PREP(GICR_VPENDBASER_4_1_VPEID, vpe->vpe_id);
4053
4054         gicr_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
4055
4056         its_wait_vpt_parse_complete();
4057 }
4058
4059 static void its_vpe_4_1_deschedule(struct its_vpe *vpe,
4060                                    struct its_cmd_info *info)
4061 {
4062         void __iomem *vlpi_base = gic_data_rdist_vlpi_base();
4063         u64 val;
4064
4065         if (info->req_db) {
4066                 unsigned long flags;
4067
4068                 /*
4069                  * vPE is going to block: make the vPE non-resident with
4070                  * PendingLast clear and DB set. The GIC guarantees that if
4071                  * we read-back PendingLast clear, then a doorbell will be
4072                  * delivered when an interrupt comes.
4073                  *
4074                  * Note the locking to deal with the concurrent update of
4075                  * pending_last from the doorbell interrupt handler that can
4076                  * run concurrently.
4077                  */
4078                 raw_spin_lock_irqsave(&vpe->vpe_lock, flags);
4079                 val = its_clear_vpend_valid(vlpi_base,
4080                                             GICR_VPENDBASER_PendingLast,
4081                                             GICR_VPENDBASER_4_1_DB);
4082                 vpe->pending_last = !!(val & GICR_VPENDBASER_PendingLast);
4083                 raw_spin_unlock_irqrestore(&vpe->vpe_lock, flags);
4084         } else {
4085                 /*
4086                  * We're not blocking, so just make the vPE non-resident
4087                  * with PendingLast set, indicating that we'll be back.
4088                  */
4089                 val = its_clear_vpend_valid(vlpi_base,
4090                                             0,
4091                                             GICR_VPENDBASER_PendingLast);
4092                 vpe->pending_last = true;
4093         }
4094 }
4095
4096 static void its_vpe_4_1_invall(struct its_vpe *vpe)
4097 {
4098         void __iomem *rdbase;
4099         unsigned long flags;
4100         u64 val;
4101         int cpu;
4102
4103         val  = GICR_INVALLR_V;
4104         val |= FIELD_PREP(GICR_INVALLR_VPEID, vpe->vpe_id);
4105
4106         /* Target the redistributor this vPE is currently known on */
4107         cpu = vpe_to_cpuid_lock(vpe, &flags);
4108         raw_spin_lock(&gic_data_rdist_cpu(cpu)->rd_lock);
4109         rdbase = per_cpu_ptr(gic_rdists->rdist, cpu)->rd_base;
4110         gic_write_lpir(val, rdbase + GICR_INVALLR);
4111
4112         wait_for_syncr(rdbase);
4113         raw_spin_unlock(&gic_data_rdist_cpu(cpu)->rd_lock);
4114         vpe_to_cpuid_unlock(vpe, flags);
4115 }
4116
4117 static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
4118 {
4119         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4120         struct its_cmd_info *info = vcpu_info;
4121
4122         switch (info->cmd_type) {
4123         case SCHEDULE_VPE:
4124                 its_vpe_4_1_schedule(vpe, info);
4125                 return 0;
4126
4127         case DESCHEDULE_VPE:
4128                 its_vpe_4_1_deschedule(vpe, info);
4129                 return 0;
4130
4131         case INVALL_VPE:
4132                 its_vpe_4_1_invall(vpe);
4133                 return 0;
4134
4135         default:
4136                 return -EINVAL;
4137         }
4138 }
4139
4140 static struct irq_chip its_vpe_4_1_irq_chip = {
4141         .name                   = "GICv4.1-vpe",
4142         .irq_mask               = its_vpe_4_1_mask_irq,
4143         .irq_unmask             = its_vpe_4_1_unmask_irq,
4144         .irq_eoi                = irq_chip_eoi_parent,
4145         .irq_set_affinity       = its_vpe_set_affinity,
4146         .irq_set_vcpu_affinity  = its_vpe_4_1_set_vcpu_affinity,
4147 };
4148
4149 static void its_configure_sgi(struct irq_data *d, bool clear)
4150 {
4151         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4152         struct its_cmd_desc desc;
4153
4154         desc.its_vsgi_cmd.vpe = vpe;
4155         desc.its_vsgi_cmd.sgi = d->hwirq;
4156         desc.its_vsgi_cmd.priority = vpe->sgi_config[d->hwirq].priority;
4157         desc.its_vsgi_cmd.enable = vpe->sgi_config[d->hwirq].enabled;
4158         desc.its_vsgi_cmd.group = vpe->sgi_config[d->hwirq].group;
4159         desc.its_vsgi_cmd.clear = clear;
4160
4161         /*
4162          * GICv4.1 allows us to send VSGI commands to any ITS as long as the
4163          * destination VPE is mapped there. Since we map them eagerly at
4164          * activation time, we're pretty sure the first GICv4.1 ITS will do.
4165          */
4166         its_send_single_vcommand(find_4_1_its(), its_build_vsgi_cmd, &desc);
4167 }
4168
4169 static void its_sgi_mask_irq(struct irq_data *d)
4170 {
4171         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4172
4173         vpe->sgi_config[d->hwirq].enabled = false;
4174         its_configure_sgi(d, false);
4175 }
4176
4177 static void its_sgi_unmask_irq(struct irq_data *d)
4178 {
4179         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4180
4181         vpe->sgi_config[d->hwirq].enabled = true;
4182         its_configure_sgi(d, false);
4183 }
4184
4185 static int its_sgi_set_affinity(struct irq_data *d,
4186                                 const struct cpumask *mask_val,
4187                                 bool force)
4188 {
4189         /*
4190          * There is no notion of affinity for virtual SGIs, at least
4191          * not on the host (since they can only be targetting a vPE).
4192          * Tell the kernel we've done whatever it asked for.
4193          */
4194         irq_data_update_effective_affinity(d, mask_val);
4195         return IRQ_SET_MASK_OK;
4196 }
4197
4198 static int its_sgi_set_irqchip_state(struct irq_data *d,
4199                                      enum irqchip_irq_state which,
4200                                      bool state)
4201 {
4202         if (which != IRQCHIP_STATE_PENDING)
4203                 return -EINVAL;
4204
4205         if (state) {
4206                 struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4207                 struct its_node *its = find_4_1_its();
4208                 u64 val;
4209
4210                 val  = FIELD_PREP(GITS_SGIR_VPEID, vpe->vpe_id);
4211                 val |= FIELD_PREP(GITS_SGIR_VINTID, d->hwirq);
4212                 writeq_relaxed(val, its->sgir_base + GITS_SGIR - SZ_128K);
4213         } else {
4214                 its_configure_sgi(d, true);
4215         }
4216
4217         return 0;
4218 }
4219
4220 static int its_sgi_get_irqchip_state(struct irq_data *d,
4221                                      enum irqchip_irq_state which, bool *val)
4222 {
4223         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4224         void __iomem *base;
4225         unsigned long flags;
4226         u32 count = 1000000;    /* 1s! */
4227         u32 status;
4228         int cpu;
4229
4230         if (which != IRQCHIP_STATE_PENDING)
4231                 return -EINVAL;
4232
4233         /*
4234          * Locking galore! We can race against two different events:
4235          *
4236          * - Concurent vPE affinity change: we must make sure it cannot
4237          *   happen, or we'll talk to the wrong redistributor. This is
4238          *   identical to what happens with vLPIs.
4239          *
4240          * - Concurrent VSGIPENDR access: As it involves accessing two
4241          *   MMIO registers, this must be made atomic one way or another.
4242          */
4243         cpu = vpe_to_cpuid_lock(vpe, &flags);
4244         raw_spin_lock(&gic_data_rdist_cpu(cpu)->rd_lock);
4245         base = gic_data_rdist_cpu(cpu)->rd_base + SZ_128K;
4246         writel_relaxed(vpe->vpe_id, base + GICR_VSGIR);
4247         do {
4248                 status = readl_relaxed(base + GICR_VSGIPENDR);
4249                 if (!(status & GICR_VSGIPENDR_BUSY))
4250                         goto out;
4251
4252                 count--;
4253                 if (!count) {
4254                         pr_err_ratelimited("Unable to get SGI status\n");
4255                         goto out;
4256                 }
4257                 cpu_relax();
4258                 udelay(1);
4259         } while (count);
4260
4261 out:
4262         raw_spin_unlock(&gic_data_rdist_cpu(cpu)->rd_lock);
4263         vpe_to_cpuid_unlock(vpe, flags);
4264
4265         if (!count)
4266                 return -ENXIO;
4267
4268         *val = !!(status & (1 << d->hwirq));
4269
4270         return 0;
4271 }
4272
4273 static int its_sgi_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
4274 {
4275         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4276         struct its_cmd_info *info = vcpu_info;
4277
4278         switch (info->cmd_type) {
4279         case PROP_UPDATE_VSGI:
4280                 vpe->sgi_config[d->hwirq].priority = info->priority;
4281                 vpe->sgi_config[d->hwirq].group = info->group;
4282                 its_configure_sgi(d, false);
4283                 return 0;
4284
4285         default:
4286                 return -EINVAL;
4287         }
4288 }
4289
4290 static struct irq_chip its_sgi_irq_chip = {
4291         .name                   = "GICv4.1-sgi",
4292         .irq_mask               = its_sgi_mask_irq,
4293         .irq_unmask             = its_sgi_unmask_irq,
4294         .irq_set_affinity       = its_sgi_set_affinity,
4295         .irq_set_irqchip_state  = its_sgi_set_irqchip_state,
4296         .irq_get_irqchip_state  = its_sgi_get_irqchip_state,
4297         .irq_set_vcpu_affinity  = its_sgi_set_vcpu_affinity,
4298 };
4299
4300 static int its_sgi_irq_domain_alloc(struct irq_domain *domain,
4301                                     unsigned int virq, unsigned int nr_irqs,
4302                                     void *args)
4303 {
4304         struct its_vpe *vpe = args;
4305         int i;
4306
4307         /* Yes, we do want 16 SGIs */
4308         WARN_ON(nr_irqs != 16);
4309
4310         for (i = 0; i < 16; i++) {
4311                 vpe->sgi_config[i].priority = 0;
4312                 vpe->sgi_config[i].enabled = false;
4313                 vpe->sgi_config[i].group = false;
4314
4315                 irq_domain_set_hwirq_and_chip(domain, virq + i, i,
4316                                               &its_sgi_irq_chip, vpe);
4317                 irq_set_status_flags(virq + i, IRQ_DISABLE_UNLAZY);
4318         }
4319
4320         return 0;
4321 }
4322
4323 static void its_sgi_irq_domain_free(struct irq_domain *domain,
4324                                     unsigned int virq,
4325                                     unsigned int nr_irqs)
4326 {
4327         /* Nothing to do */
4328 }
4329
4330 static int its_sgi_irq_domain_activate(struct irq_domain *domain,
4331                                        struct irq_data *d, bool reserve)
4332 {
4333         /* Write out the initial SGI configuration */
4334         its_configure_sgi(d, false);
4335         return 0;
4336 }
4337
4338 static void its_sgi_irq_domain_deactivate(struct irq_domain *domain,
4339                                           struct irq_data *d)
4340 {
4341         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4342
4343         /*
4344          * The VSGI command is awkward:
4345          *
4346          * - To change the configuration, CLEAR must be set to false,
4347          *   leaving the pending bit unchanged.
4348          * - To clear the pending bit, CLEAR must be set to true, leaving
4349          *   the configuration unchanged.
4350          *
4351          * You just can't do both at once, hence the two commands below.
4352          */
4353         vpe->sgi_config[d->hwirq].enabled = false;
4354         its_configure_sgi(d, false);
4355         its_configure_sgi(d, true);
4356 }
4357
4358 static const struct irq_domain_ops its_sgi_domain_ops = {
4359         .alloc          = its_sgi_irq_domain_alloc,
4360         .free           = its_sgi_irq_domain_free,
4361         .activate       = its_sgi_irq_domain_activate,
4362         .deactivate     = its_sgi_irq_domain_deactivate,
4363 };
4364
4365 static int its_vpe_id_alloc(void)
4366 {
4367         return ida_simple_get(&its_vpeid_ida, 0, ITS_MAX_VPEID, GFP_KERNEL);
4368 }
4369
4370 static void its_vpe_id_free(u16 id)
4371 {
4372         ida_simple_remove(&its_vpeid_ida, id);
4373 }
4374
4375 static int its_vpe_init(struct its_vpe *vpe)
4376 {
4377         struct page *vpt_page;
4378         int vpe_id;
4379
4380         /* Allocate vpe_id */
4381         vpe_id = its_vpe_id_alloc();
4382         if (vpe_id < 0)
4383                 return vpe_id;
4384
4385         /* Allocate VPT */
4386         vpt_page = its_allocate_pending_table(GFP_KERNEL);
4387         if (!vpt_page) {
4388                 its_vpe_id_free(vpe_id);
4389                 return -ENOMEM;
4390         }
4391
4392         if (!its_alloc_vpe_table(vpe_id)) {
4393                 its_vpe_id_free(vpe_id);
4394                 its_free_pending_table(vpt_page);
4395                 return -ENOMEM;
4396         }
4397
4398         raw_spin_lock_init(&vpe->vpe_lock);
4399         vpe->vpe_id = vpe_id;
4400         vpe->vpt_page = vpt_page;
4401         if (gic_rdists->has_rvpeid)
4402                 atomic_set(&vpe->vmapp_count, 0);
4403         else
4404                 vpe->vpe_proxy_event = -1;
4405
4406         return 0;
4407 }
4408
4409 static void its_vpe_teardown(struct its_vpe *vpe)
4410 {
4411         its_vpe_db_proxy_unmap(vpe);
4412         its_vpe_id_free(vpe->vpe_id);
4413         its_free_pending_table(vpe->vpt_page);
4414 }
4415
4416 static void its_vpe_irq_domain_free(struct irq_domain *domain,
4417                                     unsigned int virq,
4418                                     unsigned int nr_irqs)
4419 {
4420         struct its_vm *vm = domain->host_data;
4421         int i;
4422
4423         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
4424
4425         for (i = 0; i < nr_irqs; i++) {
4426                 struct irq_data *data = irq_domain_get_irq_data(domain,
4427                                                                 virq + i);
4428                 struct its_vpe *vpe = irq_data_get_irq_chip_data(data);
4429
4430                 BUG_ON(vm != vpe->its_vm);
4431
4432                 clear_bit(data->hwirq, vm->db_bitmap);
4433                 its_vpe_teardown(vpe);
4434                 irq_domain_reset_irq_data(data);
4435         }
4436
4437         if (bitmap_empty(vm->db_bitmap, vm->nr_db_lpis)) {
4438                 its_lpi_free(vm->db_bitmap, vm->db_lpi_base, vm->nr_db_lpis);
4439                 its_free_prop_table(vm->vprop_page);
4440         }
4441 }
4442
4443 static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
4444                                     unsigned int nr_irqs, void *args)
4445 {
4446         struct irq_chip *irqchip = &its_vpe_irq_chip;
4447         struct its_vm *vm = args;
4448         unsigned long *bitmap;
4449         struct page *vprop_page;
4450         int base, nr_ids, i, err = 0;
4451
4452         BUG_ON(!vm);
4453
4454         bitmap = its_lpi_alloc(roundup_pow_of_two(nr_irqs), &base, &nr_ids);
4455         if (!bitmap)
4456                 return -ENOMEM;
4457
4458         if (nr_ids < nr_irqs) {
4459                 its_lpi_free(bitmap, base, nr_ids);
4460                 return -ENOMEM;
4461         }
4462
4463         vprop_page = its_allocate_prop_table(GFP_KERNEL);
4464         if (!vprop_page) {
4465                 its_lpi_free(bitmap, base, nr_ids);
4466                 return -ENOMEM;
4467         }
4468
4469         vm->db_bitmap = bitmap;
4470         vm->db_lpi_base = base;
4471         vm->nr_db_lpis = nr_ids;
4472         vm->vprop_page = vprop_page;
4473
4474         if (gic_rdists->has_rvpeid)
4475                 irqchip = &its_vpe_4_1_irq_chip;
4476
4477         for (i = 0; i < nr_irqs; i++) {
4478                 vm->vpes[i]->vpe_db_lpi = base + i;
4479                 err = its_vpe_init(vm->vpes[i]);
4480                 if (err)
4481                         break;
4482                 err = its_irq_gic_domain_alloc(domain, virq + i,
4483                                                vm->vpes[i]->vpe_db_lpi);
4484                 if (err)
4485                         break;
4486                 irq_domain_set_hwirq_and_chip(domain, virq + i, i,
4487                                               irqchip, vm->vpes[i]);
4488                 set_bit(i, bitmap);
4489         }
4490
4491         if (err) {
4492                 if (i > 0)
4493                         its_vpe_irq_domain_free(domain, virq, i - 1);
4494
4495                 its_lpi_free(bitmap, base, nr_ids);
4496                 its_free_prop_table(vprop_page);
4497         }
4498
4499         return err;
4500 }
4501
4502 static int its_vpe_irq_domain_activate(struct irq_domain *domain,
4503                                        struct irq_data *d, bool reserve)
4504 {
4505         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4506         struct its_node *its;
4507
4508         /*
4509          * If we use the list map, we issue VMAPP on demand... Unless
4510          * we're on a GICv4.1 and we eagerly map the VPE on all ITSs
4511          * so that VSGIs can work.
4512          */
4513         if (!gic_requires_eager_mapping())
4514                 return 0;
4515
4516         /* Map the VPE to the first possible CPU */
4517         vpe->col_idx = cpumask_first(cpu_online_mask);
4518
4519         list_for_each_entry(its, &its_nodes, entry) {
4520                 if (!is_v4(its))
4521                         continue;
4522
4523                 its_send_vmapp(its, vpe, true);
4524                 its_send_vinvall(its, vpe);
4525         }
4526
4527         irq_data_update_effective_affinity(d, cpumask_of(vpe->col_idx));
4528
4529         return 0;
4530 }
4531
4532 static void its_vpe_irq_domain_deactivate(struct irq_domain *domain,
4533                                           struct irq_data *d)
4534 {
4535         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
4536         struct its_node *its;
4537
4538         /*
4539          * If we use the list map on GICv4.0, we unmap the VPE once no
4540          * VLPIs are associated with the VM.
4541          */
4542         if (!gic_requires_eager_mapping())
4543                 return;
4544
4545         list_for_each_entry(its, &its_nodes, entry) {
4546                 if (!is_v4(its))
4547                         continue;
4548
4549                 its_send_vmapp(its, vpe, false);
4550         }
4551 }
4552
4553 static const struct irq_domain_ops its_vpe_domain_ops = {
4554         .alloc                  = its_vpe_irq_domain_alloc,
4555         .free                   = its_vpe_irq_domain_free,
4556         .activate               = its_vpe_irq_domain_activate,
4557         .deactivate             = its_vpe_irq_domain_deactivate,
4558 };
4559
4560 static int its_force_quiescent(void __iomem *base)
4561 {
4562         u32 count = 1000000;    /* 1s */
4563         u32 val;
4564
4565         val = readl_relaxed(base + GITS_CTLR);
4566         /*
4567          * GIC architecture specification requires the ITS to be both
4568          * disabled and quiescent for writes to GITS_BASER<n> or
4569          * GITS_CBASER to not have UNPREDICTABLE results.
4570          */
4571         if ((val & GITS_CTLR_QUIESCENT) && !(val & GITS_CTLR_ENABLE))
4572                 return 0;
4573
4574         /* Disable the generation of all interrupts to this ITS */
4575         val &= ~(GITS_CTLR_ENABLE | GITS_CTLR_ImDe);
4576         writel_relaxed(val, base + GITS_CTLR);
4577
4578         /* Poll GITS_CTLR and wait until ITS becomes quiescent */
4579         while (1) {
4580                 val = readl_relaxed(base + GITS_CTLR);
4581                 if (val & GITS_CTLR_QUIESCENT)
4582                         return 0;
4583
4584                 count--;
4585                 if (!count)
4586                         return -EBUSY;
4587
4588                 cpu_relax();
4589                 udelay(1);
4590         }
4591 }
4592
4593 static bool __maybe_unused its_enable_quirk_cavium_22375(void *data)
4594 {
4595         struct its_node *its = data;
4596
4597         /* erratum 22375: only alloc 8MB table size (20 bits) */
4598         its->typer &= ~GITS_TYPER_DEVBITS;
4599         its->typer |= FIELD_PREP(GITS_TYPER_DEVBITS, 20 - 1);
4600         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_22375;
4601
4602         return true;
4603 }
4604
4605 static bool __maybe_unused its_enable_quirk_cavium_23144(void *data)
4606 {
4607         struct its_node *its = data;
4608
4609         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144;
4610
4611         return true;
4612 }
4613
4614 static bool __maybe_unused its_enable_quirk_qdf2400_e0065(void *data)
4615 {
4616         struct its_node *its = data;
4617
4618         /* On QDF2400, the size of the ITE is 16Bytes */
4619         its->typer &= ~GITS_TYPER_ITT_ENTRY_SIZE;
4620         its->typer |= FIELD_PREP(GITS_TYPER_ITT_ENTRY_SIZE, 16 - 1);
4621
4622         return true;
4623 }
4624
4625 static u64 its_irq_get_msi_base_pre_its(struct its_device *its_dev)
4626 {
4627         struct its_node *its = its_dev->its;
4628
4629         /*
4630          * The Socionext Synquacer SoC has a so-called 'pre-ITS',
4631          * which maps 32-bit writes targeted at a separate window of
4632          * size '4 << device_id_bits' onto writes to GITS_TRANSLATER
4633          * with device ID taken from bits [device_id_bits + 1:2] of
4634          * the window offset.
4635          */
4636         return its->pre_its_base + (its_dev->device_id << 2);
4637 }
4638
4639 static bool __maybe_unused its_enable_quirk_socionext_synquacer(void *data)
4640 {
4641         struct its_node *its = data;
4642         u32 pre_its_window[2];
4643         u32 ids;
4644
4645         if (!fwnode_property_read_u32_array(its->fwnode_handle,
4646                                            "socionext,synquacer-pre-its",
4647                                            pre_its_window,
4648                                            ARRAY_SIZE(pre_its_window))) {
4649
4650                 its->pre_its_base = pre_its_window[0];
4651                 its->get_msi_base = its_irq_get_msi_base_pre_its;
4652
4653                 ids = ilog2(pre_its_window[1]) - 2;
4654                 if (device_ids(its) > ids) {
4655                         its->typer &= ~GITS_TYPER_DEVBITS;
4656                         its->typer |= FIELD_PREP(GITS_TYPER_DEVBITS, ids - 1);
4657                 }
4658
4659                 /* the pre-ITS breaks isolation, so disable MSI remapping */
4660                 its->msi_domain_flags &= ~IRQ_DOMAIN_FLAG_MSI_REMAP;
4661                 return true;
4662         }
4663         return false;
4664 }
4665
4666 static bool __maybe_unused its_enable_quirk_hip07_161600802(void *data)
4667 {
4668         struct its_node *its = data;
4669
4670         /*
4671          * Hip07 insists on using the wrong address for the VLPI
4672          * page. Trick it into doing the right thing...
4673          */
4674         its->vlpi_redist_offset = SZ_128K;
4675         return true;
4676 }
4677
4678 static const struct gic_quirk its_quirks[] = {
4679 #ifdef CONFIG_CAVIUM_ERRATUM_22375
4680         {
4681                 .desc   = "ITS: Cavium errata 22375, 24313",
4682                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
4683                 .mask   = 0xffff0fff,
4684                 .init   = its_enable_quirk_cavium_22375,
4685         },
4686 #endif
4687 #ifdef CONFIG_CAVIUM_ERRATUM_23144
4688         {
4689                 .desc   = "ITS: Cavium erratum 23144",
4690                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
4691                 .mask   = 0xffff0fff,
4692                 .init   = its_enable_quirk_cavium_23144,
4693         },
4694 #endif
4695 #ifdef CONFIG_QCOM_QDF2400_ERRATUM_0065
4696         {
4697                 .desc   = "ITS: QDF2400 erratum 0065",
4698                 .iidr   = 0x00001070, /* QDF2400 ITS rev 1.x */
4699                 .mask   = 0xffffffff,
4700                 .init   = its_enable_quirk_qdf2400_e0065,
4701         },
4702 #endif
4703 #ifdef CONFIG_SOCIONEXT_SYNQUACER_PREITS
4704         {
4705                 /*
4706                  * The Socionext Synquacer SoC incorporates ARM's own GIC-500
4707                  * implementation, but with a 'pre-ITS' added that requires
4708                  * special handling in software.
4709                  */
4710                 .desc   = "ITS: Socionext Synquacer pre-ITS",
4711                 .iidr   = 0x0001143b,
4712                 .mask   = 0xffffffff,
4713                 .init   = its_enable_quirk_socionext_synquacer,
4714         },
4715 #endif
4716 #ifdef CONFIG_HISILICON_ERRATUM_161600802
4717         {
4718                 .desc   = "ITS: Hip07 erratum 161600802",
4719                 .iidr   = 0x00000004,
4720                 .mask   = 0xffffffff,
4721                 .init   = its_enable_quirk_hip07_161600802,
4722         },
4723 #endif
4724         {
4725         }
4726 };
4727
4728 static void its_enable_quirks(struct its_node *its)
4729 {
4730         u32 iidr = readl_relaxed(its->base + GITS_IIDR);
4731
4732         gic_enable_quirks(iidr, its_quirks, its);
4733 }
4734
4735 static int its_save_disable(void)
4736 {
4737         struct its_node *its;
4738         int err = 0;
4739
4740         raw_spin_lock(&its_lock);
4741         list_for_each_entry(its, &its_nodes, entry) {
4742                 void __iomem *base;
4743
4744                 if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
4745                         continue;
4746
4747                 base = its->base;
4748                 its->ctlr_save = readl_relaxed(base + GITS_CTLR);
4749                 err = its_force_quiescent(base);
4750                 if (err) {
4751                         pr_err("ITS@%pa: failed to quiesce: %d\n",
4752                                &its->phys_base, err);
4753                         writel_relaxed(its->ctlr_save, base + GITS_CTLR);
4754                         goto err;
4755                 }
4756
4757                 its->cbaser_save = gits_read_cbaser(base + GITS_CBASER);
4758         }
4759
4760 err:
4761         if (err) {
4762                 list_for_each_entry_continue_reverse(its, &its_nodes, entry) {
4763                         void __iomem *base;
4764
4765                         if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
4766                                 continue;
4767
4768                         base = its->base;
4769                         writel_relaxed(its->ctlr_save, base + GITS_CTLR);
4770                 }
4771         }
4772         raw_spin_unlock(&its_lock);
4773
4774         return err;
4775 }
4776
4777 static void its_restore_enable(void)
4778 {
4779         struct its_node *its;
4780         int ret;
4781
4782         raw_spin_lock(&its_lock);
4783         list_for_each_entry(its, &its_nodes, entry) {
4784                 void __iomem *base;
4785                 int i;
4786
4787                 if (!(its->flags & ITS_FLAGS_SAVE_SUSPEND_STATE))
4788                         continue;
4789
4790                 base = its->base;
4791
4792                 /*
4793                  * Make sure that the ITS is disabled. If it fails to quiesce,
4794                  * don't restore it since writing to CBASER or BASER<n>
4795                  * registers is undefined according to the GIC v3 ITS
4796                  * Specification.
4797                  */
4798                 ret = its_force_quiescent(base);
4799                 if (ret) {
4800                         pr_err("ITS@%pa: failed to quiesce on resume: %d\n",
4801                                &its->phys_base, ret);
4802                         continue;
4803                 }
4804
4805                 gits_write_cbaser(its->cbaser_save, base + GITS_CBASER);
4806
4807                 /*
4808                  * Writing CBASER resets CREADR to 0, so make CWRITER and
4809                  * cmd_write line up with it.
4810                  */
4811                 its->cmd_write = its->cmd_base;
4812                 gits_write_cwriter(0, base + GITS_CWRITER);
4813
4814                 /* Restore GITS_BASER from the value cache. */
4815                 for (i = 0; i < GITS_BASER_NR_REGS; i++) {
4816                         struct its_baser *baser = &its->tables[i];
4817
4818                         if (!(baser->val & GITS_BASER_VALID))
4819                                 continue;
4820
4821                         its_write_baser(its, baser, baser->val);
4822                 }
4823                 writel_relaxed(its->ctlr_save, base + GITS_CTLR);
4824
4825                 /*
4826                  * Reinit the collection if it's stored in the ITS. This is
4827                  * indicated by the col_id being less than the HCC field.
4828                  * CID < HCC as specified in the GIC v3 Documentation.
4829                  */
4830                 if (its->collections[smp_processor_id()].col_id <
4831                     GITS_TYPER_HCC(gic_read_typer(base + GITS_TYPER)))
4832                         its_cpu_init_collection(its);
4833         }
4834         raw_spin_unlock(&its_lock);
4835 }
4836
4837 static struct syscore_ops its_syscore_ops = {
4838         .suspend = its_save_disable,
4839         .resume = its_restore_enable,
4840 };
4841
4842 static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
4843 {
4844         struct irq_domain *inner_domain;
4845         struct msi_domain_info *info;
4846
4847         info = kzalloc(sizeof(*info), GFP_KERNEL);
4848         if (!info)
4849                 return -ENOMEM;
4850
4851         inner_domain = irq_domain_create_tree(handle, &its_domain_ops, its);
4852         if (!inner_domain) {
4853                 kfree(info);
4854                 return -ENOMEM;
4855         }
4856
4857         inner_domain->parent = its_parent;
4858         irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
4859         inner_domain->flags |= its->msi_domain_flags;
4860         info->ops = &its_msi_domain_ops;
4861         info->data = its;
4862         inner_domain->host_data = info;
4863
4864         return 0;
4865 }
4866
4867 static int its_init_vpe_domain(void)
4868 {
4869         struct its_node *its;
4870         u32 devid;
4871         int entries;
4872
4873         if (gic_rdists->has_direct_lpi) {
4874                 pr_info("ITS: Using DirectLPI for VPE invalidation\n");
4875                 return 0;
4876         }
4877
4878         /* Any ITS will do, even if not v4 */
4879         its = list_first_entry(&its_nodes, struct its_node, entry);
4880
4881         entries = roundup_pow_of_two(nr_cpu_ids);
4882         vpe_proxy.vpes = kcalloc(entries, sizeof(*vpe_proxy.vpes),
4883                                  GFP_KERNEL);
4884         if (!vpe_proxy.vpes) {
4885                 pr_err("ITS: Can't allocate GICv4 proxy device array\n");
4886                 return -ENOMEM;
4887         }
4888
4889         /* Use the last possible DevID */
4890         devid = GENMASK(device_ids(its) - 1, 0);
4891         vpe_proxy.dev = its_create_device(its, devid, entries, false);
4892         if (!vpe_proxy.dev) {
4893                 kfree(vpe_proxy.vpes);
4894                 pr_err("ITS: Can't allocate GICv4 proxy device\n");
4895                 return -ENOMEM;
4896         }
4897
4898         BUG_ON(entries > vpe_proxy.dev->nr_ites);
4899
4900         raw_spin_lock_init(&vpe_proxy.lock);
4901         vpe_proxy.next_victim = 0;
4902         pr_info("ITS: Allocated DevID %x as GICv4 proxy device (%d slots)\n",
4903                 devid, vpe_proxy.dev->nr_ites);
4904
4905         return 0;
4906 }
4907
4908 static int __init its_compute_its_list_map(struct resource *res,
4909                                            void __iomem *its_base)
4910 {
4911         int its_number;
4912         u32 ctlr;
4913
4914         /*
4915          * This is assumed to be done early enough that we're
4916          * guaranteed to be single-threaded, hence no
4917          * locking. Should this change, we should address
4918          * this.
4919          */
4920         its_number = find_first_zero_bit(&its_list_map, GICv4_ITS_LIST_MAX);
4921         if (its_number >= GICv4_ITS_LIST_MAX) {
4922                 pr_err("ITS@%pa: No ITSList entry available!\n",
4923                        &res->start);
4924                 return -EINVAL;
4925         }
4926
4927         ctlr = readl_relaxed(its_base + GITS_CTLR);
4928         ctlr &= ~GITS_CTLR_ITS_NUMBER;
4929         ctlr |= its_number << GITS_CTLR_ITS_NUMBER_SHIFT;
4930         writel_relaxed(ctlr, its_base + GITS_CTLR);
4931         ctlr = readl_relaxed(its_base + GITS_CTLR);
4932         if ((ctlr & GITS_CTLR_ITS_NUMBER) != (its_number << GITS_CTLR_ITS_NUMBER_SHIFT)) {
4933                 its_number = ctlr & GITS_CTLR_ITS_NUMBER;
4934                 its_number >>= GITS_CTLR_ITS_NUMBER_SHIFT;
4935         }
4936
4937         if (test_and_set_bit(its_number, &its_list_map)) {
4938                 pr_err("ITS@%pa: Duplicate ITSList entry %d\n",
4939                        &res->start, its_number);
4940                 return -EINVAL;
4941         }
4942
4943         return its_number;
4944 }
4945
4946 static int __init its_probe_one(struct resource *res,
4947                                 struct fwnode_handle *handle, int numa_node)
4948 {
4949         struct its_node *its;
4950         void __iomem *its_base;
4951         u32 val, ctlr;
4952         u64 baser, tmp, typer;
4953         struct page *page;
4954         int err;
4955
4956         its_base = ioremap(res->start, SZ_64K);
4957         if (!its_base) {
4958                 pr_warn("ITS@%pa: Unable to map ITS registers\n", &res->start);
4959                 return -ENOMEM;
4960         }
4961
4962         val = readl_relaxed(its_base + GITS_PIDR2) & GIC_PIDR2_ARCH_MASK;
4963         if (val != 0x30 && val != 0x40) {
4964                 pr_warn("ITS@%pa: No ITS detected, giving up\n", &res->start);
4965                 err = -ENODEV;
4966                 goto out_unmap;
4967         }
4968
4969         err = its_force_quiescent(its_base);
4970         if (err) {
4971                 pr_warn("ITS@%pa: Failed to quiesce, giving up\n", &res->start);
4972                 goto out_unmap;
4973         }
4974
4975         pr_info("ITS %pR\n", res);
4976
4977         its = kzalloc(sizeof(*its), GFP_KERNEL);
4978         if (!its) {
4979                 err = -ENOMEM;
4980                 goto out_unmap;
4981         }
4982
4983         raw_spin_lock_init(&its->lock);
4984         mutex_init(&its->dev_alloc_lock);
4985         INIT_LIST_HEAD(&its->entry);
4986         INIT_LIST_HEAD(&its->its_device_list);
4987         typer = gic_read_typer(its_base + GITS_TYPER);
4988         its->typer = typer;
4989         its->base = its_base;
4990         its->phys_base = res->start;
4991         if (is_v4(its)) {
4992                 if (!(typer & GITS_TYPER_VMOVP)) {
4993                         err = its_compute_its_list_map(res, its_base);
4994                         if (err < 0)
4995                                 goto out_free_its;
4996
4997                         its->list_nr = err;
4998
4999                         pr_info("ITS@%pa: Using ITS number %d\n",
5000                                 &res->start, err);
5001                 } else {
5002                         pr_info("ITS@%pa: Single VMOVP capable\n", &res->start);
5003                 }
5004
5005                 if (is_v4_1(its)) {
5006                         u32 svpet = FIELD_GET(GITS_TYPER_SVPET, typer);
5007
5008                         its->sgir_base = ioremap(res->start + SZ_128K, SZ_64K);
5009                         if (!its->sgir_base) {
5010                                 err = -ENOMEM;
5011                                 goto out_free_its;
5012                         }
5013
5014                         its->mpidr = readl_relaxed(its_base + GITS_MPIDR);
5015
5016                         pr_info("ITS@%pa: Using GICv4.1 mode %08x %08x\n",
5017                                 &res->start, its->mpidr, svpet);
5018                 }
5019         }
5020
5021         its->numa_node = numa_node;
5022
5023         page = alloc_pages_node(its->numa_node, GFP_KERNEL | __GFP_ZERO,
5024                                 get_order(ITS_CMD_QUEUE_SZ));
5025         if (!page) {
5026                 err = -ENOMEM;
5027                 goto out_unmap_sgir;
5028         }
5029         its->cmd_base = (void *)page_address(page);
5030         its->cmd_write = its->cmd_base;
5031         its->fwnode_handle = handle;
5032         its->get_msi_base = its_irq_get_msi_base;
5033         its->msi_domain_flags = IRQ_DOMAIN_FLAG_MSI_REMAP;
5034
5035         its_enable_quirks(its);
5036
5037         err = its_alloc_tables(its);
5038         if (err)
5039                 goto out_free_cmd;
5040
5041         err = its_alloc_collections(its);
5042         if (err)
5043                 goto out_free_tables;
5044
5045         baser = (virt_to_phys(its->cmd_base)    |
5046                  GITS_CBASER_RaWaWb             |
5047                  GITS_CBASER_InnerShareable     |
5048                  (ITS_CMD_QUEUE_SZ / SZ_4K - 1) |
5049                  GITS_CBASER_VALID);
5050
5051         gits_write_cbaser(baser, its->base + GITS_CBASER);
5052         tmp = gits_read_cbaser(its->base + GITS_CBASER);
5053
5054         if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
5055                 if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) {
5056                         /*
5057                          * The HW reports non-shareable, we must
5058                          * remove the cacheability attributes as
5059                          * well.
5060                          */
5061                         baser &= ~(GITS_CBASER_SHAREABILITY_MASK |
5062                                    GITS_CBASER_CACHEABILITY_MASK);
5063                         baser |= GITS_CBASER_nC;
5064                         gits_write_cbaser(baser, its->base + GITS_CBASER);
5065                 }
5066                 pr_info("ITS: using cache flushing for cmd queue\n");
5067                 its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING;
5068         }
5069
5070         gits_write_cwriter(0, its->base + GITS_CWRITER);
5071         ctlr = readl_relaxed(its->base + GITS_CTLR);
5072         ctlr |= GITS_CTLR_ENABLE;
5073         if (is_v4(its))
5074                 ctlr |= GITS_CTLR_ImDe;
5075         writel_relaxed(ctlr, its->base + GITS_CTLR);
5076
5077         if (GITS_TYPER_HCC(typer))
5078                 its->flags |= ITS_FLAGS_SAVE_SUSPEND_STATE;
5079
5080         err = its_init_domain(handle, its);
5081         if (err)
5082                 goto out_free_tables;
5083
5084         raw_spin_lock(&its_lock);
5085         list_add(&its->entry, &its_nodes);
5086         raw_spin_unlock(&its_lock);
5087
5088         return 0;
5089
5090 out_free_tables:
5091         its_free_tables(its);
5092 out_free_cmd:
5093         free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
5094 out_unmap_sgir:
5095         if (its->sgir_base)
5096                 iounmap(its->sgir_base);
5097 out_free_its:
5098         kfree(its);
5099 out_unmap:
5100         iounmap(its_base);
5101         pr_err("ITS@%pa: failed probing (%d)\n", &res->start, err);
5102         return err;
5103 }
5104
5105 static bool gic_rdists_supports_plpis(void)
5106 {
5107         return !!(gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER) & GICR_TYPER_PLPIS);
5108 }
5109
5110 static int redist_disable_lpis(void)
5111 {
5112         void __iomem *rbase = gic_data_rdist_rd_base();
5113         u64 timeout = USEC_PER_SEC;
5114         u64 val;
5115
5116         if (!gic_rdists_supports_plpis()) {
5117                 pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
5118                 return -ENXIO;
5119         }
5120
5121         val = readl_relaxed(rbase + GICR_CTLR);
5122         if (!(val & GICR_CTLR_ENABLE_LPIS))
5123                 return 0;
5124
5125         /*
5126          * If coming via a CPU hotplug event, we don't need to disable
5127          * LPIs before trying to re-enable them. They are already
5128          * configured and all is well in the world.
5129          *
5130          * If running with preallocated tables, there is nothing to do.
5131          */
5132         if (gic_data_rdist()->lpi_enabled ||
5133             (gic_rdists->flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED))
5134                 return 0;
5135
5136         /*
5137          * From that point on, we only try to do some damage control.
5138          */
5139         pr_warn("GICv3: CPU%d: Booted with LPIs enabled, memory probably corrupted\n",
5140                 smp_processor_id());
5141         add_taint(TAINT_CRAP, LOCKDEP_STILL_OK);
5142
5143         /* Disable LPIs */
5144         val &= ~GICR_CTLR_ENABLE_LPIS;
5145         writel_relaxed(val, rbase + GICR_CTLR);
5146
5147         /* Make sure any change to GICR_CTLR is observable by the GIC */
5148         dsb(sy);
5149
5150         /*
5151          * Software must observe RWP==0 after clearing GICR_CTLR.EnableLPIs
5152          * from 1 to 0 before programming GICR_PEND{PROP}BASER registers.
5153          * Error out if we time out waiting for RWP to clear.
5154          */
5155         while (readl_relaxed(rbase + GICR_CTLR) & GICR_CTLR_RWP) {
5156                 if (!timeout) {
5157                         pr_err("CPU%d: Timeout while disabling LPIs\n",
5158                                smp_processor_id());
5159                         return -ETIMEDOUT;
5160                 }
5161                 udelay(1);
5162                 timeout--;
5163         }
5164
5165         /*
5166          * After it has been written to 1, it is IMPLEMENTATION
5167          * DEFINED whether GICR_CTLR.EnableLPI becomes RES1 or can be
5168          * cleared to 0. Error out if clearing the bit failed.
5169          */
5170         if (readl_relaxed(rbase + GICR_CTLR) & GICR_CTLR_ENABLE_LPIS) {
5171                 pr_err("CPU%d: Failed to disable LPIs\n", smp_processor_id());
5172                 return -EBUSY;
5173         }
5174
5175         return 0;
5176 }
5177
5178 int its_cpu_init(void)
5179 {
5180         if (!list_empty(&its_nodes)) {
5181                 int ret;
5182
5183                 ret = redist_disable_lpis();
5184                 if (ret)
5185                         return ret;
5186
5187                 its_cpu_init_lpis();
5188                 its_cpu_init_collections();
5189         }
5190
5191         return 0;
5192 }
5193
5194 static const struct of_device_id its_device_id[] = {
5195         {       .compatible     = "arm,gic-v3-its",     },
5196         {},
5197 };
5198
5199 static int __init its_of_probe(struct device_node *node)
5200 {
5201         struct device_node *np;
5202         struct resource res;
5203
5204         for (np = of_find_matching_node(node, its_device_id); np;
5205              np = of_find_matching_node(np, its_device_id)) {
5206                 if (!of_device_is_available(np))
5207                         continue;
5208                 if (!of_property_read_bool(np, "msi-controller")) {
5209                         pr_warn("%pOF: no msi-controller property, ITS ignored\n",
5210                                 np);
5211                         continue;
5212                 }
5213
5214                 if (of_address_to_resource(np, 0, &res)) {
5215                         pr_warn("%pOF: no regs?\n", np);
5216                         continue;
5217                 }
5218
5219                 its_probe_one(&res, &np->fwnode, of_node_to_nid(np));
5220         }
5221         return 0;
5222 }
5223
5224 #ifdef CONFIG_ACPI
5225
5226 #define ACPI_GICV3_ITS_MEM_SIZE (SZ_128K)
5227
5228 #ifdef CONFIG_ACPI_NUMA
5229 struct its_srat_map {
5230         /* numa node id */
5231         u32     numa_node;
5232         /* GIC ITS ID */
5233         u32     its_id;
5234 };
5235
5236 static struct its_srat_map *its_srat_maps __initdata;
5237 static int its_in_srat __initdata;
5238
5239 static int __init acpi_get_its_numa_node(u32 its_id)
5240 {
5241         int i;
5242
5243         for (i = 0; i < its_in_srat; i++) {
5244                 if (its_id == its_srat_maps[i].its_id)
5245                         return its_srat_maps[i].numa_node;
5246         }
5247         return NUMA_NO_NODE;
5248 }
5249
5250 static int __init gic_acpi_match_srat_its(union acpi_subtable_headers *header,
5251                                           const unsigned long end)
5252 {
5253         return 0;
5254 }
5255
5256 static int __init gic_acpi_parse_srat_its(union acpi_subtable_headers *header,
5257                          const unsigned long end)
5258 {
5259         int node;
5260         struct acpi_srat_gic_its_affinity *its_affinity;
5261
5262         its_affinity = (struct acpi_srat_gic_its_affinity *)header;
5263         if (!its_affinity)
5264                 return -EINVAL;
5265
5266         if (its_affinity->header.length < sizeof(*its_affinity)) {
5267                 pr_err("SRAT: Invalid header length %d in ITS affinity\n",
5268                         its_affinity->header.length);
5269                 return -EINVAL;
5270         }
5271
5272         /*
5273          * Note that in theory a new proximity node could be created by this
5274          * entry as it is an SRAT resource allocation structure.
5275          * We do not currently support doing so.
5276          */
5277         node = pxm_to_node(its_affinity->proximity_domain);
5278
5279         if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) {
5280                 pr_err("SRAT: Invalid NUMA node %d in ITS affinity\n", node);
5281                 return 0;
5282         }
5283
5284         its_srat_maps[its_in_srat].numa_node = node;
5285         its_srat_maps[its_in_srat].its_id = its_affinity->its_id;
5286         its_in_srat++;
5287         pr_info("SRAT: PXM %d -> ITS %d -> Node %d\n",
5288                 its_affinity->proximity_domain, its_affinity->its_id, node);
5289
5290         return 0;
5291 }
5292
5293 static void __init acpi_table_parse_srat_its(void)
5294 {
5295         int count;
5296
5297         count = acpi_table_parse_entries(ACPI_SIG_SRAT,
5298                         sizeof(struct acpi_table_srat),
5299                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
5300                         gic_acpi_match_srat_its, 0);
5301         if (count <= 0)
5302                 return;
5303
5304         its_srat_maps = kmalloc_array(count, sizeof(struct its_srat_map),
5305                                       GFP_KERNEL);
5306         if (!its_srat_maps) {
5307                 pr_warn("SRAT: Failed to allocate memory for its_srat_maps!\n");
5308                 return;
5309         }
5310
5311         acpi_table_parse_entries(ACPI_SIG_SRAT,
5312                         sizeof(struct acpi_table_srat),
5313                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
5314                         gic_acpi_parse_srat_its, 0);
5315 }
5316
5317 /* free the its_srat_maps after ITS probing */
5318 static void __init acpi_its_srat_maps_free(void)
5319 {
5320         kfree(its_srat_maps);
5321 }
5322 #else
5323 static void __init acpi_table_parse_srat_its(void)      { }
5324 static int __init acpi_get_its_numa_node(u32 its_id) { return NUMA_NO_NODE; }
5325 static void __init acpi_its_srat_maps_free(void) { }
5326 #endif
5327
5328 static int __init gic_acpi_parse_madt_its(union acpi_subtable_headers *header,
5329                                           const unsigned long end)
5330 {
5331         struct acpi_madt_generic_translator *its_entry;
5332         struct fwnode_handle *dom_handle;
5333         struct resource res;
5334         int err;
5335
5336         its_entry = (struct acpi_madt_generic_translator *)header;
5337         memset(&res, 0, sizeof(res));
5338         res.start = its_entry->base_address;
5339         res.end = its_entry->base_address + ACPI_GICV3_ITS_MEM_SIZE - 1;
5340         res.flags = IORESOURCE_MEM;
5341
5342         dom_handle = irq_domain_alloc_fwnode(&res.start);
5343         if (!dom_handle) {
5344                 pr_err("ITS@%pa: Unable to allocate GICv3 ITS domain token\n",
5345                        &res.start);
5346                 return -ENOMEM;
5347         }
5348
5349         err = iort_register_domain_token(its_entry->translation_id, res.start,
5350                                          dom_handle);
5351         if (err) {
5352                 pr_err("ITS@%pa: Unable to register GICv3 ITS domain token (ITS ID %d) to IORT\n",
5353                        &res.start, its_entry->translation_id);
5354                 goto dom_err;
5355         }
5356
5357         err = its_probe_one(&res, dom_handle,
5358                         acpi_get_its_numa_node(its_entry->translation_id));
5359         if (!err)
5360                 return 0;
5361
5362         iort_deregister_domain_token(its_entry->translation_id);
5363 dom_err:
5364         irq_domain_free_fwnode(dom_handle);
5365         return err;
5366 }
5367
5368 static void __init its_acpi_probe(void)
5369 {
5370         acpi_table_parse_srat_its();
5371         acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR,
5372                               gic_acpi_parse_madt_its, 0);
5373         acpi_its_srat_maps_free();
5374 }
5375 #else
5376 static void __init its_acpi_probe(void) { }
5377 #endif
5378
5379 int __init its_init(struct fwnode_handle *handle, struct rdists *rdists,
5380                     struct irq_domain *parent_domain)
5381 {
5382         struct device_node *of_node;
5383         struct its_node *its;
5384         bool has_v4 = false;
5385         bool has_v4_1 = false;
5386         int err;
5387
5388         gic_rdists = rdists;
5389
5390         its_parent = parent_domain;
5391         of_node = to_of_node(handle);
5392         if (of_node)
5393                 its_of_probe(of_node);
5394         else
5395                 its_acpi_probe();
5396
5397         if (list_empty(&its_nodes)) {
5398                 pr_warn("ITS: No ITS available, not enabling LPIs\n");
5399                 return -ENXIO;
5400         }
5401
5402         err = allocate_lpi_tables();
5403         if (err)
5404                 return err;
5405
5406         list_for_each_entry(its, &its_nodes, entry) {
5407                 has_v4 |= is_v4(its);
5408                 has_v4_1 |= is_v4_1(its);
5409         }
5410
5411         /* Don't bother with inconsistent systems */
5412         if (WARN_ON(!has_v4_1 && rdists->has_rvpeid))
5413                 rdists->has_rvpeid = false;
5414
5415         if (has_v4 & rdists->has_vlpis) {
5416                 const struct irq_domain_ops *sgi_ops;
5417
5418                 if (has_v4_1)
5419                         sgi_ops = &its_sgi_domain_ops;
5420                 else
5421                         sgi_ops = NULL;
5422
5423                 if (its_init_vpe_domain() ||
5424                     its_init_v4(parent_domain, &its_vpe_domain_ops, sgi_ops)) {
5425                         rdists->has_vlpis = false;
5426                         pr_err("ITS: Disabling GICv4 support\n");
5427                 }
5428         }
5429
5430         register_syscore_ops(&its_syscore_ops);
5431
5432         return 0;
5433 }