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