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