GNU Linux-libre 4.14.266-gnu1
[releases.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_invall_cmd.col->col_id);
531
532         its_fixup_cmd(cmd);
533
534         return desc->its_invall_cmd.col;
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                         break;
1712
1713                 case GITS_BASER_TYPE_VCPU:
1714                         indirect = its_parse_indirect_baser(its, baser,
1715                                                             psz, &order,
1716                                                             ITS_MAX_VPEID_BITS);
1717                         break;
1718                 }
1719
1720                 err = its_setup_baser(its, baser, cache, shr, psz, order, indirect);
1721                 if (err < 0) {
1722                         its_free_tables(its);
1723                         return err;
1724                 }
1725
1726                 /* Update settings which will be used for next BASERn */
1727                 psz = baser->psz;
1728                 cache = baser->val & GITS_BASER_CACHEABILITY_MASK;
1729                 shr = baser->val & GITS_BASER_SHAREABILITY_MASK;
1730         }
1731
1732         return 0;
1733 }
1734
1735 static int its_alloc_collections(struct its_node *its)
1736 {
1737         its->collections = kzalloc(nr_cpu_ids * sizeof(*its->collections),
1738                                    GFP_KERNEL);
1739         if (!its->collections)
1740                 return -ENOMEM;
1741
1742         return 0;
1743 }
1744
1745 static struct page *its_allocate_pending_table(gfp_t gfp_flags)
1746 {
1747         struct page *pend_page;
1748         /*
1749          * The pending pages have to be at least 64kB aligned,
1750          * hence the 'max(LPI_PENDBASE_SZ, SZ_64K)' below.
1751          */
1752         pend_page = alloc_pages(gfp_flags | __GFP_ZERO,
1753                                 get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K)));
1754         if (!pend_page)
1755                 return NULL;
1756
1757         /* Make sure the GIC will observe the zero-ed page */
1758         gic_flush_dcache_to_poc(page_address(pend_page), LPI_PENDBASE_SZ);
1759
1760         return pend_page;
1761 }
1762
1763 static void its_free_pending_table(struct page *pt)
1764 {
1765         free_pages((unsigned long)page_address(pt),
1766                    get_order(max_t(u32, LPI_PENDBASE_SZ, SZ_64K)));
1767 }
1768
1769 static void its_cpu_init_lpis(void)
1770 {
1771         void __iomem *rbase = gic_data_rdist_rd_base();
1772         struct page *pend_page;
1773         u64 val, tmp;
1774
1775         /* If we didn't allocate the pending table yet, do it now */
1776         pend_page = gic_data_rdist()->pend_page;
1777         if (!pend_page) {
1778                 phys_addr_t paddr;
1779
1780                 pend_page = its_allocate_pending_table(GFP_NOWAIT);
1781                 if (!pend_page) {
1782                         pr_err("Failed to allocate PENDBASE for CPU%d\n",
1783                                smp_processor_id());
1784                         return;
1785                 }
1786
1787                 paddr = page_to_phys(pend_page);
1788                 pr_info("CPU%d: using LPI pending table @%pa\n",
1789                         smp_processor_id(), &paddr);
1790                 gic_data_rdist()->pend_page = pend_page;
1791         }
1792
1793         /* Disable LPIs */
1794         val = readl_relaxed(rbase + GICR_CTLR);
1795         val &= ~GICR_CTLR_ENABLE_LPIS;
1796         writel_relaxed(val, rbase + GICR_CTLR);
1797
1798         /*
1799          * Make sure any change to the table is observable by the GIC.
1800          */
1801         dsb(sy);
1802
1803         /* set PROPBASE */
1804         val = (page_to_phys(gic_rdists->prop_page) |
1805                GICR_PROPBASER_InnerShareable |
1806                GICR_PROPBASER_RaWaWb |
1807                ((LPI_NRBITS - 1) & GICR_PROPBASER_IDBITS_MASK));
1808
1809         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
1810         tmp = gicr_read_propbaser(rbase + GICR_PROPBASER);
1811
1812         if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) {
1813                 if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) {
1814                         /*
1815                          * The HW reports non-shareable, we must
1816                          * remove the cacheability attributes as
1817                          * well.
1818                          */
1819                         val &= ~(GICR_PROPBASER_SHAREABILITY_MASK |
1820                                  GICR_PROPBASER_CACHEABILITY_MASK);
1821                         val |= GICR_PROPBASER_nC;
1822                         gicr_write_propbaser(val, rbase + GICR_PROPBASER);
1823                 }
1824                 pr_info_once("GIC: using cache flushing for LPI property table\n");
1825                 gic_rdists->flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING;
1826         }
1827
1828         /* set PENDBASE */
1829         val = (page_to_phys(pend_page) |
1830                GICR_PENDBASER_InnerShareable |
1831                GICR_PENDBASER_RaWaWb);
1832
1833         gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
1834         tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER);
1835
1836         if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) {
1837                 /*
1838                  * The HW reports non-shareable, we must remove the
1839                  * cacheability attributes as well.
1840                  */
1841                 val &= ~(GICR_PENDBASER_SHAREABILITY_MASK |
1842                          GICR_PENDBASER_CACHEABILITY_MASK);
1843                 val |= GICR_PENDBASER_nC;
1844                 gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
1845         }
1846
1847         /* Enable LPIs */
1848         val = readl_relaxed(rbase + GICR_CTLR);
1849         val |= GICR_CTLR_ENABLE_LPIS;
1850         writel_relaxed(val, rbase + GICR_CTLR);
1851
1852         /* Make sure the GIC has seen the above */
1853         dsb(sy);
1854 }
1855
1856 static void its_cpu_init_collection(void)
1857 {
1858         struct its_node *its;
1859         int cpu;
1860
1861         spin_lock(&its_lock);
1862         cpu = smp_processor_id();
1863
1864         list_for_each_entry(its, &its_nodes, entry) {
1865                 u64 target;
1866
1867                 /* avoid cross node collections and its mapping */
1868                 if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
1869                         struct device_node *cpu_node;
1870
1871                         cpu_node = of_get_cpu_node(cpu, NULL);
1872                         if (its->numa_node != NUMA_NO_NODE &&
1873                                 its->numa_node != of_node_to_nid(cpu_node))
1874                                 continue;
1875                 }
1876
1877                 /*
1878                  * We now have to bind each collection to its target
1879                  * redistributor.
1880                  */
1881                 if (gic_read_typer(its->base + GITS_TYPER) & GITS_TYPER_PTA) {
1882                         /*
1883                          * This ITS wants the physical address of the
1884                          * redistributor.
1885                          */
1886                         target = gic_data_rdist()->phys_base;
1887                 } else {
1888                         /*
1889                          * This ITS wants a linear CPU number.
1890                          */
1891                         target = gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER);
1892                         target = GICR_TYPER_CPU_NUMBER(target) << 16;
1893                 }
1894
1895                 /* Perform collection mapping */
1896                 its->collections[cpu].target_address = target;
1897                 its->collections[cpu].col_id = cpu;
1898
1899                 its_send_mapc(its, &its->collections[cpu], 1);
1900                 its_send_invall(its, &its->collections[cpu]);
1901         }
1902
1903         spin_unlock(&its_lock);
1904 }
1905
1906 static struct its_device *its_find_device(struct its_node *its, u32 dev_id)
1907 {
1908         struct its_device *its_dev = NULL, *tmp;
1909         unsigned long flags;
1910
1911         raw_spin_lock_irqsave(&its->lock, flags);
1912
1913         list_for_each_entry(tmp, &its->its_device_list, entry) {
1914                 if (tmp->device_id == dev_id) {
1915                         its_dev = tmp;
1916                         break;
1917                 }
1918         }
1919
1920         raw_spin_unlock_irqrestore(&its->lock, flags);
1921
1922         return its_dev;
1923 }
1924
1925 static struct its_baser *its_get_baser(struct its_node *its, u32 type)
1926 {
1927         int i;
1928
1929         for (i = 0; i < GITS_BASER_NR_REGS; i++) {
1930                 if (GITS_BASER_TYPE(its->tables[i].val) == type)
1931                         return &its->tables[i];
1932         }
1933
1934         return NULL;
1935 }
1936
1937 static bool its_alloc_table_entry(struct its_baser *baser, u32 id)
1938 {
1939         struct page *page;
1940         u32 esz, idx;
1941         __le64 *table;
1942
1943         /* Don't allow device id that exceeds single, flat table limit */
1944         esz = GITS_BASER_ENTRY_SIZE(baser->val);
1945         if (!(baser->val & GITS_BASER_INDIRECT))
1946                 return (id < (PAGE_ORDER_TO_SIZE(baser->order) / esz));
1947
1948         /* Compute 1st level table index & check if that exceeds table limit */
1949         idx = id >> ilog2(baser->psz / esz);
1950         if (idx >= (PAGE_ORDER_TO_SIZE(baser->order) / GITS_LVL1_ENTRY_SIZE))
1951                 return false;
1952
1953         table = baser->base;
1954
1955         /* Allocate memory for 2nd level table */
1956         if (!table[idx]) {
1957                 page = alloc_pages(GFP_KERNEL | __GFP_ZERO, get_order(baser->psz));
1958                 if (!page)
1959                         return false;
1960
1961                 /* Flush Lvl2 table to PoC if hw doesn't support coherency */
1962                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
1963                         gic_flush_dcache_to_poc(page_address(page), baser->psz);
1964
1965                 table[idx] = cpu_to_le64(page_to_phys(page) | GITS_BASER_VALID);
1966
1967                 /* Flush Lvl1 entry to PoC if hw doesn't support coherency */
1968                 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK))
1969                         gic_flush_dcache_to_poc(table + idx, GITS_LVL1_ENTRY_SIZE);
1970
1971                 /* Ensure updated table contents are visible to ITS hardware */
1972                 dsb(sy);
1973         }
1974
1975         return true;
1976 }
1977
1978 static bool its_alloc_device_table(struct its_node *its, u32 dev_id)
1979 {
1980         struct its_baser *baser;
1981
1982         baser = its_get_baser(its, GITS_BASER_TYPE_DEVICE);
1983
1984         /* Don't allow device id that exceeds ITS hardware limit */
1985         if (!baser)
1986                 return (ilog2(dev_id) < its->device_ids);
1987
1988         return its_alloc_table_entry(baser, dev_id);
1989 }
1990
1991 static bool its_alloc_vpe_table(u32 vpe_id)
1992 {
1993         struct its_node *its;
1994
1995         /*
1996          * Make sure the L2 tables are allocated on *all* v4 ITSs. We
1997          * could try and only do it on ITSs corresponding to devices
1998          * that have interrupts targeted at this VPE, but the
1999          * complexity becomes crazy (and you have tons of memory
2000          * anyway, right?).
2001          */
2002         list_for_each_entry(its, &its_nodes, entry) {
2003                 struct its_baser *baser;
2004
2005                 if (!its->is_v4)
2006                         continue;
2007
2008                 baser = its_get_baser(its, GITS_BASER_TYPE_VCPU);
2009                 if (!baser)
2010                         return false;
2011
2012                 if (!its_alloc_table_entry(baser, vpe_id))
2013                         return false;
2014         }
2015
2016         return true;
2017 }
2018
2019 static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
2020                                             int nvecs, bool alloc_lpis)
2021 {
2022         struct its_device *dev;
2023         unsigned long *lpi_map = NULL;
2024         unsigned long flags;
2025         u16 *col_map = NULL;
2026         void *itt;
2027         int lpi_base;
2028         int nr_lpis;
2029         int nr_ites;
2030         int sz;
2031
2032         if (!its_alloc_device_table(its, dev_id))
2033                 return NULL;
2034
2035         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2036         /*
2037          * We allocate at least one chunk worth of LPIs bet device,
2038          * and thus that many ITEs. The device may require less though.
2039          */
2040         nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
2041         sz = nr_ites * its->ite_size;
2042         sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
2043         itt = kzalloc(sz, GFP_KERNEL);
2044         if (alloc_lpis) {
2045                 lpi_map = its_lpi_alloc_chunks(nvecs, &lpi_base, &nr_lpis);
2046                 if (lpi_map)
2047                         col_map = kzalloc(sizeof(*col_map) * nr_lpis,
2048                                           GFP_KERNEL);
2049         } else {
2050                 col_map = kzalloc(sizeof(*col_map) * nr_ites, GFP_KERNEL);
2051                 nr_lpis = 0;
2052                 lpi_base = 0;
2053         }
2054
2055         if (!dev || !itt ||  !col_map || (!lpi_map && alloc_lpis)) {
2056                 kfree(dev);
2057                 kfree(itt);
2058                 kfree(lpi_map);
2059                 kfree(col_map);
2060                 return NULL;
2061         }
2062
2063         gic_flush_dcache_to_poc(itt, sz);
2064
2065         dev->its = its;
2066         dev->itt = itt;
2067         dev->nr_ites = nr_ites;
2068         dev->event_map.lpi_map = lpi_map;
2069         dev->event_map.col_map = col_map;
2070         dev->event_map.lpi_base = lpi_base;
2071         dev->event_map.nr_lpis = nr_lpis;
2072         mutex_init(&dev->event_map.vlpi_lock);
2073         dev->device_id = dev_id;
2074         INIT_LIST_HEAD(&dev->entry);
2075
2076         raw_spin_lock_irqsave(&its->lock, flags);
2077         list_add(&dev->entry, &its->its_device_list);
2078         raw_spin_unlock_irqrestore(&its->lock, flags);
2079
2080         /* Map device to its ITT */
2081         its_send_mapd(dev, 1);
2082
2083         return dev;
2084 }
2085
2086 static void its_free_device(struct its_device *its_dev)
2087 {
2088         unsigned long flags;
2089
2090         raw_spin_lock_irqsave(&its_dev->its->lock, flags);
2091         list_del(&its_dev->entry);
2092         raw_spin_unlock_irqrestore(&its_dev->its->lock, flags);
2093         kfree(its_dev->itt);
2094         kfree(its_dev);
2095 }
2096
2097 static int its_alloc_device_irq(struct its_device *dev, int nvecs, irq_hw_number_t *hwirq)
2098 {
2099         int idx;
2100
2101         idx = bitmap_find_free_region(dev->event_map.lpi_map,
2102                                       dev->event_map.nr_lpis,
2103                                       get_count_order(nvecs));
2104         if (idx < 0)
2105                 return -ENOSPC;
2106
2107         *hwirq = dev->event_map.lpi_base + idx;
2108         set_bit(idx, dev->event_map.lpi_map);
2109
2110         return 0;
2111 }
2112
2113 static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
2114                            int nvec, msi_alloc_info_t *info)
2115 {
2116         struct its_node *its;
2117         struct its_device *its_dev;
2118         struct msi_domain_info *msi_info;
2119         u32 dev_id;
2120         int err = 0;
2121
2122         /*
2123          * We ignore "dev" entierely, and rely on the dev_id that has
2124          * been passed via the scratchpad. This limits this domain's
2125          * usefulness to upper layers that definitely know that they
2126          * are built on top of the ITS.
2127          */
2128         dev_id = info->scratchpad[0].ul;
2129
2130         msi_info = msi_get_domain_info(domain);
2131         its = msi_info->data;
2132
2133         if (!gic_rdists->has_direct_lpi &&
2134             vpe_proxy.dev &&
2135             vpe_proxy.dev->its == its &&
2136             dev_id == vpe_proxy.dev->device_id) {
2137                 /* Bad luck. Get yourself a better implementation */
2138                 WARN_ONCE(1, "DevId %x clashes with GICv4 VPE proxy device\n",
2139                           dev_id);
2140                 return -EINVAL;
2141         }
2142
2143         mutex_lock(&its->dev_alloc_lock);
2144         its_dev = its_find_device(its, dev_id);
2145         if (its_dev) {
2146                 /*
2147                  * We already have seen this ID, probably through
2148                  * another alias (PCI bridge of some sort). No need to
2149                  * create the device.
2150                  */
2151                 its_dev->shared = true;
2152                 pr_debug("Reusing ITT for devID %x\n", dev_id);
2153                 goto out;
2154         }
2155
2156         its_dev = its_create_device(its, dev_id, nvec, true);
2157         if (!its_dev) {
2158                 err = -ENOMEM;
2159                 goto out;
2160         }
2161
2162         pr_debug("ITT %d entries, %d bits\n", nvec, ilog2(nvec));
2163 out:
2164         mutex_unlock(&its->dev_alloc_lock);
2165         info->scratchpad[0].ptr = its_dev;
2166         return err;
2167 }
2168
2169 static struct msi_domain_ops its_msi_domain_ops = {
2170         .msi_prepare    = its_msi_prepare,
2171 };
2172
2173 static int its_irq_gic_domain_alloc(struct irq_domain *domain,
2174                                     unsigned int virq,
2175                                     irq_hw_number_t hwirq)
2176 {
2177         struct irq_fwspec fwspec;
2178
2179         if (irq_domain_get_of_node(domain->parent)) {
2180                 fwspec.fwnode = domain->parent->fwnode;
2181                 fwspec.param_count = 3;
2182                 fwspec.param[0] = GIC_IRQ_TYPE_LPI;
2183                 fwspec.param[1] = hwirq;
2184                 fwspec.param[2] = IRQ_TYPE_EDGE_RISING;
2185         } else if (is_fwnode_irqchip(domain->parent->fwnode)) {
2186                 fwspec.fwnode = domain->parent->fwnode;
2187                 fwspec.param_count = 2;
2188                 fwspec.param[0] = hwirq;
2189                 fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
2190         } else {
2191                 return -EINVAL;
2192         }
2193
2194         return irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec);
2195 }
2196
2197 static int its_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2198                                 unsigned int nr_irqs, void *args)
2199 {
2200         msi_alloc_info_t *info = args;
2201         struct its_device *its_dev = info->scratchpad[0].ptr;
2202         struct irq_data *irqd;
2203         irq_hw_number_t hwirq;
2204         int err;
2205         int i;
2206
2207         err = its_alloc_device_irq(its_dev, nr_irqs, &hwirq);
2208         if (err)
2209                 return err;
2210
2211         for (i = 0; i < nr_irqs; i++) {
2212                 err = its_irq_gic_domain_alloc(domain, virq + i, hwirq + i);
2213                 if (err)
2214                         return err;
2215
2216                 irq_domain_set_hwirq_and_chip(domain, virq + i,
2217                                               hwirq + i, &its_irq_chip, its_dev);
2218                 irqd = irq_get_irq_data(virq + i);
2219                 irqd_set_single_target(irqd);
2220                 irqd_set_affinity_on_activate(irqd);
2221                 pr_debug("ID:%d pID:%d vID:%d\n",
2222                          (int)(hwirq + i - its_dev->event_map.lpi_base),
2223                          (int)(hwirq + i), virq + i);
2224         }
2225
2226         return 0;
2227 }
2228
2229 static void its_irq_domain_activate(struct irq_domain *domain,
2230                                     struct irq_data *d)
2231 {
2232         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2233         u32 event = its_get_event_id(d);
2234         const struct cpumask *cpu_mask = cpu_online_mask;
2235         int cpu;
2236
2237         /* get the cpu_mask of local node */
2238         if (its_dev->its->numa_node >= 0)
2239                 cpu_mask = cpumask_of_node(its_dev->its->numa_node);
2240
2241         /* Bind the LPI to the first possible CPU */
2242         cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
2243         if (cpu >= nr_cpu_ids) {
2244                 if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144)
2245                         return;
2246
2247                 cpu = cpumask_first(cpu_online_mask);
2248         }
2249
2250         its_dev->event_map.col_map[event] = cpu;
2251         irq_data_update_effective_affinity(d, cpumask_of(cpu));
2252
2253         /* Map the GIC IRQ and event to the device */
2254         its_send_mapti(its_dev, d->hwirq, event);
2255 }
2256
2257 static void its_irq_domain_deactivate(struct irq_domain *domain,
2258                                       struct irq_data *d)
2259 {
2260         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2261         u32 event = its_get_event_id(d);
2262
2263         /* Stop the delivery of interrupts */
2264         its_send_discard(its_dev, event);
2265 }
2266
2267 static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
2268                                 unsigned int nr_irqs)
2269 {
2270         struct irq_data *d = irq_domain_get_irq_data(domain, virq);
2271         struct its_device *its_dev = irq_data_get_irq_chip_data(d);
2272         struct its_node *its = its_dev->its;
2273         int i;
2274
2275         bitmap_release_region(its_dev->event_map.lpi_map,
2276                               its_get_event_id(irq_domain_get_irq_data(domain, virq)),
2277                               get_count_order(nr_irqs));
2278
2279         for (i = 0; i < nr_irqs; i++) {
2280                 struct irq_data *data = irq_domain_get_irq_data(domain,
2281                                                                 virq + i);
2282                 /* Nuke the entry in the domain */
2283                 irq_domain_reset_irq_data(data);
2284         }
2285
2286         mutex_lock(&its->dev_alloc_lock);
2287
2288         /*
2289          * If all interrupts have been freed, start mopping the
2290          * floor. This is conditionned on the device not being shared.
2291          */
2292         if (!its_dev->shared &&
2293             bitmap_empty(its_dev->event_map.lpi_map,
2294                          its_dev->event_map.nr_lpis)) {
2295                 its_lpi_free_chunks(its_dev->event_map.lpi_map,
2296                                     its_dev->event_map.lpi_base,
2297                                     its_dev->event_map.nr_lpis);
2298                 kfree(its_dev->event_map.col_map);
2299
2300                 /* Unmap device/itt */
2301                 its_send_mapd(its_dev, 0);
2302                 its_free_device(its_dev);
2303         }
2304
2305         mutex_unlock(&its->dev_alloc_lock);
2306
2307         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
2308 }
2309
2310 static const struct irq_domain_ops its_domain_ops = {
2311         .alloc                  = its_irq_domain_alloc,
2312         .free                   = its_irq_domain_free,
2313         .activate               = its_irq_domain_activate,
2314         .deactivate             = its_irq_domain_deactivate,
2315 };
2316
2317 /*
2318  * This is insane.
2319  *
2320  * If a GICv4 doesn't implement Direct LPIs (which is extremely
2321  * likely), the only way to perform an invalidate is to use a fake
2322  * device to issue an INV command, implying that the LPI has first
2323  * been mapped to some event on that device. Since this is not exactly
2324  * cheap, we try to keep that mapping around as long as possible, and
2325  * only issue an UNMAP if we're short on available slots.
2326  *
2327  * Broken by design(tm).
2328  */
2329 static void its_vpe_db_proxy_unmap_locked(struct its_vpe *vpe)
2330 {
2331         /* Already unmapped? */
2332         if (vpe->vpe_proxy_event == -1)
2333                 return;
2334
2335         its_send_discard(vpe_proxy.dev, vpe->vpe_proxy_event);
2336         vpe_proxy.vpes[vpe->vpe_proxy_event] = NULL;
2337
2338         /*
2339          * We don't track empty slots at all, so let's move the
2340          * next_victim pointer if we can quickly reuse that slot
2341          * instead of nuking an existing entry. Not clear that this is
2342          * always a win though, and this might just generate a ripple
2343          * effect... Let's just hope VPEs don't migrate too often.
2344          */
2345         if (vpe_proxy.vpes[vpe_proxy.next_victim])
2346                 vpe_proxy.next_victim = vpe->vpe_proxy_event;
2347
2348         vpe->vpe_proxy_event = -1;
2349 }
2350
2351 static void its_vpe_db_proxy_unmap(struct its_vpe *vpe)
2352 {
2353         if (!gic_rdists->has_direct_lpi) {
2354                 unsigned long flags;
2355
2356                 raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2357                 its_vpe_db_proxy_unmap_locked(vpe);
2358                 raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2359         }
2360 }
2361
2362 static void its_vpe_db_proxy_map_locked(struct its_vpe *vpe)
2363 {
2364         /* Already mapped? */
2365         if (vpe->vpe_proxy_event != -1)
2366                 return;
2367
2368         /* This slot was already allocated. Kick the other VPE out. */
2369         if (vpe_proxy.vpes[vpe_proxy.next_victim])
2370                 its_vpe_db_proxy_unmap_locked(vpe_proxy.vpes[vpe_proxy.next_victim]);
2371
2372         /* Map the new VPE instead */
2373         vpe_proxy.vpes[vpe_proxy.next_victim] = vpe;
2374         vpe->vpe_proxy_event = vpe_proxy.next_victim;
2375         vpe_proxy.next_victim = (vpe_proxy.next_victim + 1) % vpe_proxy.dev->nr_ites;
2376
2377         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = vpe->col_idx;
2378         its_send_mapti(vpe_proxy.dev, vpe->vpe_db_lpi, vpe->vpe_proxy_event);
2379 }
2380
2381 static void its_vpe_db_proxy_move(struct its_vpe *vpe, int from, int to)
2382 {
2383         unsigned long flags;
2384         struct its_collection *target_col;
2385
2386         if (gic_rdists->has_direct_lpi) {
2387                 void __iomem *rdbase;
2388
2389                 rdbase = per_cpu_ptr(gic_rdists->rdist, from)->rd_base;
2390                 gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
2391                 while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2392                         cpu_relax();
2393
2394                 return;
2395         }
2396
2397         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2398
2399         its_vpe_db_proxy_map_locked(vpe);
2400
2401         target_col = &vpe_proxy.dev->its->collections[to];
2402         its_send_movi(vpe_proxy.dev, target_col, vpe->vpe_proxy_event);
2403         vpe_proxy.dev->event_map.col_map[vpe->vpe_proxy_event] = to;
2404
2405         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2406 }
2407
2408 static int its_vpe_set_affinity(struct irq_data *d,
2409                                 const struct cpumask *mask_val,
2410                                 bool force)
2411 {
2412         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2413         int cpu = cpumask_first(mask_val);
2414
2415         /*
2416          * Changing affinity is mega expensive, so let's be as lazy as
2417          * we can and only do it if we really have to. Also, if mapped
2418          * into the proxy device, we need to move the doorbell
2419          * interrupt to its new location.
2420          */
2421         if (vpe->col_idx != cpu) {
2422                 int from = vpe->col_idx;
2423
2424                 vpe->col_idx = cpu;
2425                 its_send_vmovp(vpe);
2426                 its_vpe_db_proxy_move(vpe, from, cpu);
2427         }
2428
2429         return IRQ_SET_MASK_OK_DONE;
2430 }
2431
2432 static void its_vpe_schedule(struct its_vpe *vpe)
2433 {
2434         void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
2435         u64 val;
2436
2437         /* Schedule the VPE */
2438         val  = virt_to_phys(page_address(vpe->its_vm->vprop_page)) &
2439                 GENMASK_ULL(51, 12);
2440         val |= (LPI_NRBITS - 1) & GICR_VPROPBASER_IDBITS_MASK;
2441         val |= GICR_VPROPBASER_RaWb;
2442         val |= GICR_VPROPBASER_InnerShareable;
2443         gits_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER);
2444
2445         val  = virt_to_phys(page_address(vpe->vpt_page)) &
2446                 GENMASK_ULL(51, 16);
2447         val |= GICR_VPENDBASER_RaWaWb;
2448         val |= GICR_VPENDBASER_NonShareable;
2449         /*
2450          * There is no good way of finding out if the pending table is
2451          * empty as we can race against the doorbell interrupt very
2452          * easily. So in the end, vpe->pending_last is only an
2453          * indication that the vcpu has something pending, not one
2454          * that the pending table is empty. A good implementation
2455          * would be able to read its coarse map pretty quickly anyway,
2456          * making this a tolerable issue.
2457          */
2458         val |= GICR_VPENDBASER_PendingLast;
2459         val |= vpe->idai ? GICR_VPENDBASER_IDAI : 0;
2460         val |= GICR_VPENDBASER_Valid;
2461         gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
2462 }
2463
2464 static void its_vpe_deschedule(struct its_vpe *vpe)
2465 {
2466         void * __iomem vlpi_base = gic_data_rdist_vlpi_base();
2467         u32 count = 1000000;    /* 1s! */
2468         bool clean;
2469         u64 val;
2470
2471         /* We're being scheduled out */
2472         val = gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
2473         val &= ~GICR_VPENDBASER_Valid;
2474         gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER);
2475
2476         do {
2477                 val = gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER);
2478                 clean = !(val & GICR_VPENDBASER_Dirty);
2479                 if (!clean) {
2480                         count--;
2481                         cpu_relax();
2482                         udelay(1);
2483                 }
2484         } while (!clean && count);
2485
2486         if (unlikely(!clean && !count)) {
2487                 pr_err_ratelimited("ITS virtual pending table not cleaning\n");
2488                 vpe->idai = false;
2489                 vpe->pending_last = true;
2490         } else {
2491                 vpe->idai = !!(val & GICR_VPENDBASER_IDAI);
2492                 vpe->pending_last = !!(val & GICR_VPENDBASER_PendingLast);
2493         }
2494 }
2495
2496 static int its_vpe_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
2497 {
2498         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2499         struct its_cmd_info *info = vcpu_info;
2500
2501         switch (info->cmd_type) {
2502         case SCHEDULE_VPE:
2503                 its_vpe_schedule(vpe);
2504                 return 0;
2505
2506         case DESCHEDULE_VPE:
2507                 its_vpe_deschedule(vpe);
2508                 return 0;
2509
2510         case INVALL_VPE:
2511                 its_send_vinvall(vpe);
2512                 return 0;
2513
2514         default:
2515                 return -EINVAL;
2516         }
2517 }
2518
2519 static void its_vpe_send_cmd(struct its_vpe *vpe,
2520                              void (*cmd)(struct its_device *, u32))
2521 {
2522         unsigned long flags;
2523
2524         raw_spin_lock_irqsave(&vpe_proxy.lock, flags);
2525
2526         its_vpe_db_proxy_map_locked(vpe);
2527         cmd(vpe_proxy.dev, vpe->vpe_proxy_event);
2528
2529         raw_spin_unlock_irqrestore(&vpe_proxy.lock, flags);
2530 }
2531
2532 static void its_vpe_send_inv(struct irq_data *d)
2533 {
2534         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2535
2536         if (gic_rdists->has_direct_lpi) {
2537                 void __iomem *rdbase;
2538
2539                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
2540                 gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_INVLPIR);
2541                 while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2542                         cpu_relax();
2543         } else {
2544                 its_vpe_send_cmd(vpe, its_send_inv);
2545         }
2546 }
2547
2548 static void its_vpe_mask_irq(struct irq_data *d)
2549 {
2550         /*
2551          * We need to unmask the LPI, which is described by the parent
2552          * irq_data. Instead of calling into the parent (which won't
2553          * exactly do the right thing, let's simply use the
2554          * parent_data pointer. Yes, I'm naughty.
2555          */
2556         lpi_write_config(d->parent_data, LPI_PROP_ENABLED, 0);
2557         its_vpe_send_inv(d);
2558 }
2559
2560 static void its_vpe_unmask_irq(struct irq_data *d)
2561 {
2562         /* Same hack as above... */
2563         lpi_write_config(d->parent_data, 0, LPI_PROP_ENABLED);
2564         its_vpe_send_inv(d);
2565 }
2566
2567 static int its_vpe_set_irqchip_state(struct irq_data *d,
2568                                      enum irqchip_irq_state which,
2569                                      bool state)
2570 {
2571         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2572
2573         if (which != IRQCHIP_STATE_PENDING)
2574                 return -EINVAL;
2575
2576         if (gic_rdists->has_direct_lpi) {
2577                 void __iomem *rdbase;
2578
2579                 rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
2580                 if (state) {
2581                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_SETLPIR);
2582                 } else {
2583                         gic_write_lpir(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR);
2584                         while (gic_read_lpir(rdbase + GICR_SYNCR) & 1)
2585                                 cpu_relax();
2586                 }
2587         } else {
2588                 if (state)
2589                         its_vpe_send_cmd(vpe, its_send_int);
2590                 else
2591                         its_vpe_send_cmd(vpe, its_send_clear);
2592         }
2593
2594         return 0;
2595 }
2596
2597 static int its_vpe_retrigger(struct irq_data *d)
2598 {
2599         return !its_vpe_set_irqchip_state(d, IRQCHIP_STATE_PENDING, true);
2600 }
2601
2602 static struct irq_chip its_vpe_irq_chip = {
2603         .name                   = "GICv4-vpe",
2604         .irq_mask               = its_vpe_mask_irq,
2605         .irq_unmask             = its_vpe_unmask_irq,
2606         .irq_eoi                = irq_chip_eoi_parent,
2607         .irq_set_affinity       = its_vpe_set_affinity,
2608         .irq_retrigger          = its_vpe_retrigger,
2609         .irq_set_irqchip_state  = its_vpe_set_irqchip_state,
2610         .irq_set_vcpu_affinity  = its_vpe_set_vcpu_affinity,
2611 };
2612
2613 static int its_vpe_id_alloc(void)
2614 {
2615         return ida_simple_get(&its_vpeid_ida, 0, ITS_MAX_VPEID, GFP_KERNEL);
2616 }
2617
2618 static void its_vpe_id_free(u16 id)
2619 {
2620         ida_simple_remove(&its_vpeid_ida, id);
2621 }
2622
2623 static int its_vpe_init(struct its_vpe *vpe)
2624 {
2625         struct page *vpt_page;
2626         int vpe_id;
2627
2628         /* Allocate vpe_id */
2629         vpe_id = its_vpe_id_alloc();
2630         if (vpe_id < 0)
2631                 return vpe_id;
2632
2633         /* Allocate VPT */
2634         vpt_page = its_allocate_pending_table(GFP_KERNEL);
2635         if (!vpt_page) {
2636                 its_vpe_id_free(vpe_id);
2637                 return -ENOMEM;
2638         }
2639
2640         if (!its_alloc_vpe_table(vpe_id)) {
2641                 its_vpe_id_free(vpe_id);
2642                 its_free_pending_table(vpt_page);
2643                 return -ENOMEM;
2644         }
2645
2646         vpe->vpe_id = vpe_id;
2647         vpe->vpt_page = vpt_page;
2648         vpe->vpe_proxy_event = -1;
2649
2650         return 0;
2651 }
2652
2653 static void its_vpe_teardown(struct its_vpe *vpe)
2654 {
2655         its_vpe_db_proxy_unmap(vpe);
2656         its_vpe_id_free(vpe->vpe_id);
2657         its_free_pending_table(vpe->vpt_page);
2658 }
2659
2660 static void its_vpe_irq_domain_free(struct irq_domain *domain,
2661                                     unsigned int virq,
2662                                     unsigned int nr_irqs)
2663 {
2664         struct its_vm *vm = domain->host_data;
2665         int i;
2666
2667         irq_domain_free_irqs_parent(domain, virq, nr_irqs);
2668
2669         for (i = 0; i < nr_irqs; i++) {
2670                 struct irq_data *data = irq_domain_get_irq_data(domain,
2671                                                                 virq + i);
2672                 struct its_vpe *vpe = irq_data_get_irq_chip_data(data);
2673
2674                 BUG_ON(vm != vpe->its_vm);
2675
2676                 clear_bit(data->hwirq, vm->db_bitmap);
2677                 its_vpe_teardown(vpe);
2678                 irq_domain_reset_irq_data(data);
2679         }
2680
2681         if (bitmap_empty(vm->db_bitmap, vm->nr_db_lpis)) {
2682                 its_lpi_free_chunks(vm->db_bitmap, vm->db_lpi_base, vm->nr_db_lpis);
2683                 its_free_prop_table(vm->vprop_page);
2684         }
2685 }
2686
2687 static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
2688                                     unsigned int nr_irqs, void *args)
2689 {
2690         struct its_vm *vm = args;
2691         unsigned long *bitmap;
2692         struct page *vprop_page;
2693         int base, nr_ids, i, err = 0;
2694
2695         BUG_ON(!vm);
2696
2697         bitmap = its_lpi_alloc_chunks(nr_irqs, &base, &nr_ids);
2698         if (!bitmap)
2699                 return -ENOMEM;
2700
2701         if (nr_ids < nr_irqs) {
2702                 its_lpi_free_chunks(bitmap, base, nr_ids);
2703                 return -ENOMEM;
2704         }
2705
2706         vprop_page = its_allocate_prop_table(GFP_KERNEL);
2707         if (!vprop_page) {
2708                 its_lpi_free_chunks(bitmap, base, nr_ids);
2709                 return -ENOMEM;
2710         }
2711
2712         vm->db_bitmap = bitmap;
2713         vm->db_lpi_base = base;
2714         vm->nr_db_lpis = nr_ids;
2715         vm->vprop_page = vprop_page;
2716
2717         for (i = 0; i < nr_irqs; i++) {
2718                 vm->vpes[i]->vpe_db_lpi = base + i;
2719                 err = its_vpe_init(vm->vpes[i]);
2720                 if (err)
2721                         break;
2722                 err = its_irq_gic_domain_alloc(domain, virq + i,
2723                                                vm->vpes[i]->vpe_db_lpi);
2724                 if (err)
2725                         break;
2726                 irq_domain_set_hwirq_and_chip(domain, virq + i, i,
2727                                               &its_vpe_irq_chip, vm->vpes[i]);
2728                 set_bit(i, bitmap);
2729         }
2730
2731         if (err) {
2732                 if (i > 0)
2733                         its_vpe_irq_domain_free(domain, virq, i);
2734
2735                 its_lpi_free_chunks(bitmap, base, nr_ids);
2736                 its_free_prop_table(vprop_page);
2737         }
2738
2739         return err;
2740 }
2741
2742 static void its_vpe_irq_domain_activate(struct irq_domain *domain,
2743                                         struct irq_data *d)
2744 {
2745         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2746
2747         /* Map the VPE to the first possible CPU */
2748         vpe->col_idx = cpumask_first(cpu_online_mask);
2749         its_send_vmapp(vpe, true);
2750         its_send_vinvall(vpe);
2751 }
2752
2753 static void its_vpe_irq_domain_deactivate(struct irq_domain *domain,
2754                                           struct irq_data *d)
2755 {
2756         struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
2757
2758         its_send_vmapp(vpe, false);
2759 }
2760
2761 static const struct irq_domain_ops its_vpe_domain_ops = {
2762         .alloc                  = its_vpe_irq_domain_alloc,
2763         .free                   = its_vpe_irq_domain_free,
2764         .activate               = its_vpe_irq_domain_activate,
2765         .deactivate             = its_vpe_irq_domain_deactivate,
2766 };
2767
2768 static int its_force_quiescent(void __iomem *base)
2769 {
2770         u32 count = 1000000;    /* 1s */
2771         u32 val;
2772
2773         val = readl_relaxed(base + GITS_CTLR);
2774         /*
2775          * GIC architecture specification requires the ITS to be both
2776          * disabled and quiescent for writes to GITS_BASER<n> or
2777          * GITS_CBASER to not have UNPREDICTABLE results.
2778          */
2779         if ((val & GITS_CTLR_QUIESCENT) && !(val & GITS_CTLR_ENABLE))
2780                 return 0;
2781
2782         /* Disable the generation of all interrupts to this ITS */
2783         val &= ~(GITS_CTLR_ENABLE | GITS_CTLR_ImDe);
2784         writel_relaxed(val, base + GITS_CTLR);
2785
2786         /* Poll GITS_CTLR and wait until ITS becomes quiescent */
2787         while (1) {
2788                 val = readl_relaxed(base + GITS_CTLR);
2789                 if (val & GITS_CTLR_QUIESCENT)
2790                         return 0;
2791
2792                 count--;
2793                 if (!count)
2794                         return -EBUSY;
2795
2796                 cpu_relax();
2797                 udelay(1);
2798         }
2799 }
2800
2801 static void __maybe_unused its_enable_quirk_cavium_22375(void *data)
2802 {
2803         struct its_node *its = data;
2804
2805         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_22375;
2806 }
2807
2808 static void __maybe_unused its_enable_quirk_cavium_23144(void *data)
2809 {
2810         struct its_node *its = data;
2811
2812         its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144;
2813 }
2814
2815 static void __maybe_unused its_enable_quirk_qdf2400_e0065(void *data)
2816 {
2817         struct its_node *its = data;
2818
2819         /* On QDF2400, the size of the ITE is 16Bytes */
2820         its->ite_size = 16;
2821 }
2822
2823 static const struct gic_quirk its_quirks[] = {
2824 #ifdef CONFIG_CAVIUM_ERRATUM_22375
2825         {
2826                 .desc   = "ITS: Cavium errata 22375, 24313",
2827                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
2828                 .mask   = 0xffff0fff,
2829                 .init   = its_enable_quirk_cavium_22375,
2830         },
2831 #endif
2832 #ifdef CONFIG_CAVIUM_ERRATUM_23144
2833         {
2834                 .desc   = "ITS: Cavium erratum 23144",
2835                 .iidr   = 0xa100034c,   /* ThunderX pass 1.x */
2836                 .mask   = 0xffff0fff,
2837                 .init   = its_enable_quirk_cavium_23144,
2838         },
2839 #endif
2840 #ifdef CONFIG_QCOM_QDF2400_ERRATUM_0065
2841         {
2842                 .desc   = "ITS: QDF2400 erratum 0065",
2843                 .iidr   = 0x00001070, /* QDF2400 ITS rev 1.x */
2844                 .mask   = 0xffffffff,
2845                 .init   = its_enable_quirk_qdf2400_e0065,
2846         },
2847 #endif
2848         {
2849         }
2850 };
2851
2852 static void its_enable_quirks(struct its_node *its)
2853 {
2854         u32 iidr = readl_relaxed(its->base + GITS_IIDR);
2855
2856         gic_enable_quirks(iidr, its_quirks, its);
2857 }
2858
2859 static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
2860 {
2861         struct irq_domain *inner_domain;
2862         struct msi_domain_info *info;
2863
2864         info = kzalloc(sizeof(*info), GFP_KERNEL);
2865         if (!info)
2866                 return -ENOMEM;
2867
2868         inner_domain = irq_domain_create_tree(handle, &its_domain_ops, its);
2869         if (!inner_domain) {
2870                 kfree(info);
2871                 return -ENOMEM;
2872         }
2873
2874         inner_domain->parent = its_parent;
2875         irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
2876         inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_REMAP;
2877         info->ops = &its_msi_domain_ops;
2878         info->data = its;
2879         inner_domain->host_data = info;
2880
2881         return 0;
2882 }
2883
2884 static int its_init_vpe_domain(void)
2885 {
2886         struct its_node *its;
2887         u32 devid;
2888         int entries;
2889
2890         if (gic_rdists->has_direct_lpi) {
2891                 pr_info("ITS: Using DirectLPI for VPE invalidation\n");
2892                 return 0;
2893         }
2894
2895         /* Any ITS will do, even if not v4 */
2896         its = list_first_entry(&its_nodes, struct its_node, entry);
2897
2898         entries = roundup_pow_of_two(nr_cpu_ids);
2899         vpe_proxy.vpes = kzalloc(sizeof(*vpe_proxy.vpes) * entries,
2900                                  GFP_KERNEL);
2901         if (!vpe_proxy.vpes) {
2902                 pr_err("ITS: Can't allocate GICv4 proxy device array\n");
2903                 return -ENOMEM;
2904         }
2905
2906         /* Use the last possible DevID */
2907         devid = GENMASK(its->device_ids - 1, 0);
2908         vpe_proxy.dev = its_create_device(its, devid, entries, false);
2909         if (!vpe_proxy.dev) {
2910                 kfree(vpe_proxy.vpes);
2911                 pr_err("ITS: Can't allocate GICv4 proxy device\n");
2912                 return -ENOMEM;
2913         }
2914
2915         BUG_ON(entries > vpe_proxy.dev->nr_ites);
2916
2917         raw_spin_lock_init(&vpe_proxy.lock);
2918         vpe_proxy.next_victim = 0;
2919         pr_info("ITS: Allocated DevID %x as GICv4 proxy device (%d slots)\n",
2920                 devid, vpe_proxy.dev->nr_ites);
2921
2922         return 0;
2923 }
2924
2925 static int __init its_compute_its_list_map(struct resource *res,
2926                                            void __iomem *its_base)
2927 {
2928         int its_number;
2929         u32 ctlr;
2930
2931         /*
2932          * This is assumed to be done early enough that we're
2933          * guaranteed to be single-threaded, hence no
2934          * locking. Should this change, we should address
2935          * this.
2936          */
2937         its_number = find_first_zero_bit(&its_list_map, ITS_LIST_MAX);
2938         if (its_number >= ITS_LIST_MAX) {
2939                 pr_err("ITS@%pa: No ITSList entry available!\n",
2940                        &res->start);
2941                 return -EINVAL;
2942         }
2943
2944         ctlr = readl_relaxed(its_base + GITS_CTLR);
2945         ctlr &= ~GITS_CTLR_ITS_NUMBER;
2946         ctlr |= its_number << GITS_CTLR_ITS_NUMBER_SHIFT;
2947         writel_relaxed(ctlr, its_base + GITS_CTLR);
2948         ctlr = readl_relaxed(its_base + GITS_CTLR);
2949         if ((ctlr & GITS_CTLR_ITS_NUMBER) != (its_number << GITS_CTLR_ITS_NUMBER_SHIFT)) {
2950                 its_number = ctlr & GITS_CTLR_ITS_NUMBER;
2951                 its_number >>= GITS_CTLR_ITS_NUMBER_SHIFT;
2952         }
2953
2954         if (test_and_set_bit(its_number, &its_list_map)) {
2955                 pr_err("ITS@%pa: Duplicate ITSList entry %d\n",
2956                        &res->start, its_number);
2957                 return -EINVAL;
2958         }
2959
2960         return its_number;
2961 }
2962
2963 static int __init its_probe_one(struct resource *res,
2964                                 struct fwnode_handle *handle, int numa_node)
2965 {
2966         struct its_node *its;
2967         void __iomem *its_base;
2968         u32 val, ctlr;
2969         u64 baser, tmp, typer;
2970         int err;
2971
2972         its_base = ioremap(res->start, resource_size(res));
2973         if (!its_base) {
2974                 pr_warn("ITS@%pa: Unable to map ITS registers\n", &res->start);
2975                 return -ENOMEM;
2976         }
2977
2978         val = readl_relaxed(its_base + GITS_PIDR2) & GIC_PIDR2_ARCH_MASK;
2979         if (val != 0x30 && val != 0x40) {
2980                 pr_warn("ITS@%pa: No ITS detected, giving up\n", &res->start);
2981                 err = -ENODEV;
2982                 goto out_unmap;
2983         }
2984
2985         err = its_force_quiescent(its_base);
2986         if (err) {
2987                 pr_warn("ITS@%pa: Failed to quiesce, giving up\n", &res->start);
2988                 goto out_unmap;
2989         }
2990
2991         pr_info("ITS %pR\n", res);
2992
2993         its = kzalloc(sizeof(*its), GFP_KERNEL);
2994         if (!its) {
2995                 err = -ENOMEM;
2996                 goto out_unmap;
2997         }
2998
2999         raw_spin_lock_init(&its->lock);
3000         mutex_init(&its->dev_alloc_lock);
3001         INIT_LIST_HEAD(&its->entry);
3002         INIT_LIST_HEAD(&its->its_device_list);
3003         typer = gic_read_typer(its_base + GITS_TYPER);
3004         its->base = its_base;
3005         its->phys_base = res->start;
3006         its->ite_size = GITS_TYPER_ITT_ENTRY_SIZE(typer);
3007         its->is_v4 = !!(typer & GITS_TYPER_VLPIS);
3008         if (its->is_v4) {
3009                 if (!(typer & GITS_TYPER_VMOVP)) {
3010                         err = its_compute_its_list_map(res, its_base);
3011                         if (err < 0)
3012                                 goto out_free_its;
3013
3014                         pr_info("ITS@%pa: Using ITS number %d\n",
3015                                 &res->start, err);
3016                 } else {
3017                         pr_info("ITS@%pa: Single VMOVP capable\n", &res->start);
3018                 }
3019         }
3020
3021         its->numa_node = numa_node;
3022
3023         its->cmd_base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
3024                                                 get_order(ITS_CMD_QUEUE_SZ));
3025         if (!its->cmd_base) {
3026                 err = -ENOMEM;
3027                 goto out_free_its;
3028         }
3029         its->cmd_write = its->cmd_base;
3030
3031         its_enable_quirks(its);
3032
3033         err = its_alloc_tables(its);
3034         if (err)
3035                 goto out_free_cmd;
3036
3037         err = its_alloc_collections(its);
3038         if (err)
3039                 goto out_free_tables;
3040
3041         baser = (virt_to_phys(its->cmd_base)    |
3042                  GITS_CBASER_RaWaWb             |
3043                  GITS_CBASER_InnerShareable     |
3044                  (ITS_CMD_QUEUE_SZ / SZ_4K - 1) |
3045                  GITS_CBASER_VALID);
3046
3047         gits_write_cbaser(baser, its->base + GITS_CBASER);
3048         tmp = gits_read_cbaser(its->base + GITS_CBASER);
3049
3050         if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
3051                 if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) {
3052                         /*
3053                          * The HW reports non-shareable, we must
3054                          * remove the cacheability attributes as
3055                          * well.
3056                          */
3057                         baser &= ~(GITS_CBASER_SHAREABILITY_MASK |
3058                                    GITS_CBASER_CACHEABILITY_MASK);
3059                         baser |= GITS_CBASER_nC;
3060                         gits_write_cbaser(baser, its->base + GITS_CBASER);
3061                 }
3062                 pr_info("ITS: using cache flushing for cmd queue\n");
3063                 its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING;
3064         }
3065
3066         gits_write_cwriter(0, its->base + GITS_CWRITER);
3067         ctlr = readl_relaxed(its->base + GITS_CTLR);
3068         ctlr |= GITS_CTLR_ENABLE;
3069         if (its->is_v4)
3070                 ctlr |= GITS_CTLR_ImDe;
3071         writel_relaxed(ctlr, its->base + GITS_CTLR);
3072
3073         err = its_init_domain(handle, its);
3074         if (err)
3075                 goto out_free_tables;
3076
3077         spin_lock(&its_lock);
3078         list_add(&its->entry, &its_nodes);
3079         spin_unlock(&its_lock);
3080
3081         return 0;
3082
3083 out_free_tables:
3084         its_free_tables(its);
3085 out_free_cmd:
3086         free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
3087 out_free_its:
3088         kfree(its);
3089 out_unmap:
3090         iounmap(its_base);
3091         pr_err("ITS@%pa: failed probing (%d)\n", &res->start, err);
3092         return err;
3093 }
3094
3095 static bool gic_rdists_supports_plpis(void)
3096 {
3097         return !!(gic_read_typer(gic_data_rdist_rd_base() + GICR_TYPER) & GICR_TYPER_PLPIS);
3098 }
3099
3100 int its_cpu_init(void)
3101 {
3102         if (!list_empty(&its_nodes)) {
3103                 if (!gic_rdists_supports_plpis()) {
3104                         pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
3105                         return -ENXIO;
3106                 }
3107                 its_cpu_init_lpis();
3108                 its_cpu_init_collection();
3109         }
3110
3111         return 0;
3112 }
3113
3114 static const struct of_device_id its_device_id[] = {
3115         {       .compatible     = "arm,gic-v3-its",     },
3116         {},
3117 };
3118
3119 static int __init its_of_probe(struct device_node *node)
3120 {
3121         struct device_node *np;
3122         struct resource res;
3123
3124         for (np = of_find_matching_node(node, its_device_id); np;
3125              np = of_find_matching_node(np, its_device_id)) {
3126                 if (!of_device_is_available(np))
3127                         continue;
3128                 if (!of_property_read_bool(np, "msi-controller")) {
3129                         pr_warn("%pOF: no msi-controller property, ITS ignored\n",
3130                                 np);
3131                         continue;
3132                 }
3133
3134                 if (of_address_to_resource(np, 0, &res)) {
3135                         pr_warn("%pOF: no regs?\n", np);
3136                         continue;
3137                 }
3138
3139                 its_probe_one(&res, &np->fwnode, of_node_to_nid(np));
3140         }
3141         return 0;
3142 }
3143
3144 #ifdef CONFIG_ACPI
3145
3146 #define ACPI_GICV3_ITS_MEM_SIZE (SZ_128K)
3147
3148 #ifdef CONFIG_ACPI_NUMA
3149 struct its_srat_map {
3150         /* numa node id */
3151         u32     numa_node;
3152         /* GIC ITS ID */
3153         u32     its_id;
3154 };
3155
3156 static struct its_srat_map *its_srat_maps __initdata;
3157 static int its_in_srat __initdata;
3158
3159 static int __init acpi_get_its_numa_node(u32 its_id)
3160 {
3161         int i;
3162
3163         for (i = 0; i < its_in_srat; i++) {
3164                 if (its_id == its_srat_maps[i].its_id)
3165                         return its_srat_maps[i].numa_node;
3166         }
3167         return NUMA_NO_NODE;
3168 }
3169
3170 static int __init gic_acpi_match_srat_its(struct acpi_subtable_header *header,
3171                                           const unsigned long end)
3172 {
3173         return 0;
3174 }
3175
3176 static int __init gic_acpi_parse_srat_its(struct acpi_subtable_header *header,
3177                          const unsigned long end)
3178 {
3179         int node;
3180         struct acpi_srat_gic_its_affinity *its_affinity;
3181
3182         its_affinity = (struct acpi_srat_gic_its_affinity *)header;
3183         if (!its_affinity)
3184                 return -EINVAL;
3185
3186         if (its_affinity->header.length < sizeof(*its_affinity)) {
3187                 pr_err("SRAT: Invalid header length %d in ITS affinity\n",
3188                         its_affinity->header.length);
3189                 return -EINVAL;
3190         }
3191
3192         node = acpi_map_pxm_to_node(its_affinity->proximity_domain);
3193
3194         if (node == NUMA_NO_NODE || node >= MAX_NUMNODES) {
3195                 pr_err("SRAT: Invalid NUMA node %d in ITS affinity\n", node);
3196                 return 0;
3197         }
3198
3199         its_srat_maps[its_in_srat].numa_node = node;
3200         its_srat_maps[its_in_srat].its_id = its_affinity->its_id;
3201         its_in_srat++;
3202         pr_info("SRAT: PXM %d -> ITS %d -> Node %d\n",
3203                 its_affinity->proximity_domain, its_affinity->its_id, node);
3204
3205         return 0;
3206 }
3207
3208 static void __init acpi_table_parse_srat_its(void)
3209 {
3210         int count;
3211
3212         count = acpi_table_parse_entries(ACPI_SIG_SRAT,
3213                         sizeof(struct acpi_table_srat),
3214                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
3215                         gic_acpi_match_srat_its, 0);
3216         if (count <= 0)
3217                 return;
3218
3219         its_srat_maps = kmalloc(count * sizeof(struct its_srat_map),
3220                                 GFP_KERNEL);
3221         if (!its_srat_maps) {
3222                 pr_warn("SRAT: Failed to allocate memory for its_srat_maps!\n");
3223                 return;
3224         }
3225
3226         acpi_table_parse_entries(ACPI_SIG_SRAT,
3227                         sizeof(struct acpi_table_srat),
3228                         ACPI_SRAT_TYPE_GIC_ITS_AFFINITY,
3229                         gic_acpi_parse_srat_its, 0);
3230 }
3231
3232 /* free the its_srat_maps after ITS probing */
3233 static void __init acpi_its_srat_maps_free(void)
3234 {
3235         kfree(its_srat_maps);
3236 }
3237 #else
3238 static void __init acpi_table_parse_srat_its(void)      { }
3239 static int __init acpi_get_its_numa_node(u32 its_id) { return NUMA_NO_NODE; }
3240 static void __init acpi_its_srat_maps_free(void) { }
3241 #endif
3242
3243 static int __init gic_acpi_parse_madt_its(struct acpi_subtable_header *header,
3244                                           const unsigned long end)
3245 {
3246         struct acpi_madt_generic_translator *its_entry;
3247         struct fwnode_handle *dom_handle;
3248         struct resource res;
3249         int err;
3250
3251         its_entry = (struct acpi_madt_generic_translator *)header;
3252         memset(&res, 0, sizeof(res));
3253         res.start = its_entry->base_address;
3254         res.end = its_entry->base_address + ACPI_GICV3_ITS_MEM_SIZE - 1;
3255         res.flags = IORESOURCE_MEM;
3256
3257         dom_handle = irq_domain_alloc_fwnode((void *)its_entry->base_address);
3258         if (!dom_handle) {
3259                 pr_err("ITS@%pa: Unable to allocate GICv3 ITS domain token\n",
3260                        &res.start);
3261                 return -ENOMEM;
3262         }
3263
3264         err = iort_register_domain_token(its_entry->translation_id, dom_handle);
3265         if (err) {
3266                 pr_err("ITS@%pa: Unable to register GICv3 ITS domain token (ITS ID %d) to IORT\n",
3267                        &res.start, its_entry->translation_id);
3268                 goto dom_err;
3269         }
3270
3271         err = its_probe_one(&res, dom_handle,
3272                         acpi_get_its_numa_node(its_entry->translation_id));
3273         if (!err)
3274                 return 0;
3275
3276         iort_deregister_domain_token(its_entry->translation_id);
3277 dom_err:
3278         irq_domain_free_fwnode(dom_handle);
3279         return err;
3280 }
3281
3282 static void __init its_acpi_probe(void)
3283 {
3284         acpi_table_parse_srat_its();
3285         acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR,
3286                               gic_acpi_parse_madt_its, 0);
3287         acpi_its_srat_maps_free();
3288 }
3289 #else
3290 static void __init its_acpi_probe(void) { }
3291 #endif
3292
3293 int __init its_init(struct fwnode_handle *handle, struct rdists *rdists,
3294                     struct irq_domain *parent_domain)
3295 {
3296         struct device_node *of_node;
3297         struct its_node *its;
3298         bool has_v4 = false;
3299         int err;
3300
3301         its_parent = parent_domain;
3302         of_node = to_of_node(handle);
3303         if (of_node)
3304                 its_of_probe(of_node);
3305         else
3306                 its_acpi_probe();
3307
3308         if (list_empty(&its_nodes)) {
3309                 pr_warn("ITS: No ITS available, not enabling LPIs\n");
3310                 return -ENXIO;
3311         }
3312
3313         gic_rdists = rdists;
3314         err = its_alloc_lpi_tables();
3315         if (err)
3316                 return err;
3317
3318         list_for_each_entry(its, &its_nodes, entry)
3319                 has_v4 |= its->is_v4;
3320
3321         if (has_v4 & rdists->has_vlpis) {
3322                 if (its_init_vpe_domain() ||
3323                     its_init_v4(parent_domain, &its_vpe_domain_ops)) {
3324                         rdists->has_vlpis = false;
3325                         pr_err("ITS: Disabling GICv4 support\n");
3326                 }
3327         }
3328
3329         return 0;
3330 }