irqchip/gic-v3-its: Plug allocation race for devices sharing a DevID
[platform/kernel/linux-exynos.git] / drivers / irqchip / irq-gic-v3-its.c
1 /*
2  * Copyright (C) 2013-2017 ARM Limited, All Rights Reserved.
3  * Author: Marc Zyngier <marc.zyngier@arm.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #include <linux/acpi.h>
19 #include <linux/acpi_iort.h>
20 #include <linux/bitmap.h>
21 #include <linux/cpu.h>
22 #include <linux/delay.h>
23 #include <linux/dma-iommu.h>
24 #include <linux/interrupt.h>
25 #include <linux/irqdomain.h>
26 #include <linux/log2.h>
27 #include <linux/mm.h>
28 #include <linux/msi.h>
29 #include <linux/of.h>
30 #include <linux/of_address.h>
31 #include <linux/of_irq.h>
32 #include <linux/of_pci.h>
33 #include <linux/of_platform.h>
34 #include <linux/percpu.h>
35 #include <linux/slab.h>
36
37 #include <linux/irqchip.h>
38 #include <linux/irqchip/arm-gic-v3.h>
39 #include <linux/irqchip/arm-gic-v4.h>
40
41 #include <asm/cputype.h>
42 #include <asm/exception.h>
43
44 #include "irq-gic-common.h"
45
46 #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING           (1ULL << 0)
47 #define ITS_FLAGS_WORKAROUND_CAVIUM_22375       (1ULL << 1)
48 #define ITS_FLAGS_WORKAROUND_CAVIUM_23144       (1ULL << 2)
49
50 #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING     (1 << 0)
51
52 static u32 lpi_id_bits;
53
54 /*
55  * We allocate memory for PROPBASE to cover 2 ^ lpi_id_bits LPIs to
56  * deal with (one configuration byte per interrupt). PENDBASE has to
57  * be 64kB aligned (one bit per LPI, plus 8192 bits for SPI/PPI/SGI).
58  */
59 #define LPI_NRBITS              lpi_id_bits
60 #define LPI_PROPBASE_SZ         ALIGN(BIT(LPI_NRBITS), SZ_64K)
61 #define LPI_PENDBASE_SZ         ALIGN(BIT(LPI_NRBITS) / 8, SZ_64K)
62
63 #define LPI_PROP_DEFAULT_PRIO   0xa0
64
65 /*
66  * Collection structure - just an ID, and a redistributor address to
67  * ping. We use one per CPU as a bag of interrupts assigned to this
68  * CPU.
69  */
70 struct its_collection {
71         u64                     target_address;
72         u16                     col_id;
73 };
74
75 /*
76  * The ITS_BASER structure - contains memory information, cached
77  * value of BASER register configuration and ITS page size.
78  */
79 struct its_baser {
80         void            *base;
81         u64             val;
82         u32             order;
83         u32             psz;
84 };
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         phys_addr_t             phys_base;
101         struct its_cmd_block    *cmd_base;
102         struct its_cmd_block    *cmd_write;
103         struct its_baser        tables[GITS_BASER_NR_REGS];
104         struct its_collection   *collections;
105         struct list_head        its_device_list;
106         u64                     flags;
107         u32                     ite_size;
108         u32                     device_ids;
109         int                     numa_node;
110         bool                    is_v4;
111 };
112
113 #define ITS_ITT_ALIGN           SZ_256
114
115 /* The maximum number of VPEID bits supported by VLPI commands */
116 #define ITS_MAX_VPEID_BITS      (16)
117 #define ITS_MAX_VPEID           (1 << (ITS_MAX_VPEID_BITS))
118
119 /* Convert page order to size in bytes */
120 #define PAGE_ORDER_TO_SIZE(o)   (PAGE_SIZE << (o))
121
122 struct event_lpi_map {
123         unsigned long           *lpi_map;
124         u16                     *col_map;
125         irq_hw_number_t         lpi_base;
126         int                     nr_lpis;
127         struct mutex            vlpi_lock;
128         struct its_vm           *vm;
129         struct its_vlpi_map     *vlpi_maps;
130         int                     nr_vlpis;
131 };
132
133 /*
134  * The ITS view of a device - belongs to an ITS, owns an interrupt
135  * translation table, and a list of interrupts.  If it some of its
136  * LPIs are injected into a guest (GICv4), the event_map.vm field
137  * indicates which one.
138  */
139 struct its_device {
140         struct list_head        entry;
141         struct its_node         *its;
142         struct event_lpi_map    event_map;
143         void                    *itt;
144         u32                     nr_ites;
145         u32                     device_id;
146         bool                    shared;
147 };
148
149 static struct {
150         raw_spinlock_t          lock;
151         struct its_device       *dev;
152         struct its_vpe          **vpes;
153         int                     next_victim;
154 } vpe_proxy;
155
156 static LIST_HEAD(its_nodes);
157 static DEFINE_SPINLOCK(its_lock);
158 static struct rdists *gic_rdists;
159 static struct irq_domain *its_parent;
160
161 /*
162  * We have a maximum number of 16 ITSs in the whole system if we're
163  * using the ITSList mechanism
164  */
165 #define ITS_LIST_MAX            16
166
167 static unsigned long its_list_map;
168 static u16 vmovp_seq_num;
169 static DEFINE_RAW_SPINLOCK(vmovp_lock);
170
171 static DEFINE_IDA(its_vpeid_ida);
172
173 #define gic_data_rdist()                (raw_cpu_ptr(gic_rdists->rdist))
174 #define gic_data_rdist_rd_base()        (gic_data_rdist()->rd_base)
175 #define gic_data_rdist_vlpi_base()      (gic_data_rdist_rd_base() + SZ_128K)
176
177 static struct its_collection *dev_event_to_col(struct its_device *its_dev,
178                                                u32 event)
179 {
180         struct its_node *its = its_dev->its;
181
182         return its->collections + its_dev->event_map.col_map[event];
183 }
184
185 /*
186  * ITS command descriptors - parameters to be encoded in a command
187  * block.
188  */
189 struct its_cmd_desc {
190         union {
191                 struct {
192                         struct its_device *dev;
193                         u32 event_id;
194                 } its_inv_cmd;
195
196                 struct {
197                         struct its_device *dev;
198                         u32 event_id;
199                 } its_clear_cmd;
200
201                 struct {
202                         struct its_device *dev;
203                         u32 event_id;
204                 } its_int_cmd;
205
206                 struct {
207                         struct its_device *dev;
208                         int valid;
209                 } its_mapd_cmd;
210
211                 struct {
212                         struct its_collection *col;
213                         int valid;
214                 } its_mapc_cmd;
215
216                 struct {
217                         struct its_device *dev;
218                         u32 phys_id;
219                         u32 event_id;
220                 } its_mapti_cmd;
221
222                 struct {
223                         struct its_device *dev;
224                         struct its_collection *col;
225                         u32 event_id;
226                 } its_movi_cmd;
227
228                 struct {
229                         struct its_device *dev;
230                         u32 event_id;
231                 } its_discard_cmd;
232
233                 struct {
234                         struct its_collection *col;
235                 } its_invall_cmd;
236
237                 struct {
238                         struct its_vpe *vpe;
239                 } its_vinvall_cmd;
240
241                 struct {
242                         struct its_vpe *vpe;
243                         struct its_collection *col;
244                         bool valid;
245                 } its_vmapp_cmd;
246
247                 struct {
248                         struct its_vpe *vpe;
249                         struct its_device *dev;
250                         u32 virt_id;
251                         u32 event_id;
252                         bool db_enabled;
253                 } its_vmapti_cmd;
254
255                 struct {
256                         struct its_vpe *vpe;
257                         struct its_device *dev;
258                         u32 event_id;
259                         bool db_enabled;
260                 } its_vmovi_cmd;
261
262                 struct {
263                         struct its_vpe *vpe;
264                         struct its_collection *col;
265                         u16 seq_num;
266                         u16 its_list;
267                 } its_vmovp_cmd;
268         };
269 };
270
271 /*
272  * The ITS command block, which is what the ITS actually parses.
273  */
274 struct its_cmd_block {
275         u64     raw_cmd[4];
276 };
277
278 #define ITS_CMD_QUEUE_SZ                SZ_64K
279 #define ITS_CMD_QUEUE_NR_ENTRIES        (ITS_CMD_QUEUE_SZ / sizeof(struct its_cmd_block))
280
281 typedef struct its_collection *(*its_cmd_builder_t)(struct its_cmd_block *,
282                                                     struct its_cmd_desc *);
283
284 typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_cmd_block *,
285                                               struct its_cmd_desc *);
286
287 static void its_mask_encode(u64 *raw_cmd, u64 val, int h, int l)
288 {
289         u64 mask = GENMASK_ULL(h, l);
290         *raw_cmd &= ~mask;
291         *raw_cmd |= (val << l) & mask;
292 }
293
294 static void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr)
295 {
296         its_mask_encode(&cmd->raw_cmd[0], cmd_nr, 7, 0);
297 }
298
299 static void its_encode_devid(struct its_cmd_block *cmd, u32 devid)
300 {
301         its_mask_encode(&cmd->raw_cmd[0], devid, 63, 32);
302 }
303
304 static void its_encode_event_id(struct its_cmd_block *cmd, u32 id)
305 {
306         its_mask_encode(&cmd->raw_cmd[1], id, 31, 0);
307 }
308
309 static void its_encode_phys_id(struct its_cmd_block *cmd, u32 phys_id)
310 {
311         its_mask_encode(&cmd->raw_cmd[1], phys_id, 63, 32);
312 }
313
314 static void its_encode_size(struct its_cmd_block *cmd, u8 size)
315 {
316         its_mask_encode(&cmd->raw_cmd[1], size, 4, 0);
317 }
318
319 static void its_encode_itt(struct its_cmd_block *cmd, u64 itt_addr)
320 {
321         its_mask_encode(&cmd->raw_cmd[2], itt_addr >> 8, 51, 8);
322 }
323
324 static void its_encode_valid(struct its_cmd_block *cmd, int valid)
325 {
326         its_mask_encode(&cmd->raw_cmd[2], !!valid, 63, 63);
327 }
328
329 static void its_encode_target(struct its_cmd_block *cmd, u64 target_addr)
330 {
331         its_mask_encode(&cmd->raw_cmd[2], target_addr >> 16, 51, 16);
332 }
333
334 static void its_encode_collection(struct its_cmd_block *cmd, u16 col)
335 {
336         its_mask_encode(&cmd->raw_cmd[2], col, 15, 0);
337 }
338
339 static void its_encode_vpeid(struct its_cmd_block *cmd, u16 vpeid)
340 {
341         its_mask_encode(&cmd->raw_cmd[1], vpeid, 47, 32);
342 }
343
344 static void its_encode_virt_id(struct its_cmd_block *cmd, u32 virt_id)
345 {
346         its_mask_encode(&cmd->raw_cmd[2], virt_id, 31, 0);
347 }
348
349 static void its_encode_db_phys_id(struct its_cmd_block *cmd, u32 db_phys_id)
350 {
351         its_mask_encode(&cmd->raw_cmd[2], db_phys_id, 63, 32);
352 }
353
354 static void its_encode_db_valid(struct its_cmd_block *cmd, bool db_valid)
355 {
356         its_mask_encode(&cmd->raw_cmd[2], db_valid, 0, 0);
357 }
358
359 static void its_encode_seq_num(struct its_cmd_block *cmd, u16 seq_num)
360 {
361         its_mask_encode(&cmd->raw_cmd[0], seq_num, 47, 32);
362 }
363
364 static void its_encode_its_list(struct its_cmd_block *cmd, u16 its_list)
365 {
366         its_mask_encode(&cmd->raw_cmd[1], its_list, 15, 0);
367 }
368
369 static void its_encode_vpt_addr(struct its_cmd_block *cmd, u64 vpt_pa)
370 {
371         its_mask_encode(&cmd->raw_cmd[3], vpt_pa >> 16, 51, 16);
372 }
373
374 static void its_encode_vpt_size(struct its_cmd_block *cmd, u8 vpt_size)
375 {
376         its_mask_encode(&cmd->raw_cmd[3], vpt_size, 4, 0);
377 }
378
379 static inline void its_fixup_cmd(struct its_cmd_block *cmd)
380 {
381         /* Let's fixup BE commands */
382         cmd->raw_cmd[0] = cpu_to_le64(cmd->raw_cmd[0]);
383         cmd->raw_cmd[1] = cpu_to_le64(cmd->raw_cmd[1]);
384         cmd->raw_cmd[2] = cpu_to_le64(cmd->raw_cmd[2]);
385         cmd->raw_cmd[3] = cpu_to_le64(cmd->raw_cmd[3]);
386 }
387
388 static struct its_collection *its_build_mapd_cmd(struct its_cmd_block *cmd,
389                                                  struct its_cmd_desc *desc)
390 {
391         unsigned long itt_addr;
392         u8 size = ilog2(desc->its_mapd_cmd.dev->nr_ites);
393
394         itt_addr = virt_to_phys(desc->its_mapd_cmd.dev->itt);
395         itt_addr = ALIGN(itt_addr, ITS_ITT_ALIGN);
396
397         its_encode_cmd(cmd, GITS_CMD_MAPD);
398         its_encode_devid(cmd, desc->its_mapd_cmd.dev->device_id);
399         its_encode_size(cmd, size - 1);
400         its_encode_itt(cmd, itt_addr);
401         its_encode_valid(cmd, desc->its_mapd_cmd.valid);
402
403         its_fixup_cmd(cmd);
404
405         return NULL;
406 }
407
408 static struct its_collection *its_build_mapc_cmd(struct its_cmd_block *cmd,
409                                                  struct its_cmd_desc *desc)
410 {
411         its_encode_cmd(cmd, GITS_CMD_MAPC);
412         its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
413         its_encode_target(cmd, desc->its_mapc_cmd.col->target_address);
414         its_encode_valid(cmd, desc->its_mapc_cmd.valid);
415
416         its_fixup_cmd(cmd);
417
418         return desc->its_mapc_cmd.col;
419 }
420
421 static struct its_collection *its_build_mapti_cmd(struct its_cmd_block *cmd,
422                                                   struct its_cmd_desc *desc)
423 {
424         struct its_collection *col;
425
426         col = dev_event_to_col(desc->its_mapti_cmd.dev,
427                                desc->its_mapti_cmd.event_id);
428
429         its_encode_cmd(cmd, GITS_CMD_MAPTI);
430         its_encode_devid(cmd, desc->its_mapti_cmd.dev->device_id);
431         its_encode_event_id(cmd, desc->its_mapti_cmd.event_id);
432         its_encode_phys_id(cmd, desc->its_mapti_cmd.phys_id);
433         its_encode_collection(cmd, col->col_id);
434
435         its_fixup_cmd(cmd);
436
437         return col;
438 }
439
440 static struct its_collection *its_build_movi_cmd(struct its_cmd_block *cmd,
441                                                  struct its_cmd_desc *desc)
442 {
443         struct its_collection *col;
444
445         col = dev_event_to_col(desc->its_movi_cmd.dev,
446                                desc->its_movi_cmd.event_id);
447
448         its_encode_cmd(cmd, GITS_CMD_MOVI);
449         its_encode_devid(cmd, desc->its_movi_cmd.dev->device_id);
450         its_encode_event_id(cmd, desc->its_movi_cmd.event_id);
451         its_encode_collection(cmd, desc->its_movi_cmd.col->col_id);
452
453         its_fixup_cmd(cmd);
454
455         return col;
456 }
457
458 static struct its_collection *its_build_discard_cmd(struct its_cmd_block *cmd,
459                                                     struct its_cmd_desc *desc)
460 {
461         struct its_collection *col;
462
463         col = dev_event_to_col(desc->its_discard_cmd.dev,
464                                desc->its_discard_cmd.event_id);
465
466         its_encode_cmd(cmd, GITS_CMD_DISCARD);
467         its_encode_devid(cmd, desc->its_discard_cmd.dev->device_id);
468         its_encode_event_id(cmd, desc->its_discard_cmd.event_id);
469
470         its_fixup_cmd(cmd);
471
472         return col;
473 }
474
475 static struct its_collection *its_build_inv_cmd(struct its_cmd_block *cmd,
476                                                 struct its_cmd_desc *desc)
477 {
478         struct its_collection *col;
479
480         col = dev_event_to_col(desc->its_inv_cmd.dev,
481                                desc->its_inv_cmd.event_id);
482
483         its_encode_cmd(cmd, GITS_CMD_INV);
484         its_encode_devid(cmd, desc->its_inv_cmd.dev->device_id);
485         its_encode_event_id(cmd, desc->its_inv_cmd.event_id);
486
487         its_fixup_cmd(cmd);
488
489         return col;
490 }
491
492 static struct its_collection *its_build_int_cmd(struct its_cmd_block *cmd,
493                                                 struct its_cmd_desc *desc)
494 {
495         struct its_collection *col;
496
497         col = dev_event_to_col(desc->its_int_cmd.dev,
498                                desc->its_int_cmd.event_id);
499
500         its_encode_cmd(cmd, GITS_CMD_INT);
501         its_encode_devid(cmd, desc->its_int_cmd.dev->device_id);
502         its_encode_event_id(cmd, desc->its_int_cmd.event_id);
503
504         its_fixup_cmd(cmd);
505
506         return col;
507 }
508
509 static struct its_collection *its_build_clear_cmd(struct its_cmd_block *cmd,
510                                                   struct its_cmd_desc *desc)
511 {
512         struct its_collection *col;
513
514         col = dev_event_to_col(desc->its_clear_cmd.dev,
515                                desc->its_clear_cmd.event_id);
516
517         its_encode_cmd(cmd, GITS_CMD_CLEAR);
518         its_encode_devid(cmd, desc->its_clear_cmd.dev->device_id);
519         its_encode_event_id(cmd, desc->its_clear_cmd.event_id);
520
521         its_fixup_cmd(cmd);
522
523         return col;
524 }
525
526 static struct its_collection *its_build_invall_cmd(struct its_cmd_block *cmd,
527                                                    struct its_cmd_desc *desc)
528 {
529         its_encode_cmd(cmd, GITS_CMD_INVALL);
530         its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
531
532         its_fixup_cmd(cmd);
533
534         return NULL;
535 }
536
537 static struct its_vpe *its_build_vinvall_cmd(struct its_cmd_block *cmd,
538                                              struct its_cmd_desc *desc)
539 {
540         its_encode_cmd(cmd, GITS_CMD_VINVALL);
541         its_encode_vpeid(cmd, desc->its_vinvall_cmd.vpe->vpe_id);
542
543         its_fixup_cmd(cmd);
544
545         return desc->its_vinvall_cmd.vpe;
546 }
547
548 static struct its_vpe *its_build_vmapp_cmd(struct its_cmd_block *cmd,
549                                            struct its_cmd_desc *desc)
550 {
551         unsigned long vpt_addr;
552
553         vpt_addr = virt_to_phys(page_address(desc->its_vmapp_cmd.vpe->vpt_page));
554
555         its_encode_cmd(cmd, GITS_CMD_VMAPP);
556         its_encode_vpeid(cmd, desc->its_vmapp_cmd.vpe->vpe_id);
557         its_encode_valid(cmd, desc->its_vmapp_cmd.valid);
558         its_encode_target(cmd, desc->its_vmapp_cmd.col->target_address);
559         its_encode_vpt_addr(cmd, vpt_addr);
560         its_encode_vpt_size(cmd, LPI_NRBITS - 1);
561
562         its_fixup_cmd(cmd);
563
564         return desc->its_vmapp_cmd.vpe;
565 }
566
567 static struct its_vpe *its_build_vmapti_cmd(struct its_cmd_block *cmd,
568                                             struct its_cmd_desc *desc)
569 {
570         u32 db;
571
572         if (desc->its_vmapti_cmd.db_enabled)
573                 db = desc->its_vmapti_cmd.vpe->vpe_db_lpi;
574         else
575                 db = 1023;
576
577         its_encode_cmd(cmd, GITS_CMD_VMAPTI);
578         its_encode_devid(cmd, desc->its_vmapti_cmd.dev->device_id);
579         its_encode_vpeid(cmd, desc->its_vmapti_cmd.vpe->vpe_id);
580         its_encode_event_id(cmd, desc->its_vmapti_cmd.event_id);
581         its_encode_db_phys_id(cmd, db);
582         its_encode_virt_id(cmd, desc->its_vmapti_cmd.virt_id);
583
584         its_fixup_cmd(cmd);
585
586         return desc->its_vmapti_cmd.vpe;
587 }
588
589 static struct its_vpe *its_build_vmovi_cmd(struct its_cmd_block *cmd,
590                                            struct its_cmd_desc *desc)
591 {
592         u32 db;
593
594         if (desc->its_vmovi_cmd.db_enabled)
595                 db = desc->its_vmovi_cmd.vpe->vpe_db_lpi;
596         else
597                 db = 1023;
598
599         its_encode_cmd(cmd, GITS_CMD_VMOVI);
600         its_encode_devid(cmd, desc->its_vmovi_cmd.dev->device_id);
601         its_encode_vpeid(cmd, desc->its_vmovi_cmd.vpe->vpe_id);
602         its_encode_event_id(cmd, desc->its_vmovi_cmd.event_id);
603         its_encode_db_phys_id(cmd, db);
604         its_encode_db_valid(cmd, true);
605
606         its_fixup_cmd(cmd);
607
608         return desc->its_vmovi_cmd.vpe;
609 }
610
611 static struct its_vpe *its_build_vmovp_cmd(struct its_cmd_block *cmd,
612                                            struct its_cmd_desc *desc)
613 {
614         its_encode_cmd(cmd, GITS_CMD_VMOVP);
615         its_encode_seq_num(cmd, desc->its_vmovp_cmd.seq_num);
616         its_encode_its_list(cmd, desc->its_vmovp_cmd.its_list);
617         its_encode_vpeid(cmd, desc->its_vmovp_cmd.vpe->vpe_id);
618         its_encode_target(cmd, desc->its_vmovp_cmd.col->target_address);
619
620         its_fixup_cmd(cmd);
621
622         return desc->its_vmovp_cmd.vpe;
623 }
624
625 static u64 its_cmd_ptr_to_offset(struct its_node *its,
626                                  struct its_cmd_block *ptr)
627 {
628         return (ptr - its->cmd_base) * sizeof(*ptr);
629 }
630
631 static int its_queue_full(struct its_node *its)
632 {
633         int widx;
634         int ridx;
635
636         widx = its->cmd_write - its->cmd_base;
637         ridx = readl_relaxed(its->base + GITS_CREADR) / sizeof(struct its_cmd_block);
638
639         /* This is incredibly unlikely to happen, unless the ITS locks up. */
640         if (((widx + 1) % ITS_CMD_QUEUE_NR_ENTRIES) == ridx)
641                 return 1;
642
643         return 0;
644 }
645
646 static struct its_cmd_block *its_allocate_entry(struct its_node *its)
647 {
648         struct its_cmd_block *cmd;
649         u32 count = 1000000;    /* 1s! */
650
651         while (its_queue_full(its)) {
652                 count--;
653                 if (!count) {
654                         pr_err_ratelimited("ITS queue not draining\n");
655                         return NULL;
656                 }
657                 cpu_relax();
658                 udelay(1);
659         }
660
661         cmd = its->cmd_write++;
662
663         /* Handle queue wrapping */
664         if (its->cmd_write == (its->cmd_base + ITS_CMD_QUEUE_NR_ENTRIES))
665                 its->cmd_write = its->cmd_base;
666
667         /* Clear command  */
668         cmd->raw_cmd[0] = 0;
669         cmd->raw_cmd[1] = 0;
670         cmd->raw_cmd[2] = 0;
671         cmd->raw_cmd[3] = 0;
672
673         return cmd;
674 }
675
676 static struct its_cmd_block *its_post_commands(struct its_node *its)
677 {
678         u64 wr = its_cmd_ptr_to_offset(its, its->cmd_write);
679
680         writel_relaxed(wr, its->base + GITS_CWRITER);
681
682         return its->cmd_write;
683 }
684
685 static void its_flush_cmd(struct its_node *its, struct its_cmd_block *cmd)
686 {
687         /*
688          * Make sure the commands written to memory are observable by
689          * the ITS.
690          */
691         if (its->flags & ITS_FLAGS_CMDQ_NEEDS_FLUSHING)
692                 gic_flush_dcache_to_poc(cmd, sizeof(*cmd));
693         else
694                 dsb(ishst);
695 }
696
697 static void its_wait_for_range_completion(struct its_node *its,
698                                           struct its_cmd_block *from,
699                                           struct its_cmd_block *to)
700 {
701         u64 rd_idx, from_idx, to_idx;
702         u32 count = 1000000;    /* 1s! */
703
704         from_idx = its_cmd_ptr_to_offset(its, from);
705         to_idx = its_cmd_ptr_to_offset(its, to);
706
707         while (1) {
708                 rd_idx = readl_relaxed(its->base + GITS_CREADR);
709
710                 /* Direct case */
711                 if (from_idx < to_idx && rd_idx >= to_idx)
712                         break;
713
714                 /* Wrapped case */
715                 if (from_idx >= to_idx && rd_idx >= to_idx && rd_idx < from_idx)
716                         break;
717
718                 count--;
719                 if (!count) {
720                         pr_err_ratelimited("ITS queue timeout\n");
721                         return;
722                 }
723                 cpu_relax();
724                 udelay(1);
725         }
726 }
727
728 /* Warning, macro hell follows */
729 #define BUILD_SINGLE_CMD_FUNC(name, buildtype, synctype, buildfn)       \
730 void name(struct its_node *its,                                         \
731           buildtype builder,                                            \
732           struct its_cmd_desc *desc)                                    \
733 {                                                                       \
734         struct its_cmd_block *cmd, *sync_cmd, *next_cmd;                \
735         synctype *sync_obj;                                             \
736         unsigned long flags;                                            \
737                                                                         \
738         raw_spin_lock_irqsave(&its->lock, flags);                       \
739                                                                         \
740         cmd = its_allocate_entry(its);                                  \
741         if (!cmd) {             /* We're soooooo screewed... */         \
742                 raw_spin_unlock_irqrestore(&its->lock, flags);          \
743                 return;                                                 \
744         }                                                               \
745         sync_obj = builder(cmd, desc);                                  \
746         its_flush_cmd(its, cmd);                                        \
747                                                                         \
748         if (sync_obj) {                                                 \
749                 sync_cmd = its_allocate_entry(its);                     \
750                 if (!sync_cmd)                                          \
751                         goto post;                                      \
752                                                                         \
753                 buildfn(sync_cmd, sync_obj);                            \
754                 its_flush_cmd(its, sync_cmd);                           \
755         }                                                               \
756                                                                         \
757 post:                                                                   \
758         next_cmd = its_post_commands(its);                              \
759         raw_spin_unlock_irqrestore(&its->lock, flags);                  \
760                                                                         \
761         its_wait_for_range_completion(its, cmd, next_cmd);              \
762 }
763
764 static void its_build_sync_cmd(struct its_cmd_block *sync_cmd,
765                                struct its_collection *sync_col)
766 {
767         its_encode_cmd(sync_cmd, GITS_CMD_SYNC);
768         its_encode_target(sync_cmd, sync_col->target_address);
769
770         its_fixup_cmd(sync_cmd);
771 }
772
773 static BUILD_SINGLE_CMD_FUNC(its_send_single_command, its_cmd_builder_t,
774                              struct its_collection, its_build_sync_cmd)
775
776 static void its_build_vsync_cmd(struct its_cmd_block *sync_cmd,
777                                 struct its_vpe *sync_vpe)
778 {
779         its_encode_cmd(sync_cmd, GITS_CMD_VSYNC);
780         its_encode_vpeid(sync_cmd, sync_vpe->vpe_id);
781
782         its_fixup_cmd(sync_cmd);
783 }
784
785 static BUILD_SINGLE_CMD_FUNC(its_send_single_vcommand, its_cmd_vbuilder_t,
786                              struct its_vpe, its_build_vsync_cmd)
787
788 static void its_send_int(struct its_device *dev, u32 event_id)
789 {
790         struct its_cmd_desc desc;
791
792         desc.its_int_cmd.dev = dev;
793         desc.its_int_cmd.event_id = event_id;
794
795         its_send_single_command(dev->its, its_build_int_cmd, &desc);
796 }
797
798 static void its_send_clear(struct its_device *dev, u32 event_id)
799 {
800         struct its_cmd_desc desc;
801
802         desc.its_clear_cmd.dev = dev;
803         desc.its_clear_cmd.event_id = event_id;
804
805         its_send_single_command(dev->its, its_build_clear_cmd, &desc);
806 }
807
808 static void its_send_inv(struct its_device *dev, u32 event_id)
809 {
810         struct its_cmd_desc desc;
811
812         desc.its_inv_cmd.dev = dev;
813         desc.its_inv_cmd.event_id = event_id;
814
815         its_send_single_command(dev->its, its_build_inv_cmd, &desc);
816 }
817
818 static void its_send_mapd(struct its_device *dev, int valid)
819 {
820         struct its_cmd_desc desc;
821
822         desc.its_mapd_cmd.dev = dev;
823         desc.its_mapd_cmd.valid = !!valid;
824
825         its_send_single_command(dev->its, its_build_mapd_cmd, &desc);
826 }
827
828 static void its_send_mapc(struct its_node *its, struct its_collection *col,
829                           int valid)
830 {
831         struct its_cmd_desc desc;
832
833         desc.its_mapc_cmd.col = col;
834         desc.its_mapc_cmd.valid = !!valid;
835
836         its_send_single_command(its, its_build_mapc_cmd, &desc);
837 }
838
839 static void its_send_mapti(struct its_device *dev, u32 irq_id, u32 id)
840 {
841         struct its_cmd_desc desc;
842
843         desc.its_mapti_cmd.dev = dev;
844         desc.its_mapti_cmd.phys_id = irq_id;
845         desc.its_mapti_cmd.event_id = id;
846
847         its_send_single_command(dev->its, its_build_mapti_cmd, &desc);
848 }
849
850 static void its_send_movi(struct its_device *dev,
851                           struct its_collection *col, u32 id)
852 {
853         struct its_cmd_desc desc;
854
855         desc.its_movi_cmd.dev = dev;
856         desc.its_movi_cmd.col = col;
857         desc.its_movi_cmd.event_id = id;
858
859         its_send_single_command(dev->its, its_build_movi_cmd, &desc);
860 }
861
862 static void its_send_discard(struct its_device *dev, u32 id)
863 {
864         struct its_cmd_desc desc;
865
866         desc.its_discard_cmd.dev = dev;
867         desc.its_discard_cmd.event_id = id;
868
869         its_send_single_command(dev->its, its_build_discard_cmd, &desc);
870 }
871
872 static void its_send_invall(struct its_node *its, struct its_collection *col)
873 {
874         struct its_cmd_desc desc;
875
876         desc.its_invall_cmd.col = col;
877
878         its_send_single_command(its, its_build_invall_cmd, &desc);
879 }
880
881 static void its_send_vmapti(struct its_device *dev, u32 id)
882 {
883         struct its_vlpi_map *map = &dev->event_map.vlpi_maps[id];
884         struct its_cmd_desc desc;
885
886         desc.its_vmapti_cmd.vpe = map->vpe;
887         desc.its_vmapti_cmd.dev = dev;
888         desc.its_vmapti_cmd.virt_id = map->vintid;
889         desc.its_vmapti_cmd.event_id = id;
890         desc.its_vmapti_cmd.db_enabled = map->db_enabled;
891
892         its_send_single_vcommand(dev->its, its_build_vmapti_cmd, &desc);
893 }
894
895 static void its_send_vmovi(struct its_device *dev, u32 id)
896 {
897         struct its_vlpi_map *map = &dev->event_map.vlpi_maps[id];
898         struct its_cmd_desc desc;
899
900         desc.its_vmovi_cmd.vpe = map->vpe;
901         desc.its_vmovi_cmd.dev = dev;
902         desc.its_vmovi_cmd.event_id = id;
903         desc.its_vmovi_cmd.db_enabled = map->db_enabled;
904
905         its_send_single_vcommand(dev->its, its_build_vmovi_cmd, &desc);
906 }
907
908 static void its_send_vmapp(struct its_vpe *vpe, bool valid)
909 {
910         struct its_cmd_desc desc;
911         struct its_node *its;
912
913         desc.its_vmapp_cmd.vpe = vpe;
914         desc.its_vmapp_cmd.valid = valid;
915
916         list_for_each_entry(its, &its_nodes, entry) {
917                 if (!its->is_v4)
918                         continue;
919
920                 desc.its_vmapp_cmd.col = &its->collections[vpe->col_idx];
921                 its_send_single_vcommand(its, its_build_vmapp_cmd, &desc);
922         }
923 }
924
925 static void its_send_vmovp(struct its_vpe *vpe)
926 {
927         struct its_cmd_desc desc;
928         struct its_node *its;
929         unsigned long flags;
930         int col_id = vpe->col_idx;
931
932         desc.its_vmovp_cmd.vpe = vpe;
933         desc.its_vmovp_cmd.its_list = (u16)its_list_map;
934
935         if (!its_list_map) {
936                 its = list_first_entry(&its_nodes, struct its_node, entry);
937                 desc.its_vmovp_cmd.seq_num = 0;
938                 desc.its_vmovp_cmd.col = &its->collections[col_id];
939                 its_send_single_vcommand(its, its_build_vmovp_cmd, &desc);
940                 return;
941         }
942
943         /*
944          * Yet another marvel of the architecture. If using the
945          * its_list "feature", we need to make sure that all ITSs
946          * receive all VMOVP commands in the same order. The only way
947          * to guarantee this is to make vmovp a serialization point.
948          *
949          * Wall <-- Head.
950          */
951         raw_spin_lock_irqsave(&vmovp_lock, flags);
952
953         desc.its_vmovp_cmd.seq_num = vmovp_seq_num++;
954
955         /* Emit VMOVPs */
956         list_for_each_entry(its, &its_nodes, entry) {
957                 if (!its->is_v4)
958                         continue;
959
960                 desc.its_vmovp_cmd.col = &its->collections[col_id];
961                 its_send_single_vcommand(its, its_build_vmovp_cmd, &desc);
962         }
963
964         raw_spin_unlock_irqrestore(&vmovp_lock, flags);
965 }
966
967 static void its_send_vinvall(struct its_vpe *vpe)
968 {
969         struct its_cmd_desc desc;
970         struct its_node *its;
971
972         desc.its_vinvall_cmd.vpe = vpe;
973
974         list_for_each_entry(its, &its_nodes, entry) {
975                 if (!its->is_v4)
976                         continue;
977                 its_send_single_vcommand(its, its_build_vinvall_cmd, &desc);
978         }
979 }
980
981 /*
982  * irqchip functions - assumes MSI, mostly.
983  */
984
985 static inline u32 its_get_event_id(struct irq_data *d)
986 {
987         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
988         return d->hwirq - its_dev->event_map.lpi_base;
989 }
990
991 static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
992 {
993         irq_hw_number_t hwirq;
994         struct page *prop_page;
995         u8 *cfg;
996
997         if (irqd_is_forwarded_to_vcpu(d)) {
998                 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
999                 u32 event = its_get_event_id(d);
1000
1001                 prop_page = its_dev->event_map.vm->vprop_page;
1002                 hwirq = its_dev->event_map.vlpi_maps[event].vintid;
1003         } else {
1004                 prop_page = gic_rdists->prop_page;
1005                 hwirq = d->hwirq;
1006         }
1007
1008         cfg = page_address(prop_page) + hwirq - 8192;
1009         *cfg &= ~clr;
1010         *cfg |= set | LPI_PROP_GROUP1;
1011
1012         /*
1013          * Make the above write visible to the redistributors.
1014          * And yes, we're flushing exactly: One. Single. Byte.
1015          * Humpf...
1016          */
1017         if (gic_rdists->flags & RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING)
1018                 gic_flush_dcache_to_poc(cfg, sizeof(*cfg));
1019         else
1020                 dsb(ishst);
1021 }
1022
1023 static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
1024 {
1025         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1026
1027         lpi_write_config(d, clr, set);
1028         its_send_inv(its_dev, its_get_event_id(d));
1029 }
1030
1031 static void its_vlpi_set_doorbell(struct irq_data *d, bool enable)
1032 {
1033         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1034         u32 event = its_get_event_id(d);
1035
1036         if (its_dev->event_map.vlpi_maps[event].db_enabled == enable)
1037                 return;
1038
1039         its_dev->event_map.vlpi_maps[event].db_enabled = enable;
1040
1041         /*
1042          * More fun with the architecture:
1043          *
1044          * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI
1045          * value or to 1023, depending on the enable bit. But that
1046          * would be issueing a mapping for an /existing/ DevID+EventID
1047          * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI
1048          * to the /same/ vPE, using this opportunity to adjust the
1049          * doorbell. Mouahahahaha. We loves it, Precious.
1050          */
1051         its_send_vmovi(its_dev, event);
1052 }
1053
1054 static void its_mask_irq(struct irq_data *d)
1055 {
1056         if (irqd_is_forwarded_to_vcpu(d))
1057                 its_vlpi_set_doorbell(d, false);
1058
1059         lpi_update_config(d, LPI_PROP_ENABLED, 0);
1060 }
1061
1062 static void its_unmask_irq(struct irq_data *d)
1063 {
1064         if (irqd_is_forwarded_to_vcpu(d))
1065                 its_vlpi_set_doorbell(d, true);
1066
1067         lpi_update_config(d, 0, LPI_PROP_ENABLED);
1068 }
1069
1070 static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
1071                             bool force)
1072 {
1073         unsigned int cpu;
1074         const struct cpumask *cpu_mask = cpu_online_mask;
1075         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1076         struct its_collection *target_col;
1077         u32 id = its_get_event_id(d);
1078
1079         /* A forwarded interrupt should use irq_set_vcpu_affinity */
1080         if (irqd_is_forwarded_to_vcpu(d))
1081                 return -EINVAL;
1082
1083        /* lpi cannot be routed to a redistributor that is on a foreign node */
1084         if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
1085                 if (its_dev->its->numa_node >= 0) {
1086                         cpu_mask = cpumask_of_node(its_dev->its->numa_node);
1087                         if (!cpumask_intersects(mask_val, cpu_mask))
1088                                 return -EINVAL;
1089                 }
1090         }
1091
1092         cpu = cpumask_any_and(mask_val, cpu_mask);
1093
1094         if (cpu >= nr_cpu_ids)
1095                 return -EINVAL;
1096
1097         /* don't set the affinity when the target cpu is same as current one */
1098         if (cpu != its_dev->event_map.col_map[id]) {
1099                 target_col = &its_dev->its->collections[cpu];
1100                 its_send_movi(its_dev, target_col, id);
1101                 its_dev->event_map.col_map[id] = cpu;
1102                 irq_data_update_effective_affinity(d, cpumask_of(cpu));
1103         }
1104
1105         return IRQ_SET_MASK_OK_DONE;
1106 }
1107
1108 static void its_irq_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
1109 {
1110         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1111         struct its_node *its;
1112         u64 addr;
1113
1114         its = its_dev->its;
1115         addr = its->phys_base + GITS_TRANSLATER;
1116
1117         msg->address_lo         = lower_32_bits(addr);
1118         msg->address_hi         = upper_32_bits(addr);
1119         msg->data               = its_get_event_id(d);
1120
1121         iommu_dma_map_msi_msg(d->irq, msg);
1122 }
1123
1124 static int its_irq_set_irqchip_state(struct irq_data *d,
1125                                      enum irqchip_irq_state which,
1126                                      bool state)
1127 {
1128         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1129         u32 event = its_get_event_id(d);
1130
1131         if (which != IRQCHIP_STATE_PENDING)
1132                 return -EINVAL;
1133
1134         if (state)
1135                 its_send_int(its_dev, event);
1136         else
1137                 its_send_clear(its_dev, event);
1138
1139         return 0;
1140 }
1141
1142 static int its_vlpi_map(struct irq_data *d, struct its_cmd_info *info)
1143 {
1144         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1145         u32 event = its_get_event_id(d);
1146         int ret = 0;
1147
1148         if (!info->map)
1149                 return -EINVAL;
1150
1151         mutex_lock(&its_dev->event_map.vlpi_lock);
1152
1153         if (!its_dev->event_map.vm) {
1154                 struct its_vlpi_map *maps;
1155
1156                 maps = kzalloc(sizeof(*maps) * its_dev->event_map.nr_lpis,
1157                                GFP_KERNEL);
1158                 if (!maps) {
1159                         ret = -ENOMEM;
1160                         goto out;
1161                 }
1162
1163                 its_dev->event_map.vm = info->map->vm;
1164                 its_dev->event_map.vlpi_maps = maps;
1165         } else if (its_dev->event_map.vm != info->map->vm) {
1166                 ret = -EINVAL;
1167                 goto out;
1168         }
1169
1170         /* Get our private copy of the mapping information */
1171         its_dev->event_map.vlpi_maps[event] = *info->map;
1172
1173         if (irqd_is_forwarded_to_vcpu(d)) {
1174                 /* Already mapped, move it around */
1175                 its_send_vmovi(its_dev, event);
1176         } else {
1177                 /* Drop the physical mapping */
1178                 its_send_discard(its_dev, event);
1179
1180                 /* and install the virtual one */
1181                 its_send_vmapti(its_dev, event);
1182                 irqd_set_forwarded_to_vcpu(d);
1183
1184                 /* Increment the number of VLPIs */
1185                 its_dev->event_map.nr_vlpis++;
1186         }
1187
1188 out:
1189         mutex_unlock(&its_dev->event_map.vlpi_lock);
1190         return ret;
1191 }
1192
1193 static int its_vlpi_get(struct irq_data *d, struct its_cmd_info *info)
1194 {
1195         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1196         u32 event = its_get_event_id(d);
1197         int ret = 0;
1198
1199         mutex_lock(&its_dev->event_map.vlpi_lock);
1200
1201         if (!its_dev->event_map.vm ||
1202             !its_dev->event_map.vlpi_maps[event].vm) {
1203                 ret = -EINVAL;
1204                 goto out;
1205         }
1206
1207         /* Copy our mapping information to the incoming request */
1208         *info->map = its_dev->event_map.vlpi_maps[event];
1209
1210 out:
1211         mutex_unlock(&its_dev->event_map.vlpi_lock);
1212         return ret;
1213 }
1214
1215 static int its_vlpi_unmap(struct irq_data *d)
1216 {
1217         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1218         u32 event = its_get_event_id(d);
1219         int ret = 0;
1220
1221         mutex_lock(&its_dev->event_map.vlpi_lock);
1222
1223         if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d)) {
1224                 ret = -EINVAL;
1225                 goto out;
1226         }
1227
1228         /* Drop the virtual mapping */
1229         its_send_discard(its_dev, event);
1230
1231         /* and restore the physical one */
1232         irqd_clr_forwarded_to_vcpu(d);
1233         its_send_mapti(its_dev, d->hwirq, event);
1234         lpi_update_config(d, 0xff, (LPI_PROP_DEFAULT_PRIO |
1235                                     LPI_PROP_ENABLED |
1236                                     LPI_PROP_GROUP1));
1237
1238         /*
1239          * Drop the refcount and make the device available again if
1240          * this was the last VLPI.
1241          */
1242         if (!--its_dev->event_map.nr_vlpis) {
1243                 its_dev->event_map.vm = NULL;
1244                 kfree(its_dev->event_map.vlpi_maps);
1245         }
1246
1247 out:
1248         mutex_unlock(&its_dev->event_map.vlpi_lock);
1249         return ret;
1250 }
1251
1252 static int its_vlpi_prop_update(struct irq_data *d, struct its_cmd_info *info)
1253 {
1254         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1255
1256         if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
1257                 return -EINVAL;
1258
1259         if (info->cmd_type == PROP_UPDATE_AND_INV_VLPI)
1260                 lpi_update_config(d, 0xff, info->config);
1261         else
1262                 lpi_write_config(d, 0xff, info->config);
1263         its_vlpi_set_doorbell(d, !!(info->config & LPI_PROP_ENABLED));
1264
1265         return 0;
1266 }
1267
1268 static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
1269 {
1270         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
1271         struct its_cmd_info *info = vcpu_info;
1272
1273         /* Need a v4 ITS */
1274         if (!its_dev->its->is_v4)
1275                 return -EINVAL;
1276
1277         /* Unmap request? */
1278         if (!info)
1279                 return its_vlpi_unmap(d);
1280
1281         switch (info->cmd_type) {
1282         case MAP_VLPI:
1283                 return its_vlpi_map(d, info);
1284
1285         case GET_VLPI:
1286                 return its_vlpi_get(d, info);
1287
1288         case PROP_UPDATE_VLPI:
1289         case PROP_UPDATE_AND_INV_VLPI:
1290                 return its_vlpi_prop_update(d, info);
1291
1292         default:
1293                 return -EINVAL;
1294         }
1295 }
1296
1297 static struct irq_chip its_irq_chip = {
1298         .name                   = "ITS",
1299         .irq_mask               = its_mask_irq,
1300         .irq_unmask             = its_unmask_irq,
1301         .irq_eoi                = irq_chip_eoi_parent,
1302         .irq_set_affinity       = its_set_affinity,
1303         .irq_compose_msi_msg    = its_irq_compose_msi_msg,
1304         .irq_set_irqchip_state  = its_irq_set_irqchip_state,
1305         .irq_set_vcpu_affinity  = its_irq_set_vcpu_affinity,
1306 };
1307
1308 /*
1309  * How we allocate LPIs:
1310  *
1311  * The GIC has id_bits bits for interrupt identifiers. From there, we
1312  * must subtract 8192 which are reserved for SGIs/PPIs/SPIs. Then, as
1313  * we allocate LPIs by chunks of 32, we can shift the whole thing by 5
1314  * bits to the right.
1315  *
1316  * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
1317  */
1318 #define IRQS_PER_CHUNK_SHIFT    5
1319 #define IRQS_PER_CHUNK          (1UL << IRQS_PER_CHUNK_SHIFT)
1320 #define ITS_MAX_LPI_NRBITS      16 /* 64K LPIs */
1321
1322 static unsigned long *lpi_bitmap;
1323 static u32 lpi_chunks;
1324 static DEFINE_SPINLOCK(lpi_lock);
1325
1326 static int its_lpi_to_chunk(int lpi)
1327 {
1328         return (lpi - 8192) >> IRQS_PER_CHUNK_SHIFT;
1329 }
1330
1331 static int its_chunk_to_lpi(int chunk)
1332 {
1333         return (chunk << IRQS_PER_CHUNK_SHIFT) + 8192;
1334 }
1335
1336 static int __init its_lpi_init(u32 id_bits)
1337 {
1338         lpi_chunks = its_lpi_to_chunk(1UL << id_bits);
1339
1340         lpi_bitmap = kzalloc(BITS_TO_LONGS(lpi_chunks) * sizeof(long),
1341                              GFP_KERNEL);
1342         if (!lpi_bitmap) {
1343                 lpi_chunks = 0;
1344                 return -ENOMEM;
1345         }
1346
1347         pr_info("ITS: Allocated %d chunks for LPIs\n", (int)lpi_chunks);
1348         return 0;
1349 }
1350
1351 static unsigned long *its_lpi_alloc_chunks(int nr_irqs, int *base, int *nr_ids)
1352 {
1353         unsigned long *bitmap = NULL;
1354         int chunk_id;
1355         int nr_chunks;
1356         int i;
1357
1358         nr_chunks = DIV_ROUND_UP(nr_irqs, IRQS_PER_CHUNK);
1359
1360         spin_lock(&lpi_lock);
1361
1362         do {
1363                 chunk_id = bitmap_find_next_zero_area(lpi_bitmap, lpi_chunks,
1364                                                       0, nr_chunks, 0);
1365                 if (chunk_id < lpi_chunks)
1366                         break;
1367
1368                 nr_chunks--;
1369         } while (nr_chunks > 0);
1370
1371         if (!nr_chunks)
1372                 goto out;
1373
1374         bitmap = kzalloc(BITS_TO_LONGS(nr_chunks * IRQS_PER_CHUNK) * sizeof (long),
1375                          GFP_ATOMIC);
1376         if (!bitmap)
1377                 goto out;
1378
1379         for (i = 0; i < nr_chunks; i++)
1380                 set_bit(chunk_id + i, lpi_bitmap);
1381
1382         *base = its_chunk_to_lpi(chunk_id);
1383         *nr_ids = nr_chunks * IRQS_PER_CHUNK;
1384
1385 out:
1386         spin_unlock(&lpi_lock);
1387
1388         if (!bitmap)
1389                 *base = *nr_ids = 0;
1390
1391         return bitmap;
1392 }
1393
1394 static void its_lpi_free_chunks(unsigned long *bitmap, int base, int nr_ids)
1395 {
1396         int lpi;
1397
1398         spin_lock(&lpi_lock);
1399
1400         for (lpi = base; lpi < (base + nr_ids); lpi += IRQS_PER_CHUNK) {
1401                 int chunk = its_lpi_to_chunk(lpi);
1402
1403                 BUG_ON(chunk > lpi_chunks);
1404                 if (test_bit(chunk, lpi_bitmap)) {
1405                         clear_bit(chunk, lpi_bitmap);
1406                 } else {
1407                         pr_err("Bad LPI chunk %d\n", chunk);
1408                 }
1409         }
1410
1411         spin_unlock(&lpi_lock);
1412
1413         kfree(bitmap);
1414 }
1415
1416 static struct page *its_allocate_prop_table(gfp_t gfp_flags)
1417 {
1418         struct page *prop_page;
1419
1420         prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ));
1421         if (!prop_page)
1422                 return NULL;
1423
1424         /* Priority 0xa0, Group-1, disabled */
1425         memset(page_address(prop_page),
1426                LPI_PROP_DEFAULT_PRIO | LPI_PROP_GROUP1,
1427                LPI_PROPBASE_SZ);
1428
1429         /* Make sure the GIC will observe the written configuration */
1430         gic_flush_dcache_to_poc(page_address(prop_page), LPI_PROPBASE_SZ);
1431
1432         return prop_page;
1433 }
1434
1435 static void its_free_prop_table(struct page *prop_page)
1436 {
1437         free_pages((unsigned long)page_address(prop_page),
1438                    get_order(LPI_PROPBASE_SZ));
1439 }
1440
1441 static int __init its_alloc_lpi_tables(void)
1442 {
1443         phys_addr_t paddr;
1444
1445         lpi_id_bits = min_t(u32, gic_rdists->id_bits, ITS_MAX_LPI_NRBITS);
1446         gic_rdists->prop_page = its_allocate_prop_table(GFP_NOWAIT);
1447         if (!gic_rdists->prop_page) {
1448                 pr_err("Failed to allocate PROPBASE\n");
1449                 return -ENOMEM;
1450         }
1451
1452         paddr = page_to_phys(gic_rdists->prop_page);
1453         pr_info("GIC: using LPI property table @%pa\n", &paddr);
1454
1455         return its_lpi_init(lpi_id_bits);
1456 }
1457
1458 static const char *its_base_type_string[] = {
1459         [GITS_BASER_TYPE_DEVICE]        = "Devices",
1460         [GITS_BASER_TYPE_VCPU]          = "Virtual CPUs",
1461         [GITS_BASER_TYPE_RESERVED3]     = "Reserved (3)",
1462         [GITS_BASER_TYPE_COLLECTION]    = "Interrupt Collections",
1463         [GITS_BASER_TYPE_RESERVED5]     = "Reserved (5)",
1464         [GITS_BASER_TYPE_RESERVED6]     = "Reserved (6)",
1465         [GITS_BASER_TYPE_RESERVED7]     = "Reserved (7)",
1466 };
1467
1468 static u64 its_read_baser(struct its_node *its, struct its_baser *baser)
1469 {
1470         u32 idx = baser - its->tables;
1471
1472         return gits_read_baser(its->base + GITS_BASER + (idx << 3));
1473 }
1474
1475 static void its_write_baser(struct its_node *its, struct its_baser *baser,
1476                             u64 val)
1477 {
1478         u32 idx = baser - its->tables;
1479
1480         gits_write_baser(val, its->base + GITS_BASER + (idx << 3));
1481         baser->val = its_read_baser(its, baser);
1482 }
1483
1484 static int its_setup_baser(struct its_node *its, struct its_baser *baser,
1485                            u64 cache, u64 shr, u32 psz, u32 order,
1486                            bool indirect)
1487 {
1488         u64 val = its_read_baser(its, baser);
1489         u64 esz = GITS_BASER_ENTRY_SIZE(val);
1490         u64 type = GITS_BASER_TYPE(val);
1491         u64 baser_phys, tmp;
1492         u32 alloc_pages;
1493         void *base;
1494
1495 retry_alloc_baser:
1496         alloc_pages = (PAGE_ORDER_TO_SIZE(order) / psz);
1497         if (alloc_pages > GITS_BASER_PAGES_MAX) {
1498                 pr_warn("ITS@%pa: %s too large, reduce ITS pages %u->%u\n",
1499                         &its->phys_base, its_base_type_string[type],
1500                         alloc_pages, GITS_BASER_PAGES_MAX);
1501                 alloc_pages = GITS_BASER_PAGES_MAX;
1502                 order = get_order(GITS_BASER_PAGES_MAX * psz);
1503         }
1504
1505         base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
1506         if (!base)
1507                 return -ENOMEM;
1508
1509         baser_phys = virt_to_phys(base);
1510
1511         /* Check if the physical address of the memory is above 48bits */
1512         if (IS_ENABLED(CONFIG_ARM64_64K_PAGES) && (baser_phys >> 48)) {
1513
1514                 /* 52bit PA is supported only when PageSize=64K */
1515                 if (psz != SZ_64K) {
1516                         pr_err("ITS: no 52bit PA support when psz=%d\n", psz);
1517                         free_pages((unsigned long)base, order);
1518                         return -ENXIO;
1519                 }
1520
1521                 /* Convert 52bit PA to 48bit field */
1522                 baser_phys = GITS_BASER_PHYS_52_to_48(baser_phys);
1523         }
1524
1525 retry_baser:
1526         val = (baser_phys                                        |
1527                 (type << GITS_BASER_TYPE_SHIFT)                  |
1528                 ((esz - 1) << GITS_BASER_ENTRY_SIZE_SHIFT)       |
1529                 ((alloc_pages - 1) << GITS_BASER_PAGES_SHIFT)    |
1530                 cache                                            |
1531                 shr                                              |
1532                 GITS_BASER_VALID);
1533
1534         val |=  indirect ? GITS_BASER_INDIRECT : 0x0;
1535
1536         switch (psz) {
1537         case SZ_4K:
1538                 val |= GITS_BASER_PAGE_SIZE_4K;
1539                 break;
1540         case SZ_16K:
1541                 val |= GITS_BASER_PAGE_SIZE_16K;
1542                 break;
1543         case SZ_64K:
1544                 val |= GITS_BASER_PAGE_SIZE_64K;
1545                 break;
1546         }
1547
1548         its_write_baser(its, baser, val);
1549         tmp = baser->val;
1550
1551         if ((val ^ tmp) & GITS_BASER_SHAREABILITY_MASK) {
1552                 /*
1553                  * Shareability didn't stick. Just use
1554                  * whatever the read reported, which is likely
1555                  * to be the only thing this redistributor
1556                  * supports. If that's zero, make it
1557                  * non-cacheable as well.
1558                  */
1559                 shr = tmp & GITS_BASER_SHAREABILITY_MASK;
1560                 if (!shr) {
1561                         cache = GITS_BASER_nC;
1562                         gic_flush_dcache_to_poc(base, PAGE_ORDER_TO_SIZE(order));
1563                 }
1564                 goto retry_baser;
1565         }
1566
1567         if ((val ^ tmp) & GITS_BASER_PAGE_SIZE_MASK) {
1568                 /*
1569                  * Page size didn't stick. Let's try a smaller
1570                  * size and retry. If we reach 4K, then
1571                  * something is horribly wrong...
1572                  */
1573                 free_pages((unsigned long)base, order);
1574                 baser->base = NULL;
1575
1576                 switch (psz) {
1577                 case SZ_16K:
1578                         psz = SZ_4K;
1579                         goto retry_alloc_baser;
1580                 case SZ_64K:
1581                         psz = SZ_16K;
1582                         goto retry_alloc_baser;
1583                 }
1584         }
1585
1586         if (val != tmp) {
1587                 pr_err("ITS@%pa: %s doesn't stick: %llx %llx\n",
1588                        &its->phys_base, its_base_type_string[type],
1589                        val, tmp);
1590                 free_pages((unsigned long)base, order);
1591                 return -ENXIO;
1592         }
1593
1594         baser->order = order;
1595         baser->base = base;
1596         baser->psz = psz;
1597         tmp = indirect ? GITS_LVL1_ENTRY_SIZE : esz;
1598
1599         pr_info("ITS@%pa: allocated %d %s @%lx (%s, esz %d, psz %dK, shr %d)\n",
1600                 &its->phys_base, (int)(PAGE_ORDER_TO_SIZE(order) / (int)tmp),
1601                 its_base_type_string[type],
1602                 (unsigned long)virt_to_phys(base),
1603                 indirect ? "indirect" : "flat", (int)esz,
1604                 psz / SZ_1K, (int)shr >> GITS_BASER_SHAREABILITY_SHIFT);
1605
1606         return 0;
1607 }
1608
1609 static bool its_parse_indirect_baser(struct its_node *its,
1610                                      struct its_baser *baser,
1611                                      u32 psz, u32 *order, u32 ids)
1612 {
1613         u64 tmp = its_read_baser(its, baser);
1614         u64 type = GITS_BASER_TYPE(tmp);
1615         u64 esz = GITS_BASER_ENTRY_SIZE(tmp);
1616         u64 val = GITS_BASER_InnerShareable | GITS_BASER_RaWaWb;
1617         u32 new_order = *order;
1618         bool indirect = false;
1619
1620         /* No need to enable Indirection if memory requirement < (psz*2)bytes */
1621         if ((esz << ids) > (psz * 2)) {
1622                 /*
1623                  * Find out whether hw supports a single or two-level table by
1624                  * table by reading bit at offset '62' after writing '1' to it.
1625                  */
1626                 its_write_baser(its, baser, val | GITS_BASER_INDIRECT);
1627                 indirect = !!(baser->val & GITS_BASER_INDIRECT);
1628
1629                 if (indirect) {
1630                         /*
1631                          * The size of the lvl2 table is equal to ITS page size
1632                          * which is 'psz'. For computing lvl1 table size,
1633                          * subtract ID bits that sparse lvl2 table from 'ids'
1634                          * which is reported by ITS hardware times lvl1 table
1635                          * entry size.
1636                          */
1637                         ids -= ilog2(psz / (int)esz);
1638                         esz = GITS_LVL1_ENTRY_SIZE;
1639                 }
1640         }
1641
1642         /*
1643          * Allocate as many entries as required to fit the
1644          * range of device IDs that the ITS can grok... The ID
1645          * space being incredibly sparse, this results in a
1646          * massive waste of memory if two-level device table
1647          * feature is not supported by hardware.
1648          */
1649         new_order = max_t(u32, get_order(esz << ids), new_order);
1650         if (new_order >= MAX_ORDER) {
1651                 new_order = MAX_ORDER - 1;
1652                 ids = ilog2(PAGE_ORDER_TO_SIZE(new_order) / (int)esz);
1653                 pr_warn("ITS@%pa: %s Table too large, reduce ids %u->%u\n",
1654                         &its->phys_base, its_base_type_string[type],
1655                         its->device_ids, ids);
1656         }
1657
1658         *order = new_order;
1659
1660         return indirect;
1661 }
1662
1663 static void its_free_tables(struct its_node *its)
1664 {
1665         int i;
1666
1667         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
1668                 if (its->tables[i].base) {
1669                         free_pages((unsigned long)its->tables[i].base,
1670                                    its->tables[i].order);
1671                         its->tables[i].base = NULL;
1672                 }
1673         }
1674 }
1675
1676 static int its_alloc_tables(struct its_node *its)
1677 {
1678         u64 typer = gic_read_typer(its->base + GITS_TYPER);
1679         u32 ids = GITS_TYPER_DEVBITS(typer);
1680         u64 shr = GITS_BASER_InnerShareable;
1681         u64 cache = GITS_BASER_RaWaWb;
1682         u32 psz = SZ_64K;
1683         int err, i;
1684
1685         if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_22375) {
1686                 /*
1687                 * erratum 22375: only alloc 8MB table size
1688                 * erratum 24313: ignore memory access type
1689                 */
1690                 cache   = GITS_BASER_nCnB;
1691                 ids     = 0x14;                 /* 20 bits, 8MB */
1692         }
1693
1694         its->device_ids = ids;
1695
1696         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
1697                 struct its_baser *baser = its->tables + i;
1698                 u64 val = its_read_baser(its, baser);
1699                 u64 type = GITS_BASER_TYPE(val);
1700                 u32 order = get_order(psz);
1701                 bool indirect = false;
1702
1703                 switch (type) {
1704                 case GITS_BASER_TYPE_NONE:
1705                         continue;
1706
1707                 case GITS_BASER_TYPE_DEVICE:
1708                         indirect = its_parse_indirect_baser(its, baser,
1709                                                             psz, &order,
1710                                                             its->device_ids);
1711                 case GITS_BASER_TYPE_VCPU:
1712                         indirect = its_parse_indirect_baser(its, baser,
1713                                                             psz, &order,
1714                                                             ITS_MAX_VPEID_BITS);
1715                         break;
1716                 }
1717
1718                 err = its_setup_baser(its, baser, cache, shr, psz, order, indirect);
1719                 if (err < 0) {
1720                         its_free_tables(its);
1721                         return err;
1722                 }
1723
1724                 /* Update settings which will be used for next BASERn */
1725                 psz = baser->psz;
1726                 cache = baser->val & GITS_BASER_CACHEABILITY_MASK;
1727                 shr = baser->val & GITS_BASER_SHAREABILITY_MASK;
1728         }
1729
1730         return 0;
1731 }
1732
1733 static int its_alloc_collections(struct its_node *its)
1734 {
1735         its->collections = kzalloc(nr_cpu_ids * sizeof(*its->collections),
1736                                    GFP_KERNEL);
1737         if (!its->collections)
1738                 return -ENOMEM;
1739
1740         return 0;
1741 }
1742
1743 static struct page *its_allocate_pending_table(gfp_t gfp_flags)
1744 {
1745         struct page *pend_page;
1746         /*
1747          * The pending pages have to be at least 64kB aligned,
1748          * hence the 'max(LPI_PENDBASE_SZ, SZ_64K)' below.
1749          */
1750         pend_page = alloc_pages(gfp_flags | __GFP_ZERO,
1751                                 get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K)));
1752         if (!pend_page)
1753                 return NULL;
1754
1755         /* Make sure the GIC will observe the zero-ed page */
1756         gic_flush_dcache_to_poc(page_address(pend_page), LPI_PENDBASE_SZ);
1757
1758         return pend_page;
1759 }
1760
1761 static void its_free_pending_table(struct page *pt)
1762 {
1763         free_pages((unsigned long)page_address(pt),
1764                    get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K)));
1765 }
1766
1767 static void its_cpu_init_lpis(void)
1768 {
1769         void __iomem *rbase = gic_data_rdist_rd_base();
1770         struct page *pend_page;
1771         u64 val, tmp;
1772
1773         /* If we didn't allocate the pending table yet, do it now */
1774         pend_page = gic_data_rdist()->pend_page;
1775         if (!pend_page) {
1776                 phys_addr_t paddr;
1777
1778                 pend_page = its_allocate_pending_table(GFP_NOWAIT);
1779                 if (!pend_page) {
1780                         pr_err("Failed to allocate PENDBASE for CPU%d\n",
1781                                smp_processor_id());
1782                         return;
1783                 }
1784
1785                 paddr = page_to_phys(pend_page);
1786                 pr_info("CPU%d: using LPI pending table @%pa\n",
1787                         smp_processor_id(), &paddr);
1788                 gic_data_rdist()->pend_page = pend_page;
1789         }
1790
1791         /* Disable LPIs */
1792         val = readl_relaxed(rbase + GICR_CTLR);
1793         val &= ~GICR_CTLR_ENABLE_LPIS;
1794         writel_relaxed(val, rbase + GICR_CTLR);
1795
1796         /*
1797          * Make sure any change to the table is observable by the GIC.
1798          */
1799         dsb(sy);
1800
1801         /* set PROPBASE */
1802         val = (page_to_phys(gic_rdists->prop_page) |
1803                GICR_PROPBASER_InnerShareable |
1804                GICR_PROPBASER_RaWaWb |
1805                ((LPI_NRBITS - 1) & GICR_PROPBASER_IDBITS_MASK));
1806
1807         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
1808         tmp = gicr_read_propbaser(rbase + GICR_PROPBASER);
1809
1810         if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) {
1811                 if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) {
1812                         /*
1813                          * The HW reports non-shareable, we must
1814                          * remove the cacheability attributes as
1815                          * well.
1816                          */
1817                         val &= ~(GICR_PROPBASER_SHAREABILITY_MASK |
1818                                  GICR_PROPBASER_CACHEABILITY_MASK);
1819                         val |= GICR_PROPBASER_nC;
1820                         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
1821                 }
1822                 pr_info_once("GIC: using cache flushing for LPI property table\n");
1823                 gic_rdists->flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING;
1824         }
1825
1826         /* set PENDBASE */
1827         val = (page_to_phys(pend_page) |
1828                GICR_PENDBASER_InnerShareable |
1829                GICR_PENDBASER_RaWaWb);
1830
1831         gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
1832         tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER);
1833
1834         if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) {
1835                 /*
1836                  * The HW reports non-shareable, we must remove the
1837                  * cacheability attributes as well.
1838                  */
1839                 val &= ~(GICR_PENDBASER_SHAREABILITY_MASK |
1840                          GICR_PENDBASER_CACHEABILITY_MASK);
1841                 val |= GICR_PENDBASER_nC;
1842                 gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
1843         }
1844
1845         /* Enable LPIs */
1846         val = readl_relaxed(rbase + GICR_CTLR);
1847         val |= GICR_CTLR_ENABLE_LPIS;
1848         writel_relaxed(val, rbase + GICR_CTLR);
1849
1850         /* Make sure the GIC has seen the above */
1851         dsb(sy);
1852 }
1853
1854 static void its_cpu_init_collection(void)
1855 {
1856         struct its_node *its;
1857         int cpu;
1858
1859         spin_lock(&its_lock);
1860         cpu = smp_processor_id();
1861
1862         list_for_each_entry(its, &its_nodes, entry) {
1863                 u64 target;
1864
1865                 /* avoid cross node collections and its mapping */
1866                 if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
1867                         struct device_node *cpu_node;
1868
1869                         cpu_node = of_get_cpu_node(cpu, NULL);
1870                         if (its->numa_node != NUMA_NO_NODE &&
1871                                 its->numa_node != of_node_to_nid(cpu_node))
1872                                 continue;
1873                 }
1874
1875                 /*
1876                  * We now have to bind each collection to its target
1877                  * redistributor.
1878                  */
1879                 if (gic_read_typer(its->base + GITS_TYPER) & GITS_TYPER_PTA) {
1880                         /*
1881                          * This ITS wants the physical address of the
1882                          * redistributor.
1883                          */
1884                         target = gic_data_rdist()->phys_base;
1885                 } else {
1886                         /*
1887                          * This ITS wants a linear CPU number.
1888                          */
1889                         target = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER);
1890                         target = GICR_TYPER_CPU_NUMBER(target) << 16;
1891                 }
1892
1893                 /* Perform collection mapping */
1894                 its->collections[cpu].target_address = target;
1895                 its->collections[cpu].col_id = cpu;
1896
1897                 its_send_mapc(its, &its->collections[cpu], 1);
1898                 its_send_invall(its, &its->collections[cpu]);
1899         }
1900
1901         spin_unlock(&its_lock);
1902 }
1903
1904 static struct its_device *its_find_device(struct its_node *its, u32 dev_id)
1905 {
1906         struct its_device *its_dev = NULL, *tmp;
1907         unsigned long flags;
1908
1909         raw_spin_lock_irqsave(&its->lock, flags);
1910
1911         list_for_each_entry(tmp, &its->its_device_list, entry) {
1912                 if (tmp->device_id == dev_id) {
1913                         its_dev = tmp;
1914                         break;
1915                 }
1916         }
1917
1918         raw_spin_unlock_irqrestore(&its->lock, flags);
1919
1920         return its_dev;
1921 }
1922
1923 static struct its_baser *its_get_baser(struct its_node *its, u32 type)
1924 {
1925         int i;
1926
1927         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
1928                 if (GITS_BASER_TYPE(its->tables[i].val) == type)
1929                         return &its->tables[i];
1930         }
1931
1932         return NULL;
1933 }
1934
1935 static bool its_alloc_table_entry(struct its_baser *baser, u32 id)
1936 {
1937         struct page *page;
1938         u32 esz, idx;
1939         __le64 *table;
1940
1941         /* Don't allow device id that exceeds single, flat table limit */
1942         esz = GITS_BASER_ENTRY_SIZE(baser->val);
1943         if (!(baser->val & GITS_BASER_INDIRECT))
1944                 return (id < (PAGE_ORDER_TO_SIZE(baser->order) / esz));
1945
1946         /* Compute 1st level table index & check if that exceeds table limit */
1947         idx = id >> ilog2(baser->psz / esz);
1948         if (idx >= (PAGE_ORDER_TO_SIZE(baser->order) / GITS_LVL1_ENTRY_SIZE))
1949                 return false;
1950
1951         table = baser->base;
1952
1953         /* Allocate memory for 2nd level table */
1954         if (!table[idx]) {
1955                 page = alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(baser->psz));
1956                 if (!page)
1957                         return false;
1958
1959                 /* Flush Lvl2 table to PoC if hw doesn't support coherency */
1960                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
1961                         gic_flush_dcache_to_poc(page_address(page), baser->psz);
1962
1963                 table[idx] = cpu_to_le64(page_to_phys(page) | GITS_BASER_VALID);
1964
1965                 /* Flush Lvl1 entry to PoC if hw doesn't support coherency */
1966                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
1967                         gic_flush_dcache_to_poc(table + idx, GITS_LVL1_ENTRY_SIZE);
1968
1969                 /* Ensure updated table contents are visible to ITS hardware */
1970                 dsb(sy);
1971         }
1972
1973         return true;
1974 }
1975
1976 static bool its_alloc_device_table(struct its_node *its, u32 dev_id)
1977 {
1978         struct its_baser *baser;
1979
1980         baser = its_get_baser(its, GITS_BASER_TYPE_DEVICE);
1981
1982         /* Don't allow device id that exceeds ITS hardware limit */
1983         if (!baser)
1984                 return (ilog2(dev_id) < its->device_ids);
1985
1986         return its_alloc_table_entry(baser, dev_id);
1987 }
1988
1989 static bool its_alloc_vpe_table(u32 vpe_id)
1990 {
1991         struct its_node *its;
1992
1993         /*
1994          * Make sure the L2 tables are allocated on *all* v4 ITSs. We
1995          * could try and only do it on ITSs corresponding to devices
1996          * that have interrupts targeted at this VPE, but the
1997          * complexity becomes crazy (and you have tons of memory
1998          * anyway, right?).
1999          */
2000         list_for_each_entry(its, &its_nodes, entry) {
2001                 struct its_baser *baser;
2002
2003                 if (!its->is_v4)
2004                         continue;
2005
2006                 baser = its_get_baser(its, GITS_BASER_TYPE_VCPU);
2007                 if (!baser)
2008                         return false;
2009
2010                 if (!its_alloc_table_entry(baser, vpe_id))
2011                         return false;
2012         }
2013
2014         return true;
2015 }
2016
2017 static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
2018                                             int nvecs, bool alloc_lpis)
2019 {
2020         struct its_device *dev;
2021         unsigned long *lpi_map = NULL;
2022         unsigned long flags;
2023         u16 *col_map = NULL;
2024         void *itt;
2025         int lpi_base;
2026         int nr_lpis;
2027         int nr_ites;
2028         int sz;
2029
2030         if (!its_alloc_device_table(its, dev_id))
2031                 return NULL;
2032
2033         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2034         /*
2035          * We allocate at least one chunk worth of LPIs bet device,
2036          * and thus that many ITEs. The device may require less though.
2037          */
2038         nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
2039         sz = nr_ites * its->ite_size;
2040         sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
2041         itt = kzalloc(sz, GFP_KERNEL);
2042         if (alloc_lpis) {
2043                 lpi_map = its_lpi_alloc_chunks(nvecs, &lpi_base, &nr_lpis);
2044                 if (lpi_map)
2045                         col_map = kzalloc(sizeof(*col_map) * nr_lpis,
2046                                           GFP_KERNEL);
2047         } else {
2048                 col_map = kzalloc(sizeof(*col_map) * nr_ites, GFP_KERNEL);
2049                 nr_lpis = 0;
2050                 lpi_base = 0;
2051         }
2052
2053         if (!dev || !itt ||  !col_map || (!lpi_map && alloc_lpis)) {
2054                 kfree(dev);
2055                 kfree(itt);
2056                 kfree(lpi_map);
2057                 kfree(col_map);
2058                 return NULL;
2059         }
2060
2061         gic_flush_dcache_to_poc(itt, sz);
2062
2063         dev->its = its;
2064         dev->itt = itt;
2065         dev->nr_ites = nr_ites;
2066         dev->event_map.lpi_map = lpi_map;
2067         dev->event_map.col_map = col_map;
2068         dev->event_map.lpi_base = lpi_base;
2069         dev->event_map.nr_lpis = nr_lpis;
2070         mutex_init(&dev->event_map.vlpi_lock);
2071         dev->device_id = dev_id;
2072         INIT_LIST_HEAD(&dev->entry);
2073
2074         raw_spin_lock_irqsave(&its->lock, flags);
2075         list_add(&dev->entry, &its->its_device_list);
2076         raw_spin_unlock_irqrestore(&its->lock, flags);
2077
2078         /* Map device to its ITT */
2079         its_send_mapd(dev, 1);
2080
2081         return dev;
2082 }
2083
2084 static void its_free_device(struct its_device *its_dev)
2085 {
2086         unsigned long flags;
2087
2088         raw_spin_lock_irqsave(&its_dev->its->lock, flags);
2089         list_del(&its_dev->entry);
2090         raw_spin_unlock_irqrestore(&its_dev->its->lock, flags);
2091         kfree(its_dev->itt);
2092         kfree(its_dev);
2093 }
2094
2095 static int its_alloc_device_irq(struct its_device *dev, int nvecs, irq_hw_number_t *hwirq)
2096 {
2097         int idx;
2098
2099         idx = bitmap_find_free_region(dev->event_map.lpi_map,
2100                                       dev->event_map.nr_lpis,
2101                                       get_count_order(nvecs));
2102         if (idx < 0)
2103                 return -ENOSPC;
2104
2105         *hwirq = dev->event_map.lpi_base + idx;
2106         set_bit(idx, dev->event_map.lpi_map);
2107
2108         return 0;
2109 }
2110
2111 static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
2112                            int nvec, msi_alloc_info_t *info)
2113 {
2114         struct its_node *its;
2115         struct its_device *its_dev;
2116         struct msi_domain_info *msi_info;
2117         u32 dev_id;
2118         int err = 0;
2119
2120         /*
2121          * We ignore "dev" entierely, and rely on the dev_id that has
2122          * been passed via the scratchpad. This limits this domain's
2123          * usefulness to upper layers that definitely know that they
2124          * are built on top of the ITS.
2125          */
2126         dev_id = info->scratchpad[0].ul;
2127
2128         msi_info = msi_get_domain_info(domain);
2129         its = msi_info->data;
2130
2131         if (!gic_rdists->has_direct_lpi &&
2132             vpe_proxy.dev &&
2133             vpe_proxy.dev->its == its &&
2134             dev_id == vpe_proxy.dev->device_id) {
2135                 /* Bad luck. Get yourself a better implementation */
2136                 WARN_ONCE(1, "DevId %x clashes with GICv4 VPE proxy device\n",
2137                           dev_id);
2138                 return -EINVAL;
2139         }
2140
2141         mutex_lock(&its->dev_alloc_lock);
2142         its_dev = its_find_device(its, dev_id);
2143         if (its_dev) {
2144                 /*
2145                  * We already have seen this ID, probably through
2146                  * another alias (PCI bridge of some sort). No need to
2147                  * create the device.
2148                  */
2149                 its_dev->shared = true;
2150                 pr_debug("Reusing ITT for devID %x\n", dev_id);
2151                 goto out;
2152         }
2153
2154         its_dev = its_create_device(its, dev_id, nvec, true);
2155         if (!its_dev) {
2156                 err = -ENOMEM;
2157                 goto out;
2158         }
2159
2160         pr_debug("ITT %d entries, %d bits\n", nvec, ilog2(nvec));
2161 out:
2162         mutex_unlock(&its->dev_alloc_lock);
2163         info->scratchpad[0].ptr = its_dev;
2164         return err;
2165 }
2166
2167 static struct msi_domain_ops its_msi_domain_ops = {
2168         .msi_prepare    = its_msi_prepare,
2169 };
2170
2171 static int its_irq_gic_domain_alloc(struct irq_domain *domain,
2172                                     unsigned int virq,
2173                                     irq_hw_number_t hwirq)
2174 {
2175         struct irq_fwspec fwspec;
2176
2177         if (irq_domain_get_of_node(domain->parent)) {
2178                 fwspec.fwnode = domain->parent->fwnode;
2179                 fwspec.param_count = 3;
2180                 fwspec.param[0] = GIC_IRQ_TYPE_LPI;
2181                 fwspec.param[1] = hwirq;
2182                 fwspec.param[2] = IRQ_TYPE_EDGE_RISING;
2183         } else if (is_fwnode_irqchip(domain->parent->fwnode)) {
2184                 fwspec.fwnode = domain->parent->fwnode;
2185                 fwspec.param_count = 2;
2186                 fwspec.param[0] = hwirq;
2187                 fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
2188         } else {
2189                 return -EINVAL;
2190         }
2191
2192         return irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec);
2193 }
2194
2195 static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2196                                 unsigned int nr_irqs, void *args)
2197 {
2198         msi_alloc_info_t *info = args;
2199         struct its_device *its_dev = info->scratchpad[0].ptr;
2200         irq_hw_number_t hwirq;
2201         int err;
2202         int i;
2203
2204         err = its_alloc_device_irq(its_dev, nr_irqs, &hwirq);
2205         if (err)
2206                 return err;
2207
2208         for (i = 0; i < nr_irqs; i++) {
2209                 err = its_irq_gic_domain_alloc(domain, virq + i, hwirq + i);
2210                 if (err)
2211                         return err;
2212
2213                 irq_domain_set_hwirq_and_chip(domain, virq + i,
2214                                               hwirq + i, &its_irq_chip, its_dev);
2215                 irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq + i)));
2216                 pr_debug("ID:%d pID:%d vID:%d\n",
2217                          (int)(hwirq + i - its_dev->event_map.lpi_base),
2218                          (int)(hwirq + i), virq + i);
2219         }
2220
2221         return 0;
2222 }
2223
2224 static void its_irq_domain_activate(struct irq_domain *domain,
2225                                     struct irq_data *d)
2226 {
2227         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2228         u32 event = its_get_event_id(d);
2229         const struct cpumask *cpu_mask = cpu_online_mask;
2230         int cpu;
2231
2232         /* get the cpu_mask of local node */
2233         if (its_dev->its->numa_node >= 0)
2234                 cpu_mask = cpumask_of_node(its_dev->its->numa_node);
2235
2236         /* Bind the LPI to the first possible CPU */
2237         cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
2238         if (cpu >= nr_cpu_ids) {
2239                 if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144)
2240                         return;
2241
2242                 cpu = cpumask_first(cpu_online_mask);
2243         }
2244
2245         its_dev->event_map.col_map[event] = cpu;
2246         irq_data_update_effective_affinity(d, cpumask_of(cpu));
2247
2248         /* Map the GIC IRQ and event to the device */
2249         its_send_mapti(its_dev, d->hwirq, event);
2250 }
2251
2252 static void its_irq_domain_deactivate(struct irq_domain *domain,
2253                                       struct irq_data *d)
2254 {
2255         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2256         u32 event = its_get_event_id(d);
2257
2258         /* Stop the delivery of interrupts */
2259         its_send_discard(its_dev, event);
2260 }
2261
2262 static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
2263                                 unsigned int nr_irqs)
2264 {
2265         struct irq_data *d = irq_domain_get_irq_data(domain, virq);
2266         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2267         struct its_node *its = its_dev->its;
2268         int i;
2269
2270         for (i = 0; i < nr_irqs; i++) {
2271                 struct irq_data *data = irq_domain_get_irq_data(domain,
2272                                                                 virq + i);
2273                 u32 event = its_get_event_id(data);
2274
2275                 /* Mark interrupt index as unused */
2276                 clear_bit(event, its_dev->event_map.lpi_map);
2277
2278                 /* Nuke the entry in the domain */
2279                 irq_domain_reset_irq_data(data);
2280         }
2281
2282         mutex_lock(&its->dev_alloc_lock);
2283
2284         /*
2285          * If all interrupts have been freed, start mopping the
2286          * floor. This is conditionned on the device not being shared.
2287          */
2288         if (!its_dev->shared &&
2289             bitmap_empty(its_dev->event_map.lpi_map,
2290                          its_dev->event_map.nr_lpis)) {
2291                 its_lpi_free_chunks(its_dev->event_map.lpi_map,
2292                                     its_dev->event_map.lpi_base,
2293                                     its_dev->event_map.nr_lpis);
2294                 kfree(its_dev->event_map.col_map);
2295
2296                 /* Unmap device/itt */
2297                 its_send_mapd(its_dev, 0);
2298                 its_free_device(its_dev);
2299         }
2300
2301         mutex_unlock(&its->dev_alloc_lock);
2302
2303         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
2304 }
2305
2306 static const struct irq_domain_ops its_domain_ops = {
2307         .alloc                  = its_irq_domain_alloc,
2308         .free                   = its_irq_domain_free,
2309         .activate               = its_irq_domain_activate,
2310         .deactivate             = its_irq_domain_deactivate,
2311 };
2312
2313 /*
2314  * This is insane.
2315  *
2316  * If a GICv4 doesn't implement Direct LPIs (which is extremely
2317  * likely), the only way to perform an invalidate is to use a fake
2318  * device to issue an INV command, implying that the LPI has first
2319  * been mapped to some event on that device. Since this is not exactly
2320  * cheap, we try to keep that mapping around as long as possible, and
2321  * only issue an UNMAP if we're short on available slots.
2322  *
2323  * Broken by design(tm).
2324  */
2325 static void its_vpe_db_proxy_unmap_locked(struct its_vpe *vpe)
2326 {
2327         /* Already unmapped? */
2328         if (vpe->vpe_proxy_event == -1)
2329                 return;
2330
2331         its_send_discard(vpe_proxy.dev, vpe->vpe_proxy_event);
2332         vpe_proxy.vpes[vpe->vpe_proxy_event] = NULL;
2333
2334         /*
2335          * We don't track empty slots at all, so let's move the
2336          * next_victim pointer if we can quickly reuse that slot
2337          * instead of nuking an existing entry. Not clear that this is
2338          * always a win though, and this might just generate a ripple
2339          * effect... Let's just hope VPEs don't migrate too often.
2340          */
2341         if (vpe_proxy.vpes[vpe_proxy.next_victim])
2342                 vpe_proxy.next_victim = vpe->vpe_proxy_event;
2343
2344         vpe->vpe_proxy_event = -1;
2345 }
2346
2347 static void its_vpe_db_proxy_unmap(struct its_vpe *vpe)
2348 {
2349         if (!gic_rdists->has_direct_lpi) {
2350                 unsigned long flags;
2351
2352                 raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2353                 its_vpe_db_proxy_unmap_locked(vpe);
2354                 raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2355         }
2356 }
2357
2358 static void its_vpe_db_proxy_map_locked(struct its_vpe *vpe)
2359 {
2360         /* Already mapped? */
2361         if (vpe->vpe_proxy_event != -1)
2362                 return;
2363
2364         /* This slot was already allocated. Kick the other VPE out. */
2365         if (vpe_proxy.vpes[vpe_proxy.next_victim])
2366                 its_vpe_db_proxy_unmap_locked(vpe_proxy.vpes[vpe_proxy.next_victim]);
2367
2368         /* Map the new VPE instead */
2369         vpe_proxy.vpes[vpe_proxy.next_victim] = vpe;
2370         vpe->vpe_proxy_event = vpe_proxy.next_victim;
2371         vpe_proxy.next_victim = (vpe_proxy.next_victim + 1) % vpe_proxy.dev->nr_ites;
2372
2373         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = vpe->col_idx;
2374         its_send_mapti(vpe_proxy.dev, vpe->vpe_db_lpi, vpe->vpe_proxy_event);
2375 }
2376
2377 static void its_vpe_db_proxy_move(struct its_vpe *vpe, int from, int to)
2378 {
2379         unsigned long flags;
2380         struct its_collection *target_col;
2381
2382         if (gic_rdists->has_direct_lpi) {
2383                 void __iomem *rdbase;
2384
2385                 rdbase = per_cpu_ptr(gic_rdists->rdist, from)->rd_base;
2386                 gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
2387                 while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2388                         cpu_relax();
2389
2390                 return;
2391         }
2392
2393         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2394
2395         its_vpe_db_proxy_map_locked(vpe);
2396
2397         target_col = &vpe_proxy.dev->its->collections[to];
2398         its_send_movi(vpe_proxy.dev, target_col, vpe->vpe_proxy_event);
2399         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = to;
2400
2401         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2402 }
2403
2404 static int its_vpe_set_affinity(struct irq_data *d,
2405                                 const struct cpumask *mask_val,
2406                                 bool force)
2407 {
2408         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2409         int cpu = cpumask_first(mask_val);
2410
2411         /*
2412          * Changing affinity is mega expensive, so let's be as lazy as
2413          * we can and only do it if we really have to. Also, if mapped
2414          * into the proxy device, we need to move the doorbell
2415          * interrupt to its new location.
2416          */
2417         if (vpe->col_idx != cpu) {
2418                 int from = vpe->col_idx;
2419
2420                 vpe->col_idx = cpu;
2421                 its_send_vmovp(vpe);
2422                 its_vpe_db_proxy_move(vpe, from, cpu);
2423         }
2424
2425         return IRQ_SET_MASK_OK_DONE;
2426 }
2427
2428 static void its_vpe_schedule(struct its_vpe *vpe)
2429 {
2430         void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
2431         u64 val;
2432
2433         /* Schedule the VPE */
2434         val  = virt_to_phys(page_address(vpe->its_vm->vprop_page)) &
2435                 GENMASK_ULL(51, 12);
2436         val |= (LPI_NRBITS - 1) & GICR_VPROPBASER_IDBITS_MASK;
2437         val |= GICR_VPROPBASER_RaWb;
2438         val |= GICR_VPROPBASER_InnerShareable;
2439         gits_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
2440
2441         val  = virt_to_phys(page_address(vpe->vpt_page)) &
2442                 GENMASK_ULL(51, 16);
2443         val |= GICR_VPENDBASER_RaWaWb;
2444         val |= GICR_VPENDBASER_NonShareable;
2445         /*
2446          * There is no good way of finding out if the pending table is
2447          * empty as we can race against the doorbell interrupt very
2448          * easily. So in the end, vpe->pending_last is only an
2449          * indication that the vcpu has something pending, not one
2450          * that the pending table is empty. A good implementation
2451          * would be able to read its coarse map pretty quickly anyway,
2452          * making this a tolerable issue.
2453          */
2454         val |= GICR_VPENDBASER_PendingLast;
2455         val |= vpe->idai ? GICR_VPENDBASER_IDAI : 0;
2456         val |= GICR_VPENDBASER_Valid;
2457         gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
2458 }
2459
2460 static void its_vpe_deschedule(struct its_vpe *vpe)
2461 {
2462         void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
2463         u32 count = 1000000;    /* 1s! */
2464         bool clean;
2465         u64 val;
2466
2467         /* We're being scheduled out */
2468         val = gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
2469         val &= ~GICR_VPENDBASER_Valid;
2470         gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
2471
2472         do {
2473                 val = gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
2474                 clean = !(val & GICR_VPENDBASER_Dirty);
2475                 if (!clean) {
2476                         count--;
2477                         cpu_relax();
2478                         udelay(1);
2479                 }
2480         } while (!clean && count);
2481
2482         if (unlikely(!clean && !count)) {
2483                 pr_err_ratelimited("ITS virtual pending table not cleaning\n");
2484                 vpe->idai = false;
2485                 vpe->pending_last = true;
2486         } else {
2487                 vpe->idai = !!(val & GICR_VPENDBASER_IDAI);
2488                 vpe->pending_last = !!(val & GICR_VPENDBASER_PendingLast);
2489         }
2490 }
2491
2492 static int its_vpe_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
2493 {
2494         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2495         struct its_cmd_info *info = vcpu_info;
2496
2497         switch (info->cmd_type) {
2498         case SCHEDULE_VPE:
2499                 its_vpe_schedule(vpe);
2500                 return 0;
2501
2502         case DESCHEDULE_VPE:
2503                 its_vpe_deschedule(vpe);
2504                 return 0;
2505
2506         case INVALL_VPE:
2507                 its_send_vinvall(vpe);
2508                 return 0;
2509
2510         default:
2511                 return -EINVAL;
2512         }
2513 }
2514
2515 static void its_vpe_send_cmd(struct its_vpe *vpe,
2516                              void (*cmd)(struct its_device *, u32))
2517 {
2518         unsigned long flags;
2519
2520         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2521
2522         its_vpe_db_proxy_map_locked(vpe);
2523         cmd(vpe_proxy.dev, vpe->vpe_proxy_event);
2524
2525         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2526 }
2527
2528 static void its_vpe_send_inv(struct irq_data *d)
2529 {
2530         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2531
2532         if (gic_rdists->has_direct_lpi) {
2533                 void __iomem *rdbase;
2534
2535                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
2536                 gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_INVLPIR);
2537                 while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2538                         cpu_relax();
2539         } else {
2540                 its_vpe_send_cmd(vpe, its_send_inv);
2541         }
2542 }
2543
2544 static void its_vpe_mask_irq(struct irq_data *d)
2545 {
2546         /*
2547          * We need to unmask the LPI, which is described by the parent
2548          * irq_data. Instead of calling into the parent (which won't
2549          * exactly do the right thing, let's simply use the
2550          * parent_data pointer. Yes, I'm naughty.
2551          */
2552         lpi_write_config(d->parent_data, LPI_PROP_ENABLED, 0);
2553         its_vpe_send_inv(d);
2554 }
2555
2556 static void its_vpe_unmask_irq(struct irq_data *d)
2557 {
2558         /* Same hack as above... */
2559         lpi_write_config(d->parent_data, 0, LPI_PROP_ENABLED);
2560         its_vpe_send_inv(d);
2561 }
2562
2563 static int its_vpe_set_irqchip_state(struct irq_data *d,
2564                                      enum irqchip_irq_state which,
2565                                      bool state)
2566 {
2567         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2568
2569         if (which != IRQCHIP_STATE_PENDING)
2570                 return -EINVAL;
2571
2572         if (gic_rdists->has_direct_lpi) {
2573                 void __iomem *rdbase;
2574
2575                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
2576                 if (state) {
2577                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_SETLPIR);
2578                 } else {
2579                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
2580                         while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2581                                 cpu_relax();
2582                 }
2583         } else {
2584                 if (state)
2585                         its_vpe_send_cmd(vpe, its_send_int);
2586                 else
2587                         its_vpe_send_cmd(vpe, its_send_clear);
2588         }
2589
2590         return 0;
2591 }
2592
2593 static struct irq_chip its_vpe_irq_chip = {
2594         .name                   = "GICv4-vpe",
2595         .irq_mask               = its_vpe_mask_irq,
2596         .irq_unmask             = its_vpe_unmask_irq,
2597         .irq_eoi                = irq_chip_eoi_parent,
2598         .irq_set_affinity       = its_vpe_set_affinity,
2599         .irq_set_irqchip_state  = its_vpe_set_irqchip_state,
2600         .irq_set_vcpu_affinity  = its_vpe_set_vcpu_affinity,
2601 };
2602
2603 static int its_vpe_id_alloc(void)
2604 {
2605         return ida_simple_get(&its_vpeid_ida, 0, ITS_MAX_VPEID, GFP_KERNEL);
2606 }
2607
2608 static void its_vpe_id_free(u16 id)
2609 {
2610         ida_simple_remove(&its_vpeid_ida, id);
2611 }
2612
2613 static int its_vpe_init(struct its_vpe *vpe)
2614 {
2615         struct page *vpt_page;
2616         int vpe_id;
2617
2618         /* Allocate vpe_id */
2619         vpe_id = its_vpe_id_alloc();
2620         if (vpe_id < 0)
2621                 return vpe_id;
2622
2623         /* Allocate VPT */
2624         vpt_page = its_allocate_pending_table(GFP_KERNEL);
2625         if (!vpt_page) {
2626                 its_vpe_id_free(vpe_id);
2627                 return -ENOMEM;
2628         }
2629
2630         if (!its_alloc_vpe_table(vpe_id)) {
2631                 its_vpe_id_free(vpe_id);
2632                 its_free_pending_table(vpe->vpt_page);
2633                 return -ENOMEM;
2634         }
2635
2636         vpe->vpe_id = vpe_id;
2637         vpe->vpt_page = vpt_page;
2638         vpe->vpe_proxy_event = -1;
2639
2640         return 0;
2641 }
2642
2643 static void its_vpe_teardown(struct its_vpe *vpe)
2644 {
2645         its_vpe_db_proxy_unmap(vpe);
2646         its_vpe_id_free(vpe->vpe_id);
2647         its_free_pending_table(vpe->vpt_page);
2648 }
2649
2650 static void its_vpe_irq_domain_free(struct irq_domain *domain,
2651                                     unsigned int virq,
2652                                     unsigned int nr_irqs)
2653 {
2654         struct its_vm *vm = domain->host_data;
2655         int i;
2656
2657         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
2658
2659         for (i = 0; i < nr_irqs; i++) {
2660                 struct irq_data *data = irq_domain_get_irq_data(domain,
2661                                                                 virq + i);
2662                 struct its_vpe *vpe = irq_data_get_irq_chip_data(data);
2663
2664                 BUG_ON(vm != vpe->its_vm);
2665
2666                 clear_bit(data->hwirq, vm->db_bitmap);
2667                 its_vpe_teardown(vpe);
2668                 irq_domain_reset_irq_data(data);
2669         }
2670
2671         if (bitmap_empty(vm->db_bitmap, vm->nr_db_lpis)) {
2672                 its_lpi_free_chunks(vm->db_bitmap, vm->db_lpi_base, vm->nr_db_lpis);
2673                 its_free_prop_table(vm->vprop_page);
2674         }
2675 }
2676
2677 static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2678                                     unsigned int nr_irqs, void *args)
2679 {
2680         struct its_vm *vm = args;
2681         unsigned long *bitmap;
2682         struct page *vprop_page;
2683         int base, nr_ids, i, err = 0;
2684
2685         BUG_ON(!vm);
2686
2687         bitmap = its_lpi_alloc_chunks(nr_irqs, &base, &nr_ids);
2688         if (!bitmap)
2689                 return -ENOMEM;
2690
2691         if (nr_ids < nr_irqs) {
2692                 its_lpi_free_chunks(bitmap, base, nr_ids);
2693                 return -ENOMEM;
2694         }
2695
2696         vprop_page = its_allocate_prop_table(GFP_KERNEL);
2697         if (!vprop_page) {
2698                 its_lpi_free_chunks(bitmap, base, nr_ids);
2699                 return -ENOMEM;
2700         }
2701
2702         vm->db_bitmap = bitmap;
2703         vm->db_lpi_base = base;
2704         vm->nr_db_lpis = nr_ids;
2705         vm->vprop_page = vprop_page;
2706
2707         for (i = 0; i < nr_irqs; i++) {
2708                 vm->vpes[i]->vpe_db_lpi = base + i;
2709                 err = its_vpe_init(vm->vpes[i]);
2710                 if (err)
2711                         break;
2712                 err = its_irq_gic_domain_alloc(domain, virq + i,
2713                                                vm->vpes[i]->vpe_db_lpi);
2714                 if (err)
2715                         break;
2716                 irq_domain_set_hwirq_and_chip(domain, virq + i, i,
2717                                               &its_vpe_irq_chip, vm->vpes[i]);
2718                 set_bit(i, bitmap);
2719         }
2720
2721         if (err) {
2722                 if (i > 0)
2723                         its_vpe_irq_domain_free(domain, virq, i - 1);
2724
2725                 its_lpi_free_chunks(bitmap, base, nr_ids);
2726                 its_free_prop_table(vprop_page);
2727         }
2728
2729         return err;
2730 }
2731
2732 static void its_vpe_irq_domain_activate(struct irq_domain *domain,
2733                                         struct irq_data *d)
2734 {
2735         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2736
2737         /* Map the VPE to the first possible CPU */
2738         vpe->col_idx = cpumask_first(cpu_online_mask);
2739         its_send_vmapp(vpe, true);
2740         its_send_vinvall(vpe);
2741 }
2742
2743 static void its_vpe_irq_domain_deactivate(struct irq_domain *domain,
2744                                           struct irq_data *d)
2745 {
2746         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2747
2748         its_send_vmapp(vpe, false);
2749 }
2750
2751 static const struct irq_domain_ops its_vpe_domain_ops = {
2752         .alloc                  = its_vpe_irq_domain_alloc,
2753         .free                   = its_vpe_irq_domain_free,
2754         .activate               = its_vpe_irq_domain_activate,
2755         .deactivate             = its_vpe_irq_domain_deactivate,
2756 };
2757
2758 static int its_force_quiescent(void __iomem *base)
2759 {
2760         u32 count = 1000000;    /* 1s */
2761         u32 val;
2762
2763         val = readl_relaxed(base + GITS_CTLR);
2764         /*
2765          * GIC architecture specification requires the ITS to be both
2766          * disabled and quiescent for writes to GITS_BASER<n> or
2767          * GITS_CBASER to not have UNPREDICTABLE results.
2768          */
2769         if ((val & GITS_CTLR_QUIESCENT) && !(val & GITS_CTLR_ENABLE))
2770                 return 0;
2771
2772         /* Disable the generation of all interrupts to this ITS */
2773         val &= ~(GITS_CTLR_ENABLE | GITS_CTLR_ImDe);
2774         writel_relaxed(val, base + GITS_CTLR);
2775
2776         /* Poll GITS_CTLR and wait until ITS becomes quiescent */
2777         while (1) {
2778                 val = readl_relaxed(base + GITS_CTLR);
2779                 if (val & GITS_CTLR_QUIESCENT)
2780                         return 0;
2781
2782                 count--;
2783                 if (!count)
2784                         return -EBUSY;
2785
2786                 cpu_relax();
2787                 udelay(1);
2788         }
2789 }
2790
2791 static void __maybe_unused its_enable_quirk_cavium_22375(void *data)
2792 {
2793         struct its_node *its = data;
2794
2795         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_22375;
2796 }
2797
2798 static void __maybe_unused its_enable_quirk_cavium_23144(void *data)
2799 {
2800         struct its_node *its = data;
2801
2802         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144;
2803 }
2804
2805 static void __maybe_unused its_enable_quirk_qdf2400_e0065(void *data)
2806 {
2807         struct its_node *its = data;
2808
2809         /* On QDF2400, the size of the ITE is 16Bytes */
2810         its->ite_size = 16;
2811 }
2812
2813 static const struct gic_quirk its_quirks[] = {
2814 #ifdef CONFIG_CAVIUM_ERRATUM_22375
2815         {
2816                 .desc   = "ITS: Cavium errata 22375, 24313",
2817                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
2818                 .mask   = 0xffff0fff,
2819                 .init   = its_enable_quirk_cavium_22375,
2820         },
2821 #endif
2822 #ifdef CONFIG_CAVIUM_ERRATUM_23144
2823         {
2824                 .desc   = "ITS: Cavium erratum 23144",
2825                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
2826                 .mask   = 0xffff0fff,
2827                 .init   = its_enable_quirk_cavium_23144,
2828         },
2829 #endif
2830 #ifdef CONFIG_QCOM_QDF2400_ERRATUM_0065
2831         {
2832                 .desc   = "ITS: QDF2400 erratum 0065",
2833                 .iidr   = 0x00001070, /* QDF2400 ITS rev 1.x */
2834                 .mask   = 0xffffffff,
2835                 .init   = its_enable_quirk_qdf2400_e0065,
2836         },
2837 #endif
2838         {
2839         }
2840 };
2841
2842 static void its_enable_quirks(struct its_node *its)
2843 {
2844         u32 iidr = readl_relaxed(its->base + GITS_IIDR);
2845
2846         gic_enable_quirks(iidr, its_quirks, its);
2847 }
2848
2849 static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
2850 {
2851         struct irq_domain *inner_domain;
2852         struct msi_domain_info *info;
2853
2854         info = kzalloc(sizeof(*info), GFP_KERNEL);
2855         if (!info)
2856                 return -ENOMEM;
2857
2858         inner_domain = irq_domain_create_tree(handle, &its_domain_ops, its);
2859         if (!inner_domain) {
2860                 kfree(info);
2861                 return -ENOMEM;
2862         }
2863
2864         inner_domain->parent = its_parent;
2865         irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
2866         inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_REMAP;
2867         info->ops = &its_msi_domain_ops;
2868         info->data = its;
2869         inner_domain->host_data = info;
2870
2871         return 0;
2872 }
2873
2874 static int its_init_vpe_domain(void)
2875 {
2876         struct its_node *its;
2877         u32 devid;
2878         int entries;
2879
2880         if (gic_rdists->has_direct_lpi) {
2881                 pr_info("ITS: Using DirectLPI for VPE invalidation\n");
2882                 return 0;
2883         }
2884
2885         /* Any ITS will do, even if not v4 */
2886         its = list_first_entry(&its_nodes, struct its_node, entry);
2887
2888         entries = roundup_pow_of_two(nr_cpu_ids);
2889         vpe_proxy.vpes = kzalloc(sizeof(*vpe_proxy.vpes) * entries,
2890                                  GFP_KERNEL);
2891         if (!vpe_proxy.vpes) {
2892                 pr_err("ITS: Can't allocate GICv4 proxy device array\n");
2893                 return -ENOMEM;
2894         }
2895
2896         /* Use the last possible DevID */
2897         devid = GENMASK(its->device_ids - 1, 0);
2898         vpe_proxy.dev = its_create_device(its, devid, entries, false);
2899         if (!vpe_proxy.dev) {
2900                 kfree(vpe_proxy.vpes);
2901                 pr_err("ITS: Can't allocate GICv4 proxy device\n");
2902                 return -ENOMEM;
2903         }
2904
2905         BUG_ON(entries > vpe_proxy.dev->nr_ites);
2906
2907         raw_spin_lock_init(&vpe_proxy.lock);
2908         vpe_proxy.next_victim = 0;
2909         pr_info("ITS: Allocated DevID %x as GICv4 proxy device (%d slots)\n",
2910                 devid, vpe_proxy.dev->nr_ites);
2911
2912         return 0;
2913 }
2914
2915 static int __init its_compute_its_list_map(struct resource *res,
2916                                            void __iomem *its_base)
2917 {
2918         int its_number;
2919         u32 ctlr;
2920
2921         /*
2922          * This is assumed to be done early enough that we're
2923          * guaranteed to be single-threaded, hence no
2924          * locking. Should this change, we should address
2925          * this.
2926          */
2927         its_number = find_first_zero_bit(&its_list_map, ITS_LIST_MAX);
2928         if (its_number >= ITS_LIST_MAX) {
2929                 pr_err("ITS@%pa: No ITSList entry available!\n",
2930                        &res->start);
2931                 return -EINVAL;
2932         }
2933
2934         ctlr = readl_relaxed(its_base + GITS_CTLR);
2935         ctlr &= ~GITS_CTLR_ITS_NUMBER;
2936         ctlr |= its_number << GITS_CTLR_ITS_NUMBER_SHIFT;
2937         writel_relaxed(ctlr, its_base + GITS_CTLR);
2938         ctlr = readl_relaxed(its_base + GITS_CTLR);
2939         if ((ctlr & GITS_CTLR_ITS_NUMBER) != (its_number << GITS_CTLR_ITS_NUMBER_SHIFT)) {
2940                 its_number = ctlr & GITS_CTLR_ITS_NUMBER;
2941                 its_number >>= GITS_CTLR_ITS_NUMBER_SHIFT;
2942         }
2943
2944         if (test_and_set_bit(its_number, &its_list_map)) {
2945                 pr_err("ITS@%pa: Duplicate ITSList entry %d\n",
2946                        &res->start, its_number);
2947                 return -EINVAL;
2948         }
2949
2950         return its_number;
2951 }
2952
2953 static int __init its_probe_one(struct resource *res,
2954                                 struct fwnode_handle *handle, int numa_node)
2955 {
2956         struct its_node *its;
2957         void __iomem *its_base;
2958         u32 val, ctlr;
2959         u64 baser, tmp, typer;
2960         int err;
2961
2962         its_base = ioremap(res->start, resource_size(res));
2963         if (!its_base) {
2964                 pr_warn("ITS@%pa: Unable to map ITS registers\n", &res->start);
2965                 return -ENOMEM;
2966         }
2967
2968         val = readl_relaxed(its_base + GITS_PIDR2) & GIC_PIDR2_ARCH_MASK;
2969         if (val != 0x30 && val != 0x40) {
2970                 pr_warn("ITS@%pa: No ITS detected, giving up\n", &res->start);
2971                 err = -ENODEV;
2972                 goto out_unmap;
2973         }
2974
2975         err = its_force_quiescent(its_base);
2976         if (err) {
2977                 pr_warn("ITS@%pa: Failed to quiesce, giving up\n", &res->start);
2978                 goto out_unmap;
2979         }
2980
2981         pr_info("ITS %pR\n", res);
2982
2983         its = kzalloc(sizeof(*its), GFP_KERNEL);
2984         if (!its) {
2985                 err = -ENOMEM;
2986                 goto out_unmap;
2987         }
2988
2989         raw_spin_lock_init(&its->lock);
2990         mutex_init(&its->dev_alloc_lock);
2991         INIT_LIST_HEAD(&its->entry);
2992         INIT_LIST_HEAD(&its->its_device_list);
2993         typer = gic_read_typer(its_base + GITS_TYPER);
2994         its->base = its_base;
2995         its->phys_base = res->start;
2996         its->ite_size = GITS_TYPER_ITT_ENTRY_SIZE(typer);
2997         its->is_v4 = !!(typer & GITS_TYPER_VLPIS);
2998         if (its->is_v4) {
2999                 if (!(typer & GITS_TYPER_VMOVP)) {
3000                         err = its_compute_its_list_map(res, its_base);
3001                         if (err < 0)
3002                                 goto out_free_its;
3003
3004                         pr_info("ITS@%pa: Using ITS number %d\n",
3005                                 &res->start, err);
3006                 } else {
3007                         pr_info("ITS@%pa: Single VMOVP capable\n", &res->start);
3008                 }
3009         }
3010
3011         its->numa_node = numa_node;
3012
3013         its->cmd_base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
3014                                                 get_order(ITS_CMD_QUEUE_SZ));
3015         if (!its->cmd_base) {
3016                 err = -ENOMEM;
3017                 goto out_free_its;
3018         }
3019         its->cmd_write = its->cmd_base;
3020
3021         its_enable_quirks(its);
3022
3023         err = its_alloc_tables(its);
3024         if (err)
3025                 goto out_free_cmd;
3026
3027         err = its_alloc_collections(its);
3028         if (err)
3029                 goto out_free_tables;
3030
3031         baser = (virt_to_phys(its->cmd_base)    |
3032                  GITS_CBASER_RaWaWb             |
3033                  GITS_CBASER_InnerShareable     |
3034                  (ITS_CMD_QUEUE_SZ / SZ_4K - 1) |
3035                  GITS_CBASER_VALID);
3036
3037         gits_write_cbaser(baser, its->base + GITS_CBASER);
3038         tmp = gits_read_cbaser(its->base + GITS_CBASER);
3039
3040         if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
3041                 if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) {
3042                         /*
3043                          * The HW reports non-shareable, we must
3044                          * remove the cacheability attributes as
3045                          * well.
3046                          */
3047                         baser &= ~(GITS_CBASER_SHAREABILITY_MASK |
3048                                    GITS_CBASER_CACHEABILITY_MASK);
3049                         baser |= GITS_CBASER_nC;
3050                         gits_write_cbaser(baser, its->base + GITS_CBASER);
3051                 }
3052                 pr_info("ITS: using cache flushing for cmd queue\n");
3053                 its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING;
3054         }
3055
3056         gits_write_cwriter(0, its->base + GITS_CWRITER);
3057         ctlr = readl_relaxed(its->base + GITS_CTLR);
3058         ctlr |= GITS_CTLR_ENABLE;
3059         if (its->is_v4)
3060                 ctlr |= GITS_CTLR_ImDe;
3061         writel_relaxed(ctlr, its->base + GITS_CTLR);
3062
3063         err = its_init_domain(handle, its);
3064         if (err)
3065                 goto out_free_tables;
3066
3067         spin_lock(&its_lock);
3068         list_add(&its->entry, &its_nodes);
3069         spin_unlock(&its_lock);
3070
3071         return 0;
3072
3073 out_free_tables:
3074         its_free_tables(its);
3075 out_free_cmd:
3076         free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
3077 out_free_its:
3078         kfree(its);
3079 out_unmap:
3080         iounmap(its_base);
3081         pr_err("ITS@%pa: failed probing (%d)\n", &res->start, err);
3082         return err;
3083 }
3084
3085 static bool gic_rdists_supports_plpis(void)
3086 {
3087         return !!(gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER) & GICR_TYPER_PLPIS);
3088 }
3089
3090 int its_cpu_init(void)
3091 {
3092         if (!list_empty(&its_nodes)) {
3093                 if (!gic_rdists_supports_plpis()) {
3094                         pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
3095                         return -ENXIO;
3096                 }
3097                 its_cpu_init_lpis();
3098                 its_cpu_init_collection();
3099         }
3100
3101         return 0;
3102 }
3103
3104 static const struct of_device_id its_device_id[] = {
3105         {       .compatible     = "arm,gic-v3-its",     },
3106         {},
3107 };
3108
3109 static int __init its_of_probe(struct device_node *node)
3110 {
3111         struct device_node *np;
3112         struct resource res;
3113
3114         for (np = of_find_matching_node(node, its_device_id); np;
3115              np = of_find_matching_node(np, its_device_id)) {
3116                 if (!of_device_is_available(np))
3117                         continue;
3118                 if (!of_property_read_bool(np, "msi-controller")) {
3119                         pr_warn("%pOF: no msi-controller property, ITS ignored\n",
3120                                 np);
3121                         continue;
3122                 }
3123
3124                 if (of_address_to_resource(np, 0, &res)) {
3125                         pr_warn("%pOF: no regs?\n", np);
3126                         continue;
3127                 }
3128
3129                 its_probe_one(&res, &np->fwnode, of_node_to_nid(np));
3130         }
3131         return 0;
3132 }
3133
3134 #ifdef CONFIG_ACPI
3135
3136 #define ACPI_GICV3_ITS_MEM_SIZE (SZ_128K)
3137
3138 #ifdef CONFIG_ACPI_NUMA
3139 struct its_srat_map {
3140         /* numa node id */
3141         u32     numa_node;
3142         /* GIC ITS ID */
3143         u32     its_id;
3144 };
3145
3146 static struct its_srat_map *its_srat_maps __initdata;
3147 static int its_in_srat __initdata;
3148
3149 static int __init acpi_get_its_numa_node(u32 its_id)
3150 {
3151         int i;
3152
3153         for (i = 0; i < its_in_srat; i++) {
3154                 if (its_id == its_srat_maps[i].its_id)
3155                         return its_srat_maps[i].numa_node;
3156         }
3157         return NUMA_NO_NODE;
3158 }
3159
3160 static int __init gic_acpi_match_srat_its(struct acpi_subtable_header *header,
3161                                           const unsigned long end)
3162 {
3163         return 0;
3164 }
3165
3166 static int __init gic_acpi_parse_srat_its(struct acpi_subtable_header *header,
3167                          const unsigned long end)
3168 {
3169         int node;
3170         struct acpi_srat_gic_its_affinity *its_affinity;
3171
3172         its_affinity = (struct acpi_srat_gic_its_affinity *)header;
3173         if (!its_affinity)
3174                 return -EINVAL;
3175
3176         if (its_affinity->header.length < sizeof(*its_affinity)) {
3177                 pr_err("SRAT: Invalid header length %d in ITS affinity\n",
3178                         its_affinity->header.length);
3179                 return -EINVAL;
3180         }
3181
3182         node = acpi_map_pxm_to_node(its_affinity->proximity_domain);
3183
3184         if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) {
3185                 pr_err("SRAT: Invalid NUMA node %d in ITS affinity\n", node);
3186                 return 0;
3187         }
3188
3189         its_srat_maps[its_in_srat].numa_node = node;
3190         its_srat_maps[its_in_srat].its_id = its_affinity->its_id;
3191         its_in_srat++;
3192         pr_info("SRAT: PXM %d -> ITS %d -> Node %d\n",
3193                 its_affinity->proximity_domain, its_affinity->its_id, node);
3194
3195         return 0;
3196 }
3197
3198 static void __init acpi_table_parse_srat_its(void)
3199 {
3200         int count;
3201
3202         count = acpi_table_parse_entries(ACPI_SIG_SRAT,
3203                         sizeof(struct acpi_table_srat),
3204                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
3205                         gic_acpi_match_srat_its, 0);
3206         if (count <= 0)
3207                 return;
3208
3209         its_srat_maps = kmalloc(count * sizeof(struct its_srat_map),
3210                                 GFP_KERNEL);
3211         if (!its_srat_maps) {
3212                 pr_warn("SRAT: Failed to allocate memory for its_srat_maps!\n");
3213                 return;
3214         }
3215
3216         acpi_table_parse_entries(ACPI_SIG_SRAT,
3217                         sizeof(struct acpi_table_srat),
3218                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
3219                         gic_acpi_parse_srat_its, 0);
3220 }
3221
3222 /* free the its_srat_maps after ITS probing */
3223 static void __init acpi_its_srat_maps_free(void)
3224 {
3225         kfree(its_srat_maps);
3226 }
3227 #else
3228 static void __init acpi_table_parse_srat_its(void)      { }
3229 static int __init acpi_get_its_numa_node(u32 its_id) { return NUMA_NO_NODE; }
3230 static void __init acpi_its_srat_maps_free(void) { }
3231 #endif
3232
3233 static int __init gic_acpi_parse_madt_its(struct acpi_subtable_header *header,
3234                                           const unsigned long end)
3235 {
3236         struct acpi_madt_generic_translator *its_entry;
3237         struct fwnode_handle *dom_handle;
3238         struct resource res;
3239         int err;
3240
3241         its_entry = (struct acpi_madt_generic_translator *)header;
3242         memset(&res, 0, sizeof(res));
3243         res.start = its_entry->base_address;
3244         res.end = its_entry->base_address + ACPI_GICV3_ITS_MEM_SIZE - 1;
3245         res.flags = IORESOURCE_MEM;
3246
3247         dom_handle = irq_domain_alloc_fwnode((void *)its_entry->base_address);
3248         if (!dom_handle) {
3249                 pr_err("ITS@%pa: Unable to allocate GICv3 ITS domain token\n",
3250                        &res.start);
3251                 return -ENOMEM;
3252         }
3253
3254         err = iort_register_domain_token(its_entry->translation_id, dom_handle);
3255         if (err) {
3256                 pr_err("ITS@%pa: Unable to register GICv3 ITS domain token (ITS ID %d) to IORT\n",
3257                        &res.start, its_entry->translation_id);
3258                 goto dom_err;
3259         }
3260
3261         err = its_probe_one(&res, dom_handle,
3262                         acpi_get_its_numa_node(its_entry->translation_id));
3263         if (!err)
3264                 return 0;
3265
3266         iort_deregister_domain_token(its_entry->translation_id);
3267 dom_err:
3268         irq_domain_free_fwnode(dom_handle);
3269         return err;
3270 }
3271
3272 static void __init its_acpi_probe(void)
3273 {
3274         acpi_table_parse_srat_its();
3275         acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR,
3276                               gic_acpi_parse_madt_its, 0);
3277         acpi_its_srat_maps_free();
3278 }
3279 #else
3280 static void __init its_acpi_probe(void) { }
3281 #endif
3282
3283 int __init its_init(struct fwnode_handle *handle, struct rdists *rdists,
3284                     struct irq_domain *parent_domain)
3285 {
3286         struct device_node *of_node;
3287         struct its_node *its;
3288         bool has_v4 = false;
3289         int err;
3290
3291         its_parent = parent_domain;
3292         of_node = to_of_node(handle);
3293         if (of_node)
3294                 its_of_probe(of_node);
3295         else
3296                 its_acpi_probe();
3297
3298         if (list_empty(&its_nodes)) {
3299                 pr_warn("ITS: No ITS available, not enabling LPIs\n");
3300                 return -ENXIO;
3301         }
3302
3303         gic_rdists = rdists;
3304         err = its_alloc_lpi_tables();
3305         if (err)
3306                 return err;
3307
3308         list_for_each_entry(its, &its_nodes, entry)
3309                 has_v4 |= its->is_v4;
3310
3311         if (has_v4 & rdists->has_vlpis) {
3312                 if (its_init_vpe_domain() ||
3313                     its_init_v4(parent_domain, &its_vpe_domain_ops)) {
3314                         rdists->has_vlpis = false;
3315                         pr_err("ITS: Disabling GICv4 support\n");
3316                 }
3317         }
3318
3319         return 0;
3320 }