Merge tag 'sound-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
[linux-2.6-microblaze.git] / drivers / iommu / arm-smmu.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * IOMMU API for ARM architected SMMU implementations.
4  *
5  * Copyright (C) 2013 ARM Limited
6  *
7  * Author: Will Deacon <will.deacon@arm.com>
8  *
9  * This driver currently supports:
10  *      - SMMUv1 and v2 implementations
11  *      - Stream-matching and stream-indexing
12  *      - v7/v8 long-descriptor format
13  *      - Non-secure access to the SMMU
14  *      - Context fault reporting
15  *      - Extended Stream ID (16 bit)
16  */
17
18 #define pr_fmt(fmt) "arm-smmu: " fmt
19
20 #include <linux/acpi.h>
21 #include <linux/acpi_iort.h>
22 #include <linux/bitfield.h>
23 #include <linux/delay.h>
24 #include <linux/dma-iommu.h>
25 #include <linux/dma-mapping.h>
26 #include <linux/err.h>
27 #include <linux/interrupt.h>
28 #include <linux/io.h>
29 #include <linux/iopoll.h>
30 #include <linux/module.h>
31 #include <linux/of.h>
32 #include <linux/of_address.h>
33 #include <linux/of_device.h>
34 #include <linux/of_iommu.h>
35 #include <linux/pci.h>
36 #include <linux/platform_device.h>
37 #include <linux/pm_runtime.h>
38 #include <linux/ratelimit.h>
39 #include <linux/slab.h>
40
41 #include <linux/amba/bus.h>
42 #include <linux/fsl/mc.h>
43
44 #include "arm-smmu.h"
45
46 /*
47  * Apparently, some Qualcomm arm64 platforms which appear to expose their SMMU
48  * global register space are still, in fact, using a hypervisor to mediate it
49  * by trapping and emulating register accesses. Sadly, some deployed versions
50  * of said trapping code have bugs wherein they go horribly wrong for stores
51  * using r31 (i.e. XZR/WZR) as the source register.
52  */
53 #define QCOM_DUMMY_VAL -1
54
55 #define TLB_LOOP_TIMEOUT                1000000 /* 1s! */
56 #define TLB_SPIN_COUNT                  10
57
58 #define MSI_IOVA_BASE                   0x8000000
59 #define MSI_IOVA_LENGTH                 0x100000
60
61 static int force_stage;
62 module_param(force_stage, int, S_IRUGO);
63 MODULE_PARM_DESC(force_stage,
64         "Force SMMU mappings to be installed at a particular stage of translation. A value of '1' or '2' forces the corresponding stage. All other values are ignored (i.e. no stage is forced). Note that selecting a specific stage will disable support for nested translation.");
65 static bool disable_bypass =
66         IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT);
67 module_param(disable_bypass, bool, S_IRUGO);
68 MODULE_PARM_DESC(disable_bypass,
69         "Disable bypass streams such that incoming transactions from devices that are not attached to an iommu domain will report an abort back to the device and will not be allowed to pass through the SMMU.");
70
71 struct arm_smmu_s2cr {
72         struct iommu_group              *group;
73         int                             count;
74         enum arm_smmu_s2cr_type         type;
75         enum arm_smmu_s2cr_privcfg      privcfg;
76         u8                              cbndx;
77 };
78
79 #define s2cr_init_val (struct arm_smmu_s2cr){                           \
80         .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS,    \
81 }
82
83 struct arm_smmu_smr {
84         u16                             mask;
85         u16                             id;
86         bool                            valid;
87 };
88
89 struct arm_smmu_cb {
90         u64                             ttbr[2];
91         u32                             tcr[2];
92         u32                             mair[2];
93         struct arm_smmu_cfg             *cfg;
94 };
95
96 struct arm_smmu_master_cfg {
97         struct arm_smmu_device          *smmu;
98         s16                             smendx[];
99 };
100 #define INVALID_SMENDX                  -1
101 #define cfg_smendx(cfg, fw, i) \
102         (i >= fw->num_ids ? INVALID_SMENDX : cfg->smendx[i])
103 #define for_each_cfg_sme(cfg, fw, i, idx) \
104         for (i = 0; idx = cfg_smendx(cfg, fw, i), i < fw->num_ids; ++i)
105
106 static bool using_legacy_binding, using_generic_binding;
107
108 static inline int arm_smmu_rpm_get(struct arm_smmu_device *smmu)
109 {
110         if (pm_runtime_enabled(smmu->dev))
111                 return pm_runtime_get_sync(smmu->dev);
112
113         return 0;
114 }
115
116 static inline void arm_smmu_rpm_put(struct arm_smmu_device *smmu)
117 {
118         if (pm_runtime_enabled(smmu->dev))
119                 pm_runtime_put_autosuspend(smmu->dev);
120 }
121
122 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
123 {
124         return container_of(dom, struct arm_smmu_domain, domain);
125 }
126
127 static struct platform_driver arm_smmu_driver;
128 static struct iommu_ops arm_smmu_ops;
129
130 #ifdef CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS
131 static int arm_smmu_bus_init(struct iommu_ops *ops);
132
133 static struct device_node *dev_get_dev_node(struct device *dev)
134 {
135         if (dev_is_pci(dev)) {
136                 struct pci_bus *bus = to_pci_dev(dev)->bus;
137
138                 while (!pci_is_root_bus(bus))
139                         bus = bus->parent;
140                 return of_node_get(bus->bridge->parent->of_node);
141         }
142
143         return of_node_get(dev->of_node);
144 }
145
146 static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
147 {
148         *((__be32 *)data) = cpu_to_be32(alias);
149         return 0; /* Continue walking */
150 }
151
152 static int __find_legacy_master_phandle(struct device *dev, void *data)
153 {
154         struct of_phandle_iterator *it = *(void **)data;
155         struct device_node *np = it->node;
156         int err;
157
158         of_for_each_phandle(it, err, dev->of_node, "mmu-masters",
159                             "#stream-id-cells", -1)
160                 if (it->node == np) {
161                         *(void **)data = dev;
162                         return 1;
163                 }
164         it->node = np;
165         return err == -ENOENT ? 0 : err;
166 }
167
168 static int arm_smmu_register_legacy_master(struct device *dev,
169                                            struct arm_smmu_device **smmu)
170 {
171         struct device *smmu_dev;
172         struct device_node *np;
173         struct of_phandle_iterator it;
174         void *data = &it;
175         u32 *sids;
176         __be32 pci_sid;
177         int err;
178
179         np = dev_get_dev_node(dev);
180         if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
181                 of_node_put(np);
182                 return -ENODEV;
183         }
184
185         it.node = np;
186         err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
187                                      __find_legacy_master_phandle);
188         smmu_dev = data;
189         of_node_put(np);
190         if (err == 0)
191                 return -ENODEV;
192         if (err < 0)
193                 return err;
194
195         if (dev_is_pci(dev)) {
196                 /* "mmu-masters" assumes Stream ID == Requester ID */
197                 pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid,
198                                        &pci_sid);
199                 it.cur = &pci_sid;
200                 it.cur_count = 1;
201         }
202
203         err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
204                                 &arm_smmu_ops);
205         if (err)
206                 return err;
207
208         sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
209         if (!sids)
210                 return -ENOMEM;
211
212         *smmu = dev_get_drvdata(smmu_dev);
213         of_phandle_iterator_args(&it, sids, it.cur_count);
214         err = iommu_fwspec_add_ids(dev, sids, it.cur_count);
215         kfree(sids);
216         return err;
217 }
218
219 /*
220  * With the legacy DT binding in play, we have no guarantees about
221  * probe order, but then we're also not doing default domains, so we can
222  * delay setting bus ops until we're sure every possible SMMU is ready,
223  * and that way ensure that no add_device() calls get missed.
224  */
225 static int arm_smmu_legacy_bus_init(void)
226 {
227         if (using_legacy_binding)
228                 return arm_smmu_bus_init(&arm_smmu_ops);
229         return 0;
230 }
231 device_initcall_sync(arm_smmu_legacy_bus_init);
232 #else
233 static int arm_smmu_register_legacy_master(struct device *dev,
234                                            struct arm_smmu_device **smmu)
235 {
236         return -ENODEV;
237 }
238 #endif /* CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS */
239
240 static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
241 {
242         int idx;
243
244         do {
245                 idx = find_next_zero_bit(map, end, start);
246                 if (idx == end)
247                         return -ENOSPC;
248         } while (test_and_set_bit(idx, map));
249
250         return idx;
251 }
252
253 static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
254 {
255         clear_bit(idx, map);
256 }
257
258 /* Wait for any pending TLB invalidations to complete */
259 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu, int page,
260                                 int sync, int status)
261 {
262         unsigned int spin_cnt, delay;
263         u32 reg;
264
265         if (smmu->impl && unlikely(smmu->impl->tlb_sync))
266                 return smmu->impl->tlb_sync(smmu, page, sync, status);
267
268         arm_smmu_writel(smmu, page, sync, QCOM_DUMMY_VAL);
269         for (delay = 1; delay < TLB_LOOP_TIMEOUT; delay *= 2) {
270                 for (spin_cnt = TLB_SPIN_COUNT; spin_cnt > 0; spin_cnt--) {
271                         reg = arm_smmu_readl(smmu, page, status);
272                         if (!(reg & ARM_SMMU_sTLBGSTATUS_GSACTIVE))
273                                 return;
274                         cpu_relax();
275                 }
276                 udelay(delay);
277         }
278         dev_err_ratelimited(smmu->dev,
279                             "TLB sync timed out -- SMMU may be deadlocked\n");
280 }
281
282 static void arm_smmu_tlb_sync_global(struct arm_smmu_device *smmu)
283 {
284         unsigned long flags;
285
286         spin_lock_irqsave(&smmu->global_sync_lock, flags);
287         __arm_smmu_tlb_sync(smmu, ARM_SMMU_GR0, ARM_SMMU_GR0_sTLBGSYNC,
288                             ARM_SMMU_GR0_sTLBGSTATUS);
289         spin_unlock_irqrestore(&smmu->global_sync_lock, flags);
290 }
291
292 static void arm_smmu_tlb_sync_context(struct arm_smmu_domain *smmu_domain)
293 {
294         struct arm_smmu_device *smmu = smmu_domain->smmu;
295         unsigned long flags;
296
297         spin_lock_irqsave(&smmu_domain->cb_lock, flags);
298         __arm_smmu_tlb_sync(smmu, ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx),
299                             ARM_SMMU_CB_TLBSYNC, ARM_SMMU_CB_TLBSTATUS);
300         spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
301 }
302
303 static void arm_smmu_tlb_inv_context_s1(void *cookie)
304 {
305         struct arm_smmu_domain *smmu_domain = cookie;
306         /*
307          * The TLBI write may be relaxed, so ensure that PTEs cleared by the
308          * current CPU are visible beforehand.
309          */
310         wmb();
311         arm_smmu_cb_write(smmu_domain->smmu, smmu_domain->cfg.cbndx,
312                           ARM_SMMU_CB_S1_TLBIASID, smmu_domain->cfg.asid);
313         arm_smmu_tlb_sync_context(smmu_domain);
314 }
315
316 static void arm_smmu_tlb_inv_context_s2(void *cookie)
317 {
318         struct arm_smmu_domain *smmu_domain = cookie;
319         struct arm_smmu_device *smmu = smmu_domain->smmu;
320
321         /* See above */
322         wmb();
323         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIVMID, smmu_domain->cfg.vmid);
324         arm_smmu_tlb_sync_global(smmu);
325 }
326
327 static void arm_smmu_tlb_inv_range_s1(unsigned long iova, size_t size,
328                                       size_t granule, void *cookie, int reg)
329 {
330         struct arm_smmu_domain *smmu_domain = cookie;
331         struct arm_smmu_device *smmu = smmu_domain->smmu;
332         struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
333         int idx = cfg->cbndx;
334
335         if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
336                 wmb();
337
338         if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
339                 iova = (iova >> 12) << 12;
340                 iova |= cfg->asid;
341                 do {
342                         arm_smmu_cb_write(smmu, idx, reg, iova);
343                         iova += granule;
344                 } while (size -= granule);
345         } else {
346                 iova >>= 12;
347                 iova |= (u64)cfg->asid << 48;
348                 do {
349                         arm_smmu_cb_writeq(smmu, idx, reg, iova);
350                         iova += granule >> 12;
351                 } while (size -= granule);
352         }
353 }
354
355 static void arm_smmu_tlb_inv_range_s2(unsigned long iova, size_t size,
356                                       size_t granule, void *cookie, int reg)
357 {
358         struct arm_smmu_domain *smmu_domain = cookie;
359         struct arm_smmu_device *smmu = smmu_domain->smmu;
360         int idx = smmu_domain->cfg.cbndx;
361
362         if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
363                 wmb();
364
365         iova >>= 12;
366         do {
367                 if (smmu_domain->cfg.fmt == ARM_SMMU_CTX_FMT_AARCH64)
368                         arm_smmu_cb_writeq(smmu, idx, reg, iova);
369                 else
370                         arm_smmu_cb_write(smmu, idx, reg, iova);
371                 iova += granule >> 12;
372         } while (size -= granule);
373 }
374
375 static void arm_smmu_tlb_inv_walk_s1(unsigned long iova, size_t size,
376                                      size_t granule, void *cookie)
377 {
378         arm_smmu_tlb_inv_range_s1(iova, size, granule, cookie,
379                                   ARM_SMMU_CB_S1_TLBIVA);
380         arm_smmu_tlb_sync_context(cookie);
381 }
382
383 static void arm_smmu_tlb_inv_leaf_s1(unsigned long iova, size_t size,
384                                      size_t granule, void *cookie)
385 {
386         arm_smmu_tlb_inv_range_s1(iova, size, granule, cookie,
387                                   ARM_SMMU_CB_S1_TLBIVAL);
388         arm_smmu_tlb_sync_context(cookie);
389 }
390
391 static void arm_smmu_tlb_add_page_s1(struct iommu_iotlb_gather *gather,
392                                      unsigned long iova, size_t granule,
393                                      void *cookie)
394 {
395         arm_smmu_tlb_inv_range_s1(iova, granule, granule, cookie,
396                                   ARM_SMMU_CB_S1_TLBIVAL);
397 }
398
399 static void arm_smmu_tlb_inv_walk_s2(unsigned long iova, size_t size,
400                                      size_t granule, void *cookie)
401 {
402         arm_smmu_tlb_inv_range_s2(iova, size, granule, cookie,
403                                   ARM_SMMU_CB_S2_TLBIIPAS2);
404         arm_smmu_tlb_sync_context(cookie);
405 }
406
407 static void arm_smmu_tlb_inv_leaf_s2(unsigned long iova, size_t size,
408                                      size_t granule, void *cookie)
409 {
410         arm_smmu_tlb_inv_range_s2(iova, size, granule, cookie,
411                                   ARM_SMMU_CB_S2_TLBIIPAS2L);
412         arm_smmu_tlb_sync_context(cookie);
413 }
414
415 static void arm_smmu_tlb_add_page_s2(struct iommu_iotlb_gather *gather,
416                                      unsigned long iova, size_t granule,
417                                      void *cookie)
418 {
419         arm_smmu_tlb_inv_range_s2(iova, granule, granule, cookie,
420                                   ARM_SMMU_CB_S2_TLBIIPAS2L);
421 }
422
423 static void arm_smmu_tlb_inv_any_s2_v1(unsigned long iova, size_t size,
424                                        size_t granule, void *cookie)
425 {
426         arm_smmu_tlb_inv_context_s2(cookie);
427 }
428 /*
429  * On MMU-401 at least, the cost of firing off multiple TLBIVMIDs appears
430  * almost negligible, but the benefit of getting the first one in as far ahead
431  * of the sync as possible is significant, hence we don't just make this a
432  * no-op and call arm_smmu_tlb_inv_context_s2() from .iotlb_sync as you might
433  * think.
434  */
435 static void arm_smmu_tlb_add_page_s2_v1(struct iommu_iotlb_gather *gather,
436                                         unsigned long iova, size_t granule,
437                                         void *cookie)
438 {
439         struct arm_smmu_domain *smmu_domain = cookie;
440         struct arm_smmu_device *smmu = smmu_domain->smmu;
441
442         if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
443                 wmb();
444
445         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIVMID, smmu_domain->cfg.vmid);
446 }
447
448 static const struct iommu_flush_ops arm_smmu_s1_tlb_ops = {
449         .tlb_flush_all  = arm_smmu_tlb_inv_context_s1,
450         .tlb_flush_walk = arm_smmu_tlb_inv_walk_s1,
451         .tlb_flush_leaf = arm_smmu_tlb_inv_leaf_s1,
452         .tlb_add_page   = arm_smmu_tlb_add_page_s1,
453 };
454
455 static const struct iommu_flush_ops arm_smmu_s2_tlb_ops_v2 = {
456         .tlb_flush_all  = arm_smmu_tlb_inv_context_s2,
457         .tlb_flush_walk = arm_smmu_tlb_inv_walk_s2,
458         .tlb_flush_leaf = arm_smmu_tlb_inv_leaf_s2,
459         .tlb_add_page   = arm_smmu_tlb_add_page_s2,
460 };
461
462 static const struct iommu_flush_ops arm_smmu_s2_tlb_ops_v1 = {
463         .tlb_flush_all  = arm_smmu_tlb_inv_context_s2,
464         .tlb_flush_walk = arm_smmu_tlb_inv_any_s2_v1,
465         .tlb_flush_leaf = arm_smmu_tlb_inv_any_s2_v1,
466         .tlb_add_page   = arm_smmu_tlb_add_page_s2_v1,
467 };
468
469 static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
470 {
471         u32 fsr, fsynr, cbfrsynra;
472         unsigned long iova;
473         struct iommu_domain *domain = dev;
474         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
475         struct arm_smmu_device *smmu = smmu_domain->smmu;
476         int idx = smmu_domain->cfg.cbndx;
477
478         fsr = arm_smmu_cb_read(smmu, idx, ARM_SMMU_CB_FSR);
479         if (!(fsr & ARM_SMMU_FSR_FAULT))
480                 return IRQ_NONE;
481
482         fsynr = arm_smmu_cb_read(smmu, idx, ARM_SMMU_CB_FSYNR0);
483         iova = arm_smmu_cb_readq(smmu, idx, ARM_SMMU_CB_FAR);
484         cbfrsynra = arm_smmu_gr1_read(smmu, ARM_SMMU_GR1_CBFRSYNRA(idx));
485
486         dev_err_ratelimited(smmu->dev,
487         "Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cbfrsynra=0x%x, cb=%d\n",
488                             fsr, iova, fsynr, cbfrsynra, idx);
489
490         arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_FSR, fsr);
491         return IRQ_HANDLED;
492 }
493
494 static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
495 {
496         u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
497         struct arm_smmu_device *smmu = dev;
498         static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
499                                       DEFAULT_RATELIMIT_BURST);
500
501         gfsr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSR);
502         gfsynr0 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR0);
503         gfsynr1 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR1);
504         gfsynr2 = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSYNR2);
505
506         if (!gfsr)
507                 return IRQ_NONE;
508
509         if (__ratelimit(&rs)) {
510                 if (IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT) &&
511                     (gfsr & ARM_SMMU_sGFSR_USF))
512                         dev_err(smmu->dev,
513                                 "Blocked unknown Stream ID 0x%hx; boot with \"arm-smmu.disable_bypass=0\" to allow, but this may have security implications\n",
514                                 (u16)gfsynr1);
515                 else
516                         dev_err(smmu->dev,
517                                 "Unexpected global fault, this could be serious\n");
518                 dev_err(smmu->dev,
519                         "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
520                         gfsr, gfsynr0, gfsynr1, gfsynr2);
521         }
522
523         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sGFSR, gfsr);
524         return IRQ_HANDLED;
525 }
526
527 static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
528                                        struct io_pgtable_cfg *pgtbl_cfg)
529 {
530         struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
531         struct arm_smmu_cb *cb = &smmu_domain->smmu->cbs[cfg->cbndx];
532         bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
533
534         cb->cfg = cfg;
535
536         /* TCR */
537         if (stage1) {
538                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
539                         cb->tcr[0] = pgtbl_cfg->arm_v7s_cfg.tcr;
540                 } else {
541                         cb->tcr[0] = arm_smmu_lpae_tcr(pgtbl_cfg);
542                         cb->tcr[1] = arm_smmu_lpae_tcr2(pgtbl_cfg);
543                         if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
544                                 cb->tcr[1] |= ARM_SMMU_TCR2_AS;
545                         else
546                                 cb->tcr[0] |= ARM_SMMU_TCR_EAE;
547                 }
548         } else {
549                 cb->tcr[0] = arm_smmu_lpae_vtcr(pgtbl_cfg);
550         }
551
552         /* TTBRs */
553         if (stage1) {
554                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
555                         cb->ttbr[0] = pgtbl_cfg->arm_v7s_cfg.ttbr;
556                         cb->ttbr[1] = 0;
557                 } else {
558                         cb->ttbr[0] = pgtbl_cfg->arm_lpae_s1_cfg.ttbr;
559                         cb->ttbr[0] |= FIELD_PREP(ARM_SMMU_TTBRn_ASID,
560                                                   cfg->asid);
561                         cb->ttbr[1] = FIELD_PREP(ARM_SMMU_TTBRn_ASID,
562                                                  cfg->asid);
563                 }
564         } else {
565                 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
566         }
567
568         /* MAIRs (stage-1 only) */
569         if (stage1) {
570                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
571                         cb->mair[0] = pgtbl_cfg->arm_v7s_cfg.prrr;
572                         cb->mair[1] = pgtbl_cfg->arm_v7s_cfg.nmrr;
573                 } else {
574                         cb->mair[0] = pgtbl_cfg->arm_lpae_s1_cfg.mair;
575                         cb->mair[1] = pgtbl_cfg->arm_lpae_s1_cfg.mair >> 32;
576                 }
577         }
578 }
579
580 static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
581 {
582         u32 reg;
583         bool stage1;
584         struct arm_smmu_cb *cb = &smmu->cbs[idx];
585         struct arm_smmu_cfg *cfg = cb->cfg;
586
587         /* Unassigned context banks only need disabling */
588         if (!cfg) {
589                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_SCTLR, 0);
590                 return;
591         }
592
593         stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
594
595         /* CBA2R */
596         if (smmu->version > ARM_SMMU_V1) {
597                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
598                         reg = ARM_SMMU_CBA2R_VA64;
599                 else
600                         reg = 0;
601                 /* 16-bit VMIDs live in CBA2R */
602                 if (smmu->features & ARM_SMMU_FEAT_VMID16)
603                         reg |= FIELD_PREP(ARM_SMMU_CBA2R_VMID16, cfg->vmid);
604
605                 arm_smmu_gr1_write(smmu, ARM_SMMU_GR1_CBA2R(idx), reg);
606         }
607
608         /* CBAR */
609         reg = FIELD_PREP(ARM_SMMU_CBAR_TYPE, cfg->cbar);
610         if (smmu->version < ARM_SMMU_V2)
611                 reg |= FIELD_PREP(ARM_SMMU_CBAR_IRPTNDX, cfg->irptndx);
612
613         /*
614          * Use the weakest shareability/memory types, so they are
615          * overridden by the ttbcr/pte.
616          */
617         if (stage1) {
618                 reg |= FIELD_PREP(ARM_SMMU_CBAR_S1_BPSHCFG,
619                                   ARM_SMMU_CBAR_S1_BPSHCFG_NSH) |
620                        FIELD_PREP(ARM_SMMU_CBAR_S1_MEMATTR,
621                                   ARM_SMMU_CBAR_S1_MEMATTR_WB);
622         } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
623                 /* 8-bit VMIDs live in CBAR */
624                 reg |= FIELD_PREP(ARM_SMMU_CBAR_VMID, cfg->vmid);
625         }
626         arm_smmu_gr1_write(smmu, ARM_SMMU_GR1_CBAR(idx), reg);
627
628         /*
629          * TCR
630          * We must write this before the TTBRs, since it determines the
631          * access behaviour of some fields (in particular, ASID[15:8]).
632          */
633         if (stage1 && smmu->version > ARM_SMMU_V1)
634                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TCR2, cb->tcr[1]);
635         arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TCR, cb->tcr[0]);
636
637         /* TTBRs */
638         if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
639                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_CONTEXTIDR, cfg->asid);
640                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TTBR0, cb->ttbr[0]);
641                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_TTBR1, cb->ttbr[1]);
642         } else {
643                 arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_TTBR0, cb->ttbr[0]);
644                 if (stage1)
645                         arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_TTBR1,
646                                            cb->ttbr[1]);
647         }
648
649         /* MAIRs (stage-1 only) */
650         if (stage1) {
651                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_S1_MAIR0, cb->mair[0]);
652                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_S1_MAIR1, cb->mair[1]);
653         }
654
655         /* SCTLR */
656         reg = ARM_SMMU_SCTLR_CFIE | ARM_SMMU_SCTLR_CFRE | ARM_SMMU_SCTLR_AFE |
657               ARM_SMMU_SCTLR_TRE | ARM_SMMU_SCTLR_M;
658         if (stage1)
659                 reg |= ARM_SMMU_SCTLR_S1_ASIDPNE;
660         if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
661                 reg |= ARM_SMMU_SCTLR_E;
662
663         arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_SCTLR, reg);
664 }
665
666 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
667                                         struct arm_smmu_device *smmu)
668 {
669         int irq, start, ret = 0;
670         unsigned long ias, oas;
671         struct io_pgtable_ops *pgtbl_ops;
672         struct io_pgtable_cfg pgtbl_cfg;
673         enum io_pgtable_fmt fmt;
674         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
675         struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
676
677         mutex_lock(&smmu_domain->init_mutex);
678         if (smmu_domain->smmu)
679                 goto out_unlock;
680
681         if (domain->type == IOMMU_DOMAIN_IDENTITY) {
682                 smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS;
683                 smmu_domain->smmu = smmu;
684                 goto out_unlock;
685         }
686
687         /*
688          * Mapping the requested stage onto what we support is surprisingly
689          * complicated, mainly because the spec allows S1+S2 SMMUs without
690          * support for nested translation. That means we end up with the
691          * following table:
692          *
693          * Requested        Supported        Actual
694          *     S1               N              S1
695          *     S1             S1+S2            S1
696          *     S1               S2             S2
697          *     S1               S1             S1
698          *     N                N              N
699          *     N              S1+S2            S2
700          *     N                S2             S2
701          *     N                S1             S1
702          *
703          * Note that you can't actually request stage-2 mappings.
704          */
705         if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
706                 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
707         if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
708                 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
709
710         /*
711          * Choosing a suitable context format is even more fiddly. Until we
712          * grow some way for the caller to express a preference, and/or move
713          * the decision into the io-pgtable code where it arguably belongs,
714          * just aim for the closest thing to the rest of the system, and hope
715          * that the hardware isn't esoteric enough that we can't assume AArch64
716          * support to be a superset of AArch32 support...
717          */
718         if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
719                 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
720         if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) &&
721             !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) &&
722             (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) &&
723             (smmu_domain->stage == ARM_SMMU_DOMAIN_S1))
724                 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S;
725         if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) &&
726             (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K |
727                                ARM_SMMU_FEAT_FMT_AARCH64_16K |
728                                ARM_SMMU_FEAT_FMT_AARCH64_4K)))
729                 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64;
730
731         if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
732                 ret = -EINVAL;
733                 goto out_unlock;
734         }
735
736         switch (smmu_domain->stage) {
737         case ARM_SMMU_DOMAIN_S1:
738                 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
739                 start = smmu->num_s2_context_banks;
740                 ias = smmu->va_size;
741                 oas = smmu->ipa_size;
742                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
743                         fmt = ARM_64_LPAE_S1;
744                 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
745                         fmt = ARM_32_LPAE_S1;
746                         ias = min(ias, 32UL);
747                         oas = min(oas, 40UL);
748                 } else {
749                         fmt = ARM_V7S;
750                         ias = min(ias, 32UL);
751                         oas = min(oas, 32UL);
752                 }
753                 smmu_domain->flush_ops = &arm_smmu_s1_tlb_ops;
754                 break;
755         case ARM_SMMU_DOMAIN_NESTED:
756                 /*
757                  * We will likely want to change this if/when KVM gets
758                  * involved.
759                  */
760         case ARM_SMMU_DOMAIN_S2:
761                 cfg->cbar = CBAR_TYPE_S2_TRANS;
762                 start = 0;
763                 ias = smmu->ipa_size;
764                 oas = smmu->pa_size;
765                 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
766                         fmt = ARM_64_LPAE_S2;
767                 } else {
768                         fmt = ARM_32_LPAE_S2;
769                         ias = min(ias, 40UL);
770                         oas = min(oas, 40UL);
771                 }
772                 if (smmu->version == ARM_SMMU_V2)
773                         smmu_domain->flush_ops = &arm_smmu_s2_tlb_ops_v2;
774                 else
775                         smmu_domain->flush_ops = &arm_smmu_s2_tlb_ops_v1;
776                 break;
777         default:
778                 ret = -EINVAL;
779                 goto out_unlock;
780         }
781         ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
782                                       smmu->num_context_banks);
783         if (ret < 0)
784                 goto out_unlock;
785
786         cfg->cbndx = ret;
787         if (smmu->version < ARM_SMMU_V2) {
788                 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
789                 cfg->irptndx %= smmu->num_context_irqs;
790         } else {
791                 cfg->irptndx = cfg->cbndx;
792         }
793
794         if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2)
795                 cfg->vmid = cfg->cbndx + 1;
796         else
797                 cfg->asid = cfg->cbndx;
798
799         smmu_domain->smmu = smmu;
800         if (smmu->impl && smmu->impl->init_context) {
801                 ret = smmu->impl->init_context(smmu_domain);
802                 if (ret)
803                         goto out_unlock;
804         }
805
806         pgtbl_cfg = (struct io_pgtable_cfg) {
807                 .pgsize_bitmap  = smmu->pgsize_bitmap,
808                 .ias            = ias,
809                 .oas            = oas,
810                 .coherent_walk  = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK,
811                 .tlb            = smmu_domain->flush_ops,
812                 .iommu_dev      = smmu->dev,
813         };
814
815         if (smmu_domain->non_strict)
816                 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_NON_STRICT;
817
818         pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
819         if (!pgtbl_ops) {
820                 ret = -ENOMEM;
821                 goto out_clear_smmu;
822         }
823
824         /* Update the domain's page sizes to reflect the page table format */
825         domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
826         domain->geometry.aperture_end = (1UL << ias) - 1;
827         domain->geometry.force_aperture = true;
828
829         /* Initialise the context bank with our page table cfg */
830         arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
831         arm_smmu_write_context_bank(smmu, cfg->cbndx);
832
833         /*
834          * Request context fault interrupt. Do this last to avoid the
835          * handler seeing a half-initialised domain state.
836          */
837         irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
838         ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
839                                IRQF_SHARED, "arm-smmu-context-fault", domain);
840         if (ret < 0) {
841                 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
842                         cfg->irptndx, irq);
843                 cfg->irptndx = ARM_SMMU_INVALID_IRPTNDX;
844         }
845
846         mutex_unlock(&smmu_domain->init_mutex);
847
848         /* Publish page table ops for map/unmap */
849         smmu_domain->pgtbl_ops = pgtbl_ops;
850         return 0;
851
852 out_clear_smmu:
853         __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
854         smmu_domain->smmu = NULL;
855 out_unlock:
856         mutex_unlock(&smmu_domain->init_mutex);
857         return ret;
858 }
859
860 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
861 {
862         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
863         struct arm_smmu_device *smmu = smmu_domain->smmu;
864         struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
865         int ret, irq;
866
867         if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY)
868                 return;
869
870         ret = arm_smmu_rpm_get(smmu);
871         if (ret < 0)
872                 return;
873
874         /*
875          * Disable the context bank and free the page tables before freeing
876          * it.
877          */
878         smmu->cbs[cfg->cbndx].cfg = NULL;
879         arm_smmu_write_context_bank(smmu, cfg->cbndx);
880
881         if (cfg->irptndx != ARM_SMMU_INVALID_IRPTNDX) {
882                 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
883                 devm_free_irq(smmu->dev, irq, domain);
884         }
885
886         free_io_pgtable_ops(smmu_domain->pgtbl_ops);
887         __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
888
889         arm_smmu_rpm_put(smmu);
890 }
891
892 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
893 {
894         struct arm_smmu_domain *smmu_domain;
895
896         if (type != IOMMU_DOMAIN_UNMANAGED &&
897             type != IOMMU_DOMAIN_DMA &&
898             type != IOMMU_DOMAIN_IDENTITY)
899                 return NULL;
900         /*
901          * Allocate the domain and initialise some of its data structures.
902          * We can't really do anything meaningful until we've added a
903          * master.
904          */
905         smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
906         if (!smmu_domain)
907                 return NULL;
908
909         if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
910             iommu_get_dma_cookie(&smmu_domain->domain))) {
911                 kfree(smmu_domain);
912                 return NULL;
913         }
914
915         mutex_init(&smmu_domain->init_mutex);
916         spin_lock_init(&smmu_domain->cb_lock);
917
918         return &smmu_domain->domain;
919 }
920
921 static void arm_smmu_domain_free(struct iommu_domain *domain)
922 {
923         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
924
925         /*
926          * Free the domain resources. We assume that all devices have
927          * already been detached.
928          */
929         iommu_put_dma_cookie(domain);
930         arm_smmu_destroy_domain_context(domain);
931         kfree(smmu_domain);
932 }
933
934 static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
935 {
936         struct arm_smmu_smr *smr = smmu->smrs + idx;
937         u32 reg = FIELD_PREP(ARM_SMMU_SMR_ID, smr->id) |
938                   FIELD_PREP(ARM_SMMU_SMR_MASK, smr->mask);
939
940         if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
941                 reg |= ARM_SMMU_SMR_VALID;
942         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), reg);
943 }
944
945 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
946 {
947         struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
948         u32 reg = FIELD_PREP(ARM_SMMU_S2CR_TYPE, s2cr->type) |
949                   FIELD_PREP(ARM_SMMU_S2CR_CBNDX, s2cr->cbndx) |
950                   FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, s2cr->privcfg);
951
952         if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
953             smmu->smrs[idx].valid)
954                 reg |= ARM_SMMU_S2CR_EXIDVALID;
955         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_S2CR(idx), reg);
956 }
957
958 static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
959 {
960         arm_smmu_write_s2cr(smmu, idx);
961         if (smmu->smrs)
962                 arm_smmu_write_smr(smmu, idx);
963 }
964
965 /*
966  * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function
967  * should be called after sCR0 is written.
968  */
969 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
970 {
971         u32 smr;
972         int i;
973
974         if (!smmu->smrs)
975                 return;
976         /*
977          * If we've had to accommodate firmware memory regions, we may
978          * have live SMRs by now; tread carefully...
979          *
980          * Somewhat perversely, not having a free SMR for this test implies we
981          * can get away without it anyway, as we'll only be able to 'allocate'
982          * these SMRs for the ID/mask values we're already trusting to be OK.
983          */
984         for (i = 0; i < smmu->num_mapping_groups; i++)
985                 if (!smmu->smrs[i].valid)
986                         goto smr_ok;
987         return;
988 smr_ok:
989         /*
990          * SMR.ID bits may not be preserved if the corresponding MASK
991          * bits are set, so check each one separately. We can reject
992          * masters later if they try to claim IDs outside these masks.
993          */
994         smr = FIELD_PREP(ARM_SMMU_SMR_ID, smmu->streamid_mask);
995         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(i), smr);
996         smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i));
997         smmu->streamid_mask = FIELD_GET(ARM_SMMU_SMR_ID, smr);
998
999         smr = FIELD_PREP(ARM_SMMU_SMR_MASK, smmu->streamid_mask);
1000         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(i), smr);
1001         smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i));
1002         smmu->smr_mask_mask = FIELD_GET(ARM_SMMU_SMR_MASK, smr);
1003 }
1004
1005 static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1006 {
1007         struct arm_smmu_smr *smrs = smmu->smrs;
1008         int i, free_idx = -ENOSPC;
1009
1010         /* Stream indexing is blissfully easy */
1011         if (!smrs)
1012                 return id;
1013
1014         /* Validating SMRs is... less so */
1015         for (i = 0; i < smmu->num_mapping_groups; ++i) {
1016                 if (!smrs[i].valid) {
1017                         /*
1018                          * Note the first free entry we come across, which
1019                          * we'll claim in the end if nothing else matches.
1020                          */
1021                         if (free_idx < 0)
1022                                 free_idx = i;
1023                         continue;
1024                 }
1025                 /*
1026                  * If the new entry is _entirely_ matched by an existing entry,
1027                  * then reuse that, with the guarantee that there also cannot
1028                  * be any subsequent conflicting entries. In normal use we'd
1029                  * expect simply identical entries for this case, but there's
1030                  * no harm in accommodating the generalisation.
1031                  */
1032                 if ((mask & smrs[i].mask) == mask &&
1033                     !((id ^ smrs[i].id) & ~smrs[i].mask))
1034                         return i;
1035                 /*
1036                  * If the new entry has any other overlap with an existing one,
1037                  * though, then there always exists at least one stream ID
1038                  * which would cause a conflict, and we can't allow that risk.
1039                  */
1040                 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
1041                         return -EINVAL;
1042         }
1043
1044         return free_idx;
1045 }
1046
1047 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
1048 {
1049         if (--smmu->s2crs[idx].count)
1050                 return false;
1051
1052         smmu->s2crs[idx] = s2cr_init_val;
1053         if (smmu->smrs)
1054                 smmu->smrs[idx].valid = false;
1055
1056         return true;
1057 }
1058
1059 static int arm_smmu_master_alloc_smes(struct device *dev)
1060 {
1061         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1062         struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev);
1063         struct arm_smmu_device *smmu = cfg->smmu;
1064         struct arm_smmu_smr *smrs = smmu->smrs;
1065         struct iommu_group *group;
1066         int i, idx, ret;
1067
1068         mutex_lock(&smmu->stream_map_mutex);
1069         /* Figure out a viable stream map entry allocation */
1070         for_each_cfg_sme(cfg, fwspec, i, idx) {
1071                 u16 sid = FIELD_GET(ARM_SMMU_SMR_ID, fwspec->ids[i]);
1072                 u16 mask = FIELD_GET(ARM_SMMU_SMR_MASK, fwspec->ids[i]);
1073
1074                 if (idx != INVALID_SMENDX) {
1075                         ret = -EEXIST;
1076                         goto out_err;
1077                 }
1078
1079                 ret = arm_smmu_find_sme(smmu, sid, mask);
1080                 if (ret < 0)
1081                         goto out_err;
1082
1083                 idx = ret;
1084                 if (smrs && smmu->s2crs[idx].count == 0) {
1085                         smrs[idx].id = sid;
1086                         smrs[idx].mask = mask;
1087                         smrs[idx].valid = true;
1088                 }
1089                 smmu->s2crs[idx].count++;
1090                 cfg->smendx[i] = (s16)idx;
1091         }
1092
1093         group = iommu_group_get_for_dev(dev);
1094         if (IS_ERR(group)) {
1095                 ret = PTR_ERR(group);
1096                 goto out_err;
1097         }
1098         iommu_group_put(group);
1099
1100         /* It worked! Now, poke the actual hardware */
1101         for_each_cfg_sme(cfg, fwspec, i, idx) {
1102                 arm_smmu_write_sme(smmu, idx);
1103                 smmu->s2crs[idx].group = group;
1104         }
1105
1106         mutex_unlock(&smmu->stream_map_mutex);
1107         return 0;
1108
1109 out_err:
1110         while (i--) {
1111                 arm_smmu_free_sme(smmu, cfg->smendx[i]);
1112                 cfg->smendx[i] = INVALID_SMENDX;
1113         }
1114         mutex_unlock(&smmu->stream_map_mutex);
1115         return ret;
1116 }
1117
1118 static void arm_smmu_master_free_smes(struct arm_smmu_master_cfg *cfg,
1119                                       struct iommu_fwspec *fwspec)
1120 {
1121         struct arm_smmu_device *smmu = cfg->smmu;
1122         int i, idx;
1123
1124         mutex_lock(&smmu->stream_map_mutex);
1125         for_each_cfg_sme(cfg, fwspec, i, idx) {
1126                 if (arm_smmu_free_sme(smmu, idx))
1127                         arm_smmu_write_sme(smmu, idx);
1128                 cfg->smendx[i] = INVALID_SMENDX;
1129         }
1130         mutex_unlock(&smmu->stream_map_mutex);
1131 }
1132
1133 static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1134                                       struct arm_smmu_master_cfg *cfg,
1135                                       struct iommu_fwspec *fwspec)
1136 {
1137         struct arm_smmu_device *smmu = smmu_domain->smmu;
1138         struct arm_smmu_s2cr *s2cr = smmu->s2crs;
1139         u8 cbndx = smmu_domain->cfg.cbndx;
1140         enum arm_smmu_s2cr_type type;
1141         int i, idx;
1142
1143         if (smmu_domain->stage == ARM_SMMU_DOMAIN_BYPASS)
1144                 type = S2CR_TYPE_BYPASS;
1145         else
1146                 type = S2CR_TYPE_TRANS;
1147
1148         for_each_cfg_sme(cfg, fwspec, i, idx) {
1149                 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1150                         continue;
1151
1152                 s2cr[idx].type = type;
1153                 s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
1154                 s2cr[idx].cbndx = cbndx;
1155                 arm_smmu_write_s2cr(smmu, idx);
1156         }
1157         return 0;
1158 }
1159
1160 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1161 {
1162         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1163         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1164         struct arm_smmu_master_cfg *cfg;
1165         struct arm_smmu_device *smmu;
1166         int ret;
1167
1168         if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1169                 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1170                 return -ENXIO;
1171         }
1172
1173         /*
1174          * FIXME: The arch/arm DMA API code tries to attach devices to its own
1175          * domains between of_xlate() and add_device() - we have no way to cope
1176          * with that, so until ARM gets converted to rely on groups and default
1177          * domains, just say no (but more politely than by dereferencing NULL).
1178          * This should be at least a WARN_ON once that's sorted.
1179          */
1180         cfg = dev_iommu_priv_get(dev);
1181         if (!cfg)
1182                 return -ENODEV;
1183
1184         smmu = cfg->smmu;
1185
1186         ret = arm_smmu_rpm_get(smmu);
1187         if (ret < 0)
1188                 return ret;
1189
1190         /* Ensure that the domain is finalised */
1191         ret = arm_smmu_init_domain_context(domain, smmu);
1192         if (ret < 0)
1193                 goto rpm_put;
1194
1195         /*
1196          * Sanity check the domain. We don't support domains across
1197          * different SMMUs.
1198          */
1199         if (smmu_domain->smmu != smmu) {
1200                 dev_err(dev,
1201                         "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1202                         dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1203                 ret = -EINVAL;
1204                 goto rpm_put;
1205         }
1206
1207         /* Looks ok, so add the device to the domain */
1208         ret = arm_smmu_domain_add_master(smmu_domain, cfg, fwspec);
1209
1210         /*
1211          * Setup an autosuspend delay to avoid bouncing runpm state.
1212          * Otherwise, if a driver for a suspended consumer device
1213          * unmaps buffers, it will runpm resume/suspend for each one.
1214          *
1215          * For example, when used by a GPU device, when an application
1216          * or game exits, it can trigger unmapping 100s or 1000s of
1217          * buffers.  With a runpm cycle for each buffer, that adds up
1218          * to 5-10sec worth of reprogramming the context bank, while
1219          * the system appears to be locked up to the user.
1220          */
1221         pm_runtime_set_autosuspend_delay(smmu->dev, 20);
1222         pm_runtime_use_autosuspend(smmu->dev);
1223
1224 rpm_put:
1225         arm_smmu_rpm_put(smmu);
1226         return ret;
1227 }
1228
1229 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1230                         phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
1231 {
1232         struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1233         struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1234         int ret;
1235
1236         if (!ops)
1237                 return -ENODEV;
1238
1239         arm_smmu_rpm_get(smmu);
1240         ret = ops->map(ops, iova, paddr, size, prot);
1241         arm_smmu_rpm_put(smmu);
1242
1243         return ret;
1244 }
1245
1246 static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1247                              size_t size, struct iommu_iotlb_gather *gather)
1248 {
1249         struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1250         struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1251         size_t ret;
1252
1253         if (!ops)
1254                 return 0;
1255
1256         arm_smmu_rpm_get(smmu);
1257         ret = ops->unmap(ops, iova, size, gather);
1258         arm_smmu_rpm_put(smmu);
1259
1260         return ret;
1261 }
1262
1263 static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain)
1264 {
1265         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1266         struct arm_smmu_device *smmu = smmu_domain->smmu;
1267
1268         if (smmu_domain->flush_ops) {
1269                 arm_smmu_rpm_get(smmu);
1270                 smmu_domain->flush_ops->tlb_flush_all(smmu_domain);
1271                 arm_smmu_rpm_put(smmu);
1272         }
1273 }
1274
1275 static void arm_smmu_iotlb_sync(struct iommu_domain *domain,
1276                                 struct iommu_iotlb_gather *gather)
1277 {
1278         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1279         struct arm_smmu_device *smmu = smmu_domain->smmu;
1280
1281         if (!smmu)
1282                 return;
1283
1284         arm_smmu_rpm_get(smmu);
1285         if (smmu->version == ARM_SMMU_V2 ||
1286             smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
1287                 arm_smmu_tlb_sync_context(smmu_domain);
1288         else
1289                 arm_smmu_tlb_sync_global(smmu);
1290         arm_smmu_rpm_put(smmu);
1291 }
1292
1293 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1294                                               dma_addr_t iova)
1295 {
1296         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1297         struct arm_smmu_device *smmu = smmu_domain->smmu;
1298         struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1299         struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1300         struct device *dev = smmu->dev;
1301         void __iomem *reg;
1302         u32 tmp;
1303         u64 phys;
1304         unsigned long va, flags;
1305         int ret, idx = cfg->cbndx;
1306
1307         ret = arm_smmu_rpm_get(smmu);
1308         if (ret < 0)
1309                 return 0;
1310
1311         spin_lock_irqsave(&smmu_domain->cb_lock, flags);
1312         va = iova & ~0xfffUL;
1313         if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
1314                 arm_smmu_cb_writeq(smmu, idx, ARM_SMMU_CB_ATS1PR, va);
1315         else
1316                 arm_smmu_cb_write(smmu, idx, ARM_SMMU_CB_ATS1PR, va);
1317
1318         reg = arm_smmu_page(smmu, ARM_SMMU_CB(smmu, idx)) + ARM_SMMU_CB_ATSR;
1319         if (readl_poll_timeout_atomic(reg, tmp, !(tmp & ARM_SMMU_ATSR_ACTIVE),
1320                                       5, 50)) {
1321                 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1322                 dev_err(dev,
1323                         "iova to phys timed out on %pad. Falling back to software table walk.\n",
1324                         &iova);
1325                 return ops->iova_to_phys(ops, iova);
1326         }
1327
1328         phys = arm_smmu_cb_readq(smmu, idx, ARM_SMMU_CB_PAR);
1329         spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1330         if (phys & ARM_SMMU_CB_PAR_F) {
1331                 dev_err(dev, "translation fault!\n");
1332                 dev_err(dev, "PAR = 0x%llx\n", phys);
1333                 return 0;
1334         }
1335
1336         arm_smmu_rpm_put(smmu);
1337
1338         return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1339 }
1340
1341 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1342                                         dma_addr_t iova)
1343 {
1344         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1345         struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1346
1347         if (domain->type == IOMMU_DOMAIN_IDENTITY)
1348                 return iova;
1349
1350         if (!ops)
1351                 return 0;
1352
1353         if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
1354                         smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
1355                 return arm_smmu_iova_to_phys_hard(domain, iova);
1356
1357         return ops->iova_to_phys(ops, iova);
1358 }
1359
1360 static bool arm_smmu_capable(enum iommu_cap cap)
1361 {
1362         switch (cap) {
1363         case IOMMU_CAP_CACHE_COHERENCY:
1364                 /*
1365                  * Return true here as the SMMU can always send out coherent
1366                  * requests.
1367                  */
1368                 return true;
1369         case IOMMU_CAP_NOEXEC:
1370                 return true;
1371         default:
1372                 return false;
1373         }
1374 }
1375
1376 static
1377 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
1378 {
1379         struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
1380                                                           fwnode);
1381         put_device(dev);
1382         return dev ? dev_get_drvdata(dev) : NULL;
1383 }
1384
1385 static int arm_smmu_add_device(struct device *dev)
1386 {
1387         struct arm_smmu_device *smmu = NULL;
1388         struct arm_smmu_master_cfg *cfg;
1389         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1390         int i, ret;
1391
1392         if (using_legacy_binding) {
1393                 ret = arm_smmu_register_legacy_master(dev, &smmu);
1394
1395                 /*
1396                  * If dev->iommu_fwspec is initally NULL, arm_smmu_register_legacy_master()
1397                  * will allocate/initialise a new one. Thus we need to update fwspec for
1398                  * later use.
1399                  */
1400                 fwspec = dev_iommu_fwspec_get(dev);
1401                 if (ret)
1402                         goto out_free;
1403         } else if (fwspec && fwspec->ops == &arm_smmu_ops) {
1404                 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
1405         } else {
1406                 return -ENODEV;
1407         }
1408
1409         ret = -EINVAL;
1410         for (i = 0; i < fwspec->num_ids; i++) {
1411                 u16 sid = FIELD_GET(ARM_SMMU_SMR_ID, fwspec->ids[i]);
1412                 u16 mask = FIELD_GET(ARM_SMMU_SMR_MASK, fwspec->ids[i]);
1413
1414                 if (sid & ~smmu->streamid_mask) {
1415                         dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1416                                 sid, smmu->streamid_mask);
1417                         goto out_free;
1418                 }
1419                 if (mask & ~smmu->smr_mask_mask) {
1420                         dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
1421                                 mask, smmu->smr_mask_mask);
1422                         goto out_free;
1423                 }
1424         }
1425
1426         ret = -ENOMEM;
1427         cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
1428                       GFP_KERNEL);
1429         if (!cfg)
1430                 goto out_free;
1431
1432         cfg->smmu = smmu;
1433         dev_iommu_priv_set(dev, cfg);
1434         while (i--)
1435                 cfg->smendx[i] = INVALID_SMENDX;
1436
1437         ret = arm_smmu_rpm_get(smmu);
1438         if (ret < 0)
1439                 goto out_cfg_free;
1440
1441         ret = arm_smmu_master_alloc_smes(dev);
1442         arm_smmu_rpm_put(smmu);
1443
1444         if (ret)
1445                 goto out_cfg_free;
1446
1447         iommu_device_link(&smmu->iommu, dev);
1448
1449         device_link_add(dev, smmu->dev,
1450                         DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_SUPPLIER);
1451
1452         return 0;
1453
1454 out_cfg_free:
1455         kfree(cfg);
1456 out_free:
1457         iommu_fwspec_free(dev);
1458         return ret;
1459 }
1460
1461 static void arm_smmu_remove_device(struct device *dev)
1462 {
1463         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1464         struct arm_smmu_master_cfg *cfg;
1465         struct arm_smmu_device *smmu;
1466         int ret;
1467
1468         if (!fwspec || fwspec->ops != &arm_smmu_ops)
1469                 return;
1470
1471         cfg  = dev_iommu_priv_get(dev);
1472         smmu = cfg->smmu;
1473
1474         ret = arm_smmu_rpm_get(smmu);
1475         if (ret < 0)
1476                 return;
1477
1478         iommu_device_unlink(&smmu->iommu, dev);
1479         arm_smmu_master_free_smes(cfg, fwspec);
1480
1481         arm_smmu_rpm_put(smmu);
1482
1483         dev_iommu_priv_set(dev, NULL);
1484         iommu_group_remove_device(dev);
1485         kfree(cfg);
1486         iommu_fwspec_free(dev);
1487 }
1488
1489 static struct iommu_group *arm_smmu_device_group(struct device *dev)
1490 {
1491         struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev);
1492         struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1493         struct arm_smmu_device *smmu = cfg->smmu;
1494         struct iommu_group *group = NULL;
1495         int i, idx;
1496
1497         for_each_cfg_sme(cfg, fwspec, i, idx) {
1498                 if (group && smmu->s2crs[idx].group &&
1499                     group != smmu->s2crs[idx].group)
1500                         return ERR_PTR(-EINVAL);
1501
1502                 group = smmu->s2crs[idx].group;
1503         }
1504
1505         if (group)
1506                 return iommu_group_ref_get(group);
1507
1508         if (dev_is_pci(dev))
1509                 group = pci_device_group(dev);
1510         else if (dev_is_fsl_mc(dev))
1511                 group = fsl_mc_device_group(dev);
1512         else
1513                 group = generic_device_group(dev);
1514
1515         return group;
1516 }
1517
1518 static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1519                                     enum iommu_attr attr, void *data)
1520 {
1521         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1522
1523         switch(domain->type) {
1524         case IOMMU_DOMAIN_UNMANAGED:
1525                 switch (attr) {
1526                 case DOMAIN_ATTR_NESTING:
1527                         *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1528                         return 0;
1529                 default:
1530                         return -ENODEV;
1531                 }
1532                 break;
1533         case IOMMU_DOMAIN_DMA:
1534                 switch (attr) {
1535                 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1536                         *(int *)data = smmu_domain->non_strict;
1537                         return 0;
1538                 default:
1539                         return -ENODEV;
1540                 }
1541                 break;
1542         default:
1543                 return -EINVAL;
1544         }
1545 }
1546
1547 static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1548                                     enum iommu_attr attr, void *data)
1549 {
1550         int ret = 0;
1551         struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1552
1553         mutex_lock(&smmu_domain->init_mutex);
1554
1555         switch(domain->type) {
1556         case IOMMU_DOMAIN_UNMANAGED:
1557                 switch (attr) {
1558                 case DOMAIN_ATTR_NESTING:
1559                         if (smmu_domain->smmu) {
1560                                 ret = -EPERM;
1561                                 goto out_unlock;
1562                         }
1563
1564                         if (*(int *)data)
1565                                 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1566                         else
1567                                 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1568                         break;
1569                 default:
1570                         ret = -ENODEV;
1571                 }
1572                 break;
1573         case IOMMU_DOMAIN_DMA:
1574                 switch (attr) {
1575                 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1576                         smmu_domain->non_strict = *(int *)data;
1577                         break;
1578                 default:
1579                         ret = -ENODEV;
1580                 }
1581                 break;
1582         default:
1583                 ret = -EINVAL;
1584         }
1585 out_unlock:
1586         mutex_unlock(&smmu_domain->init_mutex);
1587         return ret;
1588 }
1589
1590 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1591 {
1592         u32 mask, fwid = 0;
1593
1594         if (args->args_count > 0)
1595                 fwid |= FIELD_PREP(ARM_SMMU_SMR_ID, args->args[0]);
1596
1597         if (args->args_count > 1)
1598                 fwid |= FIELD_PREP(ARM_SMMU_SMR_MASK, args->args[1]);
1599         else if (!of_property_read_u32(args->np, "stream-match-mask", &mask))
1600                 fwid |= FIELD_PREP(ARM_SMMU_SMR_MASK, mask);
1601
1602         return iommu_fwspec_add_ids(dev, &fwid, 1);
1603 }
1604
1605 static void arm_smmu_get_resv_regions(struct device *dev,
1606                                       struct list_head *head)
1607 {
1608         struct iommu_resv_region *region;
1609         int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1610
1611         region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
1612                                          prot, IOMMU_RESV_SW_MSI);
1613         if (!region)
1614                 return;
1615
1616         list_add_tail(&region->list, head);
1617
1618         iommu_dma_get_resv_regions(dev, head);
1619 }
1620
1621 static struct iommu_ops arm_smmu_ops = {
1622         .capable                = arm_smmu_capable,
1623         .domain_alloc           = arm_smmu_domain_alloc,
1624         .domain_free            = arm_smmu_domain_free,
1625         .attach_dev             = arm_smmu_attach_dev,
1626         .map                    = arm_smmu_map,
1627         .unmap                  = arm_smmu_unmap,
1628         .flush_iotlb_all        = arm_smmu_flush_iotlb_all,
1629         .iotlb_sync             = arm_smmu_iotlb_sync,
1630         .iova_to_phys           = arm_smmu_iova_to_phys,
1631         .add_device             = arm_smmu_add_device,
1632         .remove_device          = arm_smmu_remove_device,
1633         .device_group           = arm_smmu_device_group,
1634         .domain_get_attr        = arm_smmu_domain_get_attr,
1635         .domain_set_attr        = arm_smmu_domain_set_attr,
1636         .of_xlate               = arm_smmu_of_xlate,
1637         .get_resv_regions       = arm_smmu_get_resv_regions,
1638         .put_resv_regions       = generic_iommu_put_resv_regions,
1639         .pgsize_bitmap          = -1UL, /* Restricted during device attach */
1640 };
1641
1642 static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1643 {
1644         int i;
1645         u32 reg;
1646
1647         /* clear global FSR */
1648         reg = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sGFSR);
1649         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sGFSR, reg);
1650
1651         /*
1652          * Reset stream mapping groups: Initial values mark all SMRn as
1653          * invalid and all S2CRn as bypass unless overridden.
1654          */
1655         for (i = 0; i < smmu->num_mapping_groups; ++i)
1656                 arm_smmu_write_sme(smmu, i);
1657
1658         /* Make sure all context banks are disabled and clear CB_FSR  */
1659         for (i = 0; i < smmu->num_context_banks; ++i) {
1660                 arm_smmu_write_context_bank(smmu, i);
1661                 arm_smmu_cb_write(smmu, i, ARM_SMMU_CB_FSR, ARM_SMMU_FSR_FAULT);
1662         }
1663
1664         /* Invalidate the TLB, just in case */
1665         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIALLH, QCOM_DUMMY_VAL);
1666         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_TLBIALLNSNH, QCOM_DUMMY_VAL);
1667
1668         reg = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_sCR0);
1669
1670         /* Enable fault reporting */
1671         reg |= (ARM_SMMU_sCR0_GFRE | ARM_SMMU_sCR0_GFIE |
1672                 ARM_SMMU_sCR0_GCFGFRE | ARM_SMMU_sCR0_GCFGFIE);
1673
1674         /* Disable TLB broadcasting. */
1675         reg |= (ARM_SMMU_sCR0_VMIDPNE | ARM_SMMU_sCR0_PTM);
1676
1677         /* Enable client access, handling unmatched streams as appropriate */
1678         reg &= ~ARM_SMMU_sCR0_CLIENTPD;
1679         if (disable_bypass)
1680                 reg |= ARM_SMMU_sCR0_USFCFG;
1681         else
1682                 reg &= ~ARM_SMMU_sCR0_USFCFG;
1683
1684         /* Disable forced broadcasting */
1685         reg &= ~ARM_SMMU_sCR0_FB;
1686
1687         /* Don't upgrade barriers */
1688         reg &= ~(ARM_SMMU_sCR0_BSU);
1689
1690         if (smmu->features & ARM_SMMU_FEAT_VMID16)
1691                 reg |= ARM_SMMU_sCR0_VMID16EN;
1692
1693         if (smmu->features & ARM_SMMU_FEAT_EXIDS)
1694                 reg |= ARM_SMMU_sCR0_EXIDENABLE;
1695
1696         if (smmu->impl && smmu->impl->reset)
1697                 smmu->impl->reset(smmu);
1698
1699         /* Push the button */
1700         arm_smmu_tlb_sync_global(smmu);
1701         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, reg);
1702 }
1703
1704 static int arm_smmu_id_size_to_bits(int size)
1705 {
1706         switch (size) {
1707         case 0:
1708                 return 32;
1709         case 1:
1710                 return 36;
1711         case 2:
1712                 return 40;
1713         case 3:
1714                 return 42;
1715         case 4:
1716                 return 44;
1717         case 5:
1718         default:
1719                 return 48;
1720         }
1721 }
1722
1723 static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1724 {
1725         unsigned int size;
1726         u32 id;
1727         bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1728         int i;
1729
1730         dev_notice(smmu->dev, "probing hardware configuration...\n");
1731         dev_notice(smmu->dev, "SMMUv%d with:\n",
1732                         smmu->version == ARM_SMMU_V2 ? 2 : 1);
1733
1734         /* ID0 */
1735         id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID0);
1736
1737         /* Restrict available stages based on module parameter */
1738         if (force_stage == 1)
1739                 id &= ~(ARM_SMMU_ID0_S2TS | ARM_SMMU_ID0_NTS);
1740         else if (force_stage == 2)
1741                 id &= ~(ARM_SMMU_ID0_S1TS | ARM_SMMU_ID0_NTS);
1742
1743         if (id & ARM_SMMU_ID0_S1TS) {
1744                 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1745                 dev_notice(smmu->dev, "\tstage 1 translation\n");
1746         }
1747
1748         if (id & ARM_SMMU_ID0_S2TS) {
1749                 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1750                 dev_notice(smmu->dev, "\tstage 2 translation\n");
1751         }
1752
1753         if (id & ARM_SMMU_ID0_NTS) {
1754                 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1755                 dev_notice(smmu->dev, "\tnested translation\n");
1756         }
1757
1758         if (!(smmu->features &
1759                 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1760                 dev_err(smmu->dev, "\tno translation support!\n");
1761                 return -ENODEV;
1762         }
1763
1764         if ((id & ARM_SMMU_ID0_S1TS) &&
1765             ((smmu->version < ARM_SMMU_V2) || !(id & ARM_SMMU_ID0_ATOSNS))) {
1766                 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1767                 dev_notice(smmu->dev, "\taddress translation ops\n");
1768         }
1769
1770         /*
1771          * In order for DMA API calls to work properly, we must defer to what
1772          * the FW says about coherency, regardless of what the hardware claims.
1773          * Fortunately, this also opens up a workaround for systems where the
1774          * ID register value has ended up configured incorrectly.
1775          */
1776         cttw_reg = !!(id & ARM_SMMU_ID0_CTTW);
1777         if (cttw_fw || cttw_reg)
1778                 dev_notice(smmu->dev, "\t%scoherent table walk\n",
1779                            cttw_fw ? "" : "non-");
1780         if (cttw_fw != cttw_reg)
1781                 dev_notice(smmu->dev,
1782                            "\t(IDR0.CTTW overridden by FW configuration)\n");
1783
1784         /* Max. number of entries we have for stream matching/indexing */
1785         if (smmu->version == ARM_SMMU_V2 && id & ARM_SMMU_ID0_EXIDS) {
1786                 smmu->features |= ARM_SMMU_FEAT_EXIDS;
1787                 size = 1 << 16;
1788         } else {
1789                 size = 1 << FIELD_GET(ARM_SMMU_ID0_NUMSIDB, id);
1790         }
1791         smmu->streamid_mask = size - 1;
1792         if (id & ARM_SMMU_ID0_SMS) {
1793                 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1794                 size = FIELD_GET(ARM_SMMU_ID0_NUMSMRG, id);
1795                 if (size == 0) {
1796                         dev_err(smmu->dev,
1797                                 "stream-matching supported, but no SMRs present!\n");
1798                         return -ENODEV;
1799                 }
1800
1801                 /* Zero-initialised to mark as invalid */
1802                 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
1803                                           GFP_KERNEL);
1804                 if (!smmu->smrs)
1805                         return -ENOMEM;
1806
1807                 dev_notice(smmu->dev,
1808                            "\tstream matching with %u register groups", size);
1809         }
1810         /* s2cr->type == 0 means translation, so initialise explicitly */
1811         smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
1812                                          GFP_KERNEL);
1813         if (!smmu->s2crs)
1814                 return -ENOMEM;
1815         for (i = 0; i < size; i++)
1816                 smmu->s2crs[i] = s2cr_init_val;
1817
1818         smmu->num_mapping_groups = size;
1819         mutex_init(&smmu->stream_map_mutex);
1820         spin_lock_init(&smmu->global_sync_lock);
1821
1822         if (smmu->version < ARM_SMMU_V2 ||
1823             !(id & ARM_SMMU_ID0_PTFS_NO_AARCH32)) {
1824                 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L;
1825                 if (!(id & ARM_SMMU_ID0_PTFS_NO_AARCH32S))
1826                         smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S;
1827         }
1828
1829         /* ID1 */
1830         id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID1);
1831         smmu->pgshift = (id & ARM_SMMU_ID1_PAGESIZE) ? 16 : 12;
1832
1833         /* Check for size mismatch of SMMU address space from mapped region */
1834         size = 1 << (FIELD_GET(ARM_SMMU_ID1_NUMPAGENDXB, id) + 1);
1835         if (smmu->numpage != 2 * size << smmu->pgshift)
1836                 dev_warn(smmu->dev,
1837                         "SMMU address space size (0x%x) differs from mapped region size (0x%x)!\n",
1838                         2 * size << smmu->pgshift, smmu->numpage);
1839         /* Now properly encode NUMPAGE to subsequently derive SMMU_CB_BASE */
1840         smmu->numpage = size;
1841
1842         smmu->num_s2_context_banks = FIELD_GET(ARM_SMMU_ID1_NUMS2CB, id);
1843         smmu->num_context_banks = FIELD_GET(ARM_SMMU_ID1_NUMCB, id);
1844         if (smmu->num_s2_context_banks > smmu->num_context_banks) {
1845                 dev_err(smmu->dev, "impossible number of S2 context banks!\n");
1846                 return -ENODEV;
1847         }
1848         dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1849                    smmu->num_context_banks, smmu->num_s2_context_banks);
1850         smmu->cbs = devm_kcalloc(smmu->dev, smmu->num_context_banks,
1851                                  sizeof(*smmu->cbs), GFP_KERNEL);
1852         if (!smmu->cbs)
1853                 return -ENOMEM;
1854
1855         /* ID2 */
1856         id = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_ID2);
1857         size = arm_smmu_id_size_to_bits(FIELD_GET(ARM_SMMU_ID2_IAS, id));
1858         smmu->ipa_size = size;
1859
1860         /* The output mask is also applied for bypass */
1861         size = arm_smmu_id_size_to_bits(FIELD_GET(ARM_SMMU_ID2_OAS, id));
1862         smmu->pa_size = size;
1863
1864         if (id & ARM_SMMU_ID2_VMID16)
1865                 smmu->features |= ARM_SMMU_FEAT_VMID16;
1866
1867         /*
1868          * What the page table walker can address actually depends on which
1869          * descriptor format is in use, but since a) we don't know that yet,
1870          * and b) it can vary per context bank, this will have to do...
1871          */
1872         if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1873                 dev_warn(smmu->dev,
1874                          "failed to set DMA mask for table walker\n");
1875
1876         if (smmu->version < ARM_SMMU_V2) {
1877                 smmu->va_size = smmu->ipa_size;
1878                 if (smmu->version == ARM_SMMU_V1_64K)
1879                         smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1880         } else {
1881                 size = FIELD_GET(ARM_SMMU_ID2_UBS, id);
1882                 smmu->va_size = arm_smmu_id_size_to_bits(size);
1883                 if (id & ARM_SMMU_ID2_PTFS_4K)
1884                         smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1885                 if (id & ARM_SMMU_ID2_PTFS_16K)
1886                         smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1887                 if (id & ARM_SMMU_ID2_PTFS_64K)
1888                         smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1889         }
1890
1891         /* Now we've corralled the various formats, what'll it do? */
1892         if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
1893                 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
1894         if (smmu->features &
1895             (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
1896                 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
1897         if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
1898                 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
1899         if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
1900                 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
1901
1902         if (arm_smmu_ops.pgsize_bitmap == -1UL)
1903                 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
1904         else
1905                 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
1906         dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
1907                    smmu->pgsize_bitmap);
1908
1909
1910         if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
1911                 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1912                            smmu->va_size, smmu->ipa_size);
1913
1914         if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
1915                 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
1916                            smmu->ipa_size, smmu->pa_size);
1917
1918         if (smmu->impl && smmu->impl->cfg_probe)
1919                 return smmu->impl->cfg_probe(smmu);
1920
1921         return 0;
1922 }
1923
1924 struct arm_smmu_match_data {
1925         enum arm_smmu_arch_version version;
1926         enum arm_smmu_implementation model;
1927 };
1928
1929 #define ARM_SMMU_MATCH_DATA(name, ver, imp)     \
1930 static const struct arm_smmu_match_data name = { .version = ver, .model = imp }
1931
1932 ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
1933 ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
1934 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1935 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1936 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1937 ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2);
1938
1939 static const struct of_device_id arm_smmu_of_match[] = {
1940         { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
1941         { .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
1942         { .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
1943         { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
1944         { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
1945         { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
1946         { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
1947         { },
1948 };
1949 MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
1950
1951 #ifdef CONFIG_ACPI
1952 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
1953 {
1954         int ret = 0;
1955
1956         switch (model) {
1957         case ACPI_IORT_SMMU_V1:
1958         case ACPI_IORT_SMMU_CORELINK_MMU400:
1959                 smmu->version = ARM_SMMU_V1;
1960                 smmu->model = GENERIC_SMMU;
1961                 break;
1962         case ACPI_IORT_SMMU_CORELINK_MMU401:
1963                 smmu->version = ARM_SMMU_V1_64K;
1964                 smmu->model = GENERIC_SMMU;
1965                 break;
1966         case ACPI_IORT_SMMU_V2:
1967                 smmu->version = ARM_SMMU_V2;
1968                 smmu->model = GENERIC_SMMU;
1969                 break;
1970         case ACPI_IORT_SMMU_CORELINK_MMU500:
1971                 smmu->version = ARM_SMMU_V2;
1972                 smmu->model = ARM_MMU500;
1973                 break;
1974         case ACPI_IORT_SMMU_CAVIUM_THUNDERX:
1975                 smmu->version = ARM_SMMU_V2;
1976                 smmu->model = CAVIUM_SMMUV2;
1977                 break;
1978         default:
1979                 ret = -ENODEV;
1980         }
1981
1982         return ret;
1983 }
1984
1985 static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
1986                                       struct arm_smmu_device *smmu)
1987 {
1988         struct device *dev = smmu->dev;
1989         struct acpi_iort_node *node =
1990                 *(struct acpi_iort_node **)dev_get_platdata(dev);
1991         struct acpi_iort_smmu *iort_smmu;
1992         int ret;
1993
1994         /* Retrieve SMMU1/2 specific data */
1995         iort_smmu = (struct acpi_iort_smmu *)node->node_data;
1996
1997         ret = acpi_smmu_get_data(iort_smmu->model, smmu);
1998         if (ret < 0)
1999                 return ret;
2000
2001         /* Ignore the configuration access interrupt */
2002         smmu->num_global_irqs = 1;
2003
2004         if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK)
2005                 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2006
2007         return 0;
2008 }
2009 #else
2010 static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2011                                              struct arm_smmu_device *smmu)
2012 {
2013         return -ENODEV;
2014 }
2015 #endif
2016
2017 static int arm_smmu_device_dt_probe(struct platform_device *pdev,
2018                                     struct arm_smmu_device *smmu)
2019 {
2020         const struct arm_smmu_match_data *data;
2021         struct device *dev = &pdev->dev;
2022         bool legacy_binding;
2023
2024         if (of_property_read_u32(dev->of_node, "#global-interrupts",
2025                                  &smmu->num_global_irqs)) {
2026                 dev_err(dev, "missing #global-interrupts property\n");
2027                 return -ENODEV;
2028         }
2029
2030         data = of_device_get_match_data(dev);
2031         smmu->version = data->version;
2032         smmu->model = data->model;
2033
2034         legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
2035         if (legacy_binding && !using_generic_binding) {
2036                 if (!using_legacy_binding) {
2037                         pr_notice("deprecated \"mmu-masters\" DT property in use; %s support unavailable\n",
2038                                   IS_ENABLED(CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS) ? "DMA API" : "SMMU");
2039                 }
2040                 using_legacy_binding = true;
2041         } else if (!legacy_binding && !using_legacy_binding) {
2042                 using_generic_binding = true;
2043         } else {
2044                 dev_err(dev, "not probing due to mismatched DT properties\n");
2045                 return -ENODEV;
2046         }
2047
2048         if (of_dma_is_coherent(dev->of_node))
2049                 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2050
2051         return 0;
2052 }
2053
2054 static int arm_smmu_bus_init(struct iommu_ops *ops)
2055 {
2056         int err;
2057
2058         /* Oh, for a proper bus abstraction */
2059         if (!iommu_present(&platform_bus_type)) {
2060                 err = bus_set_iommu(&platform_bus_type, ops);
2061                 if (err)
2062                         return err;
2063         }
2064 #ifdef CONFIG_ARM_AMBA
2065         if (!iommu_present(&amba_bustype)) {
2066                 err = bus_set_iommu(&amba_bustype, ops);
2067                 if (err)
2068                         goto err_reset_platform_ops;
2069         }
2070 #endif
2071 #ifdef CONFIG_PCI
2072         if (!iommu_present(&pci_bus_type)) {
2073                 err = bus_set_iommu(&pci_bus_type, ops);
2074                 if (err)
2075                         goto err_reset_amba_ops;
2076         }
2077 #endif
2078 #ifdef CONFIG_FSL_MC_BUS
2079         if (!iommu_present(&fsl_mc_bus_type)) {
2080                 err = bus_set_iommu(&fsl_mc_bus_type, ops);
2081                 if (err)
2082                         goto err_reset_pci_ops;
2083         }
2084 #endif
2085         return 0;
2086
2087 err_reset_pci_ops: __maybe_unused;
2088 #ifdef CONFIG_PCI
2089         bus_set_iommu(&pci_bus_type, NULL);
2090 #endif
2091 err_reset_amba_ops: __maybe_unused;
2092 #ifdef CONFIG_ARM_AMBA
2093         bus_set_iommu(&amba_bustype, NULL);
2094 #endif
2095 err_reset_platform_ops: __maybe_unused;
2096         bus_set_iommu(&platform_bus_type, NULL);
2097         return err;
2098 }
2099
2100 static int arm_smmu_device_probe(struct platform_device *pdev)
2101 {
2102         struct resource *res;
2103         resource_size_t ioaddr;
2104         struct arm_smmu_device *smmu;
2105         struct device *dev = &pdev->dev;
2106         int num_irqs, i, err;
2107
2108         smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
2109         if (!smmu) {
2110                 dev_err(dev, "failed to allocate arm_smmu_device\n");
2111                 return -ENOMEM;
2112         }
2113         smmu->dev = dev;
2114
2115         if (dev->of_node)
2116                 err = arm_smmu_device_dt_probe(pdev, smmu);
2117         else
2118                 err = arm_smmu_device_acpi_probe(pdev, smmu);
2119
2120         if (err)
2121                 return err;
2122
2123         smmu = arm_smmu_impl_init(smmu);
2124         if (IS_ERR(smmu))
2125                 return PTR_ERR(smmu);
2126
2127         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2128         ioaddr = res->start;
2129         smmu->base = devm_ioremap_resource(dev, res);
2130         if (IS_ERR(smmu->base))
2131                 return PTR_ERR(smmu->base);
2132         /*
2133          * The resource size should effectively match the value of SMMU_TOP;
2134          * stash that temporarily until we know PAGESIZE to validate it with.
2135          */
2136         smmu->numpage = resource_size(res);
2137
2138         num_irqs = 0;
2139         while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
2140                 num_irqs++;
2141                 if (num_irqs > smmu->num_global_irqs)
2142                         smmu->num_context_irqs++;
2143         }
2144
2145         if (!smmu->num_context_irqs) {
2146                 dev_err(dev, "found %d interrupts but expected at least %d\n",
2147                         num_irqs, smmu->num_global_irqs + 1);
2148                 return -ENODEV;
2149         }
2150
2151         smmu->irqs = devm_kcalloc(dev, num_irqs, sizeof(*smmu->irqs),
2152                                   GFP_KERNEL);
2153         if (!smmu->irqs) {
2154                 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
2155                 return -ENOMEM;
2156         }
2157
2158         for (i = 0; i < num_irqs; ++i) {
2159                 int irq = platform_get_irq(pdev, i);
2160
2161                 if (irq < 0)
2162                         return -ENODEV;
2163                 smmu->irqs[i] = irq;
2164         }
2165
2166         err = devm_clk_bulk_get_all(dev, &smmu->clks);
2167         if (err < 0) {
2168                 dev_err(dev, "failed to get clocks %d\n", err);
2169                 return err;
2170         }
2171         smmu->num_clks = err;
2172
2173         err = clk_bulk_prepare_enable(smmu->num_clks, smmu->clks);
2174         if (err)
2175                 return err;
2176
2177         err = arm_smmu_device_cfg_probe(smmu);
2178         if (err)
2179                 return err;
2180
2181         if (smmu->version == ARM_SMMU_V2) {
2182                 if (smmu->num_context_banks > smmu->num_context_irqs) {
2183                         dev_err(dev,
2184                               "found only %d context irq(s) but %d required\n",
2185                               smmu->num_context_irqs, smmu->num_context_banks);
2186                         return -ENODEV;
2187                 }
2188
2189                 /* Ignore superfluous interrupts */
2190                 smmu->num_context_irqs = smmu->num_context_banks;
2191         }
2192
2193         for (i = 0; i < smmu->num_global_irqs; ++i) {
2194                 err = devm_request_irq(smmu->dev, smmu->irqs[i],
2195                                        arm_smmu_global_fault,
2196                                        IRQF_SHARED,
2197                                        "arm-smmu global fault",
2198                                        smmu);
2199                 if (err) {
2200                         dev_err(dev, "failed to request global IRQ %d (%u)\n",
2201                                 i, smmu->irqs[i]);
2202                         return err;
2203                 }
2204         }
2205
2206         err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL,
2207                                      "smmu.%pa", &ioaddr);
2208         if (err) {
2209                 dev_err(dev, "Failed to register iommu in sysfs\n");
2210                 return err;
2211         }
2212
2213         iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
2214         iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);
2215
2216         err = iommu_device_register(&smmu->iommu);
2217         if (err) {
2218                 dev_err(dev, "Failed to register iommu\n");
2219                 return err;
2220         }
2221
2222         platform_set_drvdata(pdev, smmu);
2223         arm_smmu_device_reset(smmu);
2224         arm_smmu_test_smr_masks(smmu);
2225
2226         /*
2227          * We want to avoid touching dev->power.lock in fastpaths unless
2228          * it's really going to do something useful - pm_runtime_enabled()
2229          * can serve as an ideal proxy for that decision. So, conditionally
2230          * enable pm_runtime.
2231          */
2232         if (dev->pm_domain) {
2233                 pm_runtime_set_active(dev);
2234                 pm_runtime_enable(dev);
2235         }
2236
2237         /*
2238          * For ACPI and generic DT bindings, an SMMU will be probed before
2239          * any device which might need it, so we want the bus ops in place
2240          * ready to handle default domain setup as soon as any SMMU exists.
2241          */
2242         if (!using_legacy_binding)
2243                 return arm_smmu_bus_init(&arm_smmu_ops);
2244
2245         return 0;
2246 }
2247
2248 static int arm_smmu_device_remove(struct platform_device *pdev)
2249 {
2250         struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2251
2252         if (!smmu)
2253                 return -ENODEV;
2254
2255         if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2256                 dev_err(&pdev->dev, "removing device with active domains!\n");
2257
2258         arm_smmu_bus_init(NULL);
2259         iommu_device_unregister(&smmu->iommu);
2260         iommu_device_sysfs_remove(&smmu->iommu);
2261
2262         arm_smmu_rpm_get(smmu);
2263         /* Turn the thing off */
2264         arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, ARM_SMMU_sCR0_CLIENTPD);
2265         arm_smmu_rpm_put(smmu);
2266
2267         if (pm_runtime_enabled(smmu->dev))
2268                 pm_runtime_force_suspend(smmu->dev);
2269         else
2270                 clk_bulk_disable(smmu->num_clks, smmu->clks);
2271
2272         clk_bulk_unprepare(smmu->num_clks, smmu->clks);
2273         return 0;
2274 }
2275
2276 static void arm_smmu_device_shutdown(struct platform_device *pdev)
2277 {
2278         arm_smmu_device_remove(pdev);
2279 }
2280
2281 static int __maybe_unused arm_smmu_runtime_resume(struct device *dev)
2282 {
2283         struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2284         int ret;
2285
2286         ret = clk_bulk_enable(smmu->num_clks, smmu->clks);
2287         if (ret)
2288                 return ret;
2289
2290         arm_smmu_device_reset(smmu);
2291
2292         return 0;
2293 }
2294
2295 static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev)
2296 {
2297         struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2298
2299         clk_bulk_disable(smmu->num_clks, smmu->clks);
2300
2301         return 0;
2302 }
2303
2304 static int __maybe_unused arm_smmu_pm_resume(struct device *dev)
2305 {
2306         if (pm_runtime_suspended(dev))
2307                 return 0;
2308
2309         return arm_smmu_runtime_resume(dev);
2310 }
2311
2312 static int __maybe_unused arm_smmu_pm_suspend(struct device *dev)
2313 {
2314         if (pm_runtime_suspended(dev))
2315                 return 0;
2316
2317         return arm_smmu_runtime_suspend(dev);
2318 }
2319
2320 static const struct dev_pm_ops arm_smmu_pm_ops = {
2321         SET_SYSTEM_SLEEP_PM_OPS(arm_smmu_pm_suspend, arm_smmu_pm_resume)
2322         SET_RUNTIME_PM_OPS(arm_smmu_runtime_suspend,
2323                            arm_smmu_runtime_resume, NULL)
2324 };
2325
2326 static struct platform_driver arm_smmu_driver = {
2327         .driver = {
2328                 .name                   = "arm-smmu",
2329                 .of_match_table         = arm_smmu_of_match,
2330                 .pm                     = &arm_smmu_pm_ops,
2331                 .suppress_bind_attrs    = true,
2332         },
2333         .probe  = arm_smmu_device_probe,
2334         .remove = arm_smmu_device_remove,
2335         .shutdown = arm_smmu_device_shutdown,
2336 };
2337 module_platform_driver(arm_smmu_driver);
2338
2339 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
2340 MODULE_AUTHOR("Will Deacon <will@kernel.org>");
2341 MODULE_ALIAS("platform:arm-smmu");
2342 MODULE_LICENSE("GPL v2");