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