2 * IOMMU API for ARM architected SMMU implementations.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 * Copyright (C) 2013 ARM Limited
19 * Author: Will Deacon <will.deacon@arm.com>
21 * This driver currently supports:
22 * - SMMUv1 and v2 implementations
23 * - Stream-matching and stream-indexing
24 * - v7/v8 long-descriptor format
25 * - Non-secure access to the SMMU
26 * - Context fault reporting
29 #define pr_fmt(fmt) "arm-smmu: " fmt
31 #include <linux/atomic.h>
32 #include <linux/delay.h>
33 #include <linux/dma-iommu.h>
34 #include <linux/dma-mapping.h>
35 #include <linux/err.h>
36 #include <linux/interrupt.h>
38 #include <linux/io-64-nonatomic-hi-lo.h>
39 #include <linux/iommu.h>
40 #include <linux/iopoll.h>
41 #include <linux/module.h>
43 #include <linux/of_address.h>
44 #include <linux/of_device.h>
45 #include <linux/of_iommu.h>
46 #include <linux/pci.h>
47 #include <linux/platform_device.h>
48 #include <linux/slab.h>
49 #include <linux/spinlock.h>
51 #include <linux/amba/bus.h>
53 #include "io-pgtable.h"
55 /* Maximum number of context banks per SMMU */
56 #define ARM_SMMU_MAX_CBS 128
58 /* SMMU global address space */
59 #define ARM_SMMU_GR0(smmu) ((smmu)->base)
60 #define ARM_SMMU_GR1(smmu) ((smmu)->base + (1 << (smmu)->pgshift))
63 * SMMU global address space with conditional offset to access secure
64 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
67 #define ARM_SMMU_GR0_NS(smmu) \
69 ((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS) \
73 * Some 64-bit registers only make sense to write atomically, but in such
74 * cases all the data relevant to AArch32 formats lies within the lower word,
75 * therefore this actually makes more sense than it might first appear.
78 #define smmu_write_atomic_lq writeq_relaxed
80 #define smmu_write_atomic_lq writel_relaxed
83 /* Configuration registers */
84 #define ARM_SMMU_GR0_sCR0 0x0
85 #define sCR0_CLIENTPD (1 << 0)
86 #define sCR0_GFRE (1 << 1)
87 #define sCR0_GFIE (1 << 2)
88 #define sCR0_GCFGFRE (1 << 4)
89 #define sCR0_GCFGFIE (1 << 5)
90 #define sCR0_USFCFG (1 << 10)
91 #define sCR0_VMIDPNE (1 << 11)
92 #define sCR0_PTM (1 << 12)
93 #define sCR0_FB (1 << 13)
94 #define sCR0_VMID16EN (1 << 31)
95 #define sCR0_BSU_SHIFT 14
96 #define sCR0_BSU_MASK 0x3
98 /* Auxiliary Configuration register */
99 #define ARM_SMMU_GR0_sACR 0x10
101 /* Identification registers */
102 #define ARM_SMMU_GR0_ID0 0x20
103 #define ARM_SMMU_GR0_ID1 0x24
104 #define ARM_SMMU_GR0_ID2 0x28
105 #define ARM_SMMU_GR0_ID3 0x2c
106 #define ARM_SMMU_GR0_ID4 0x30
107 #define ARM_SMMU_GR0_ID5 0x34
108 #define ARM_SMMU_GR0_ID6 0x38
109 #define ARM_SMMU_GR0_ID7 0x3c
110 #define ARM_SMMU_GR0_sGFSR 0x48
111 #define ARM_SMMU_GR0_sGFSYNR0 0x50
112 #define ARM_SMMU_GR0_sGFSYNR1 0x54
113 #define ARM_SMMU_GR0_sGFSYNR2 0x58
115 #define ID0_S1TS (1 << 30)
116 #define ID0_S2TS (1 << 29)
117 #define ID0_NTS (1 << 28)
118 #define ID0_SMS (1 << 27)
119 #define ID0_ATOSNS (1 << 26)
120 #define ID0_PTFS_NO_AARCH32 (1 << 25)
121 #define ID0_PTFS_NO_AARCH32S (1 << 24)
122 #define ID0_CTTW (1 << 14)
123 #define ID0_NUMIRPT_SHIFT 16
124 #define ID0_NUMIRPT_MASK 0xff
125 #define ID0_NUMSIDB_SHIFT 9
126 #define ID0_NUMSIDB_MASK 0xf
127 #define ID0_NUMSMRG_SHIFT 0
128 #define ID0_NUMSMRG_MASK 0xff
130 #define ID1_PAGESIZE (1 << 31)
131 #define ID1_NUMPAGENDXB_SHIFT 28
132 #define ID1_NUMPAGENDXB_MASK 7
133 #define ID1_NUMS2CB_SHIFT 16
134 #define ID1_NUMS2CB_MASK 0xff
135 #define ID1_NUMCB_SHIFT 0
136 #define ID1_NUMCB_MASK 0xff
138 #define ID2_OAS_SHIFT 4
139 #define ID2_OAS_MASK 0xf
140 #define ID2_IAS_SHIFT 0
141 #define ID2_IAS_MASK 0xf
142 #define ID2_UBS_SHIFT 8
143 #define ID2_UBS_MASK 0xf
144 #define ID2_PTFS_4K (1 << 12)
145 #define ID2_PTFS_16K (1 << 13)
146 #define ID2_PTFS_64K (1 << 14)
147 #define ID2_VMID16 (1 << 15)
149 #define ID7_MAJOR_SHIFT 4
150 #define ID7_MAJOR_MASK 0xf
152 /* Global TLB invalidation */
153 #define ARM_SMMU_GR0_TLBIVMID 0x64
154 #define ARM_SMMU_GR0_TLBIALLNSNH 0x68
155 #define ARM_SMMU_GR0_TLBIALLH 0x6c
156 #define ARM_SMMU_GR0_sTLBGSYNC 0x70
157 #define ARM_SMMU_GR0_sTLBGSTATUS 0x74
158 #define sTLBGSTATUS_GSACTIVE (1 << 0)
159 #define TLB_LOOP_TIMEOUT 1000000 /* 1s! */
161 /* Stream mapping registers */
162 #define ARM_SMMU_GR0_SMR(n) (0x800 + ((n) << 2))
163 #define SMR_VALID (1 << 31)
164 #define SMR_MASK_SHIFT 16
165 #define SMR_ID_SHIFT 0
167 #define ARM_SMMU_GR0_S2CR(n) (0xc00 + ((n) << 2))
168 #define S2CR_CBNDX_SHIFT 0
169 #define S2CR_CBNDX_MASK 0xff
170 #define S2CR_TYPE_SHIFT 16
171 #define S2CR_TYPE_MASK 0x3
172 enum arm_smmu_s2cr_type {
178 #define S2CR_PRIVCFG_SHIFT 24
179 #define S2CR_PRIVCFG_MASK 0x3
180 enum arm_smmu_s2cr_privcfg {
181 S2CR_PRIVCFG_DEFAULT,
187 /* Context bank attribute registers */
188 #define ARM_SMMU_GR1_CBAR(n) (0x0 + ((n) << 2))
189 #define CBAR_VMID_SHIFT 0
190 #define CBAR_VMID_MASK 0xff
191 #define CBAR_S1_BPSHCFG_SHIFT 8
192 #define CBAR_S1_BPSHCFG_MASK 3
193 #define CBAR_S1_BPSHCFG_NSH 3
194 #define CBAR_S1_MEMATTR_SHIFT 12
195 #define CBAR_S1_MEMATTR_MASK 0xf
196 #define CBAR_S1_MEMATTR_WB 0xf
197 #define CBAR_TYPE_SHIFT 16
198 #define CBAR_TYPE_MASK 0x3
199 #define CBAR_TYPE_S2_TRANS (0 << CBAR_TYPE_SHIFT)
200 #define CBAR_TYPE_S1_TRANS_S2_BYPASS (1 << CBAR_TYPE_SHIFT)
201 #define CBAR_TYPE_S1_TRANS_S2_FAULT (2 << CBAR_TYPE_SHIFT)
202 #define CBAR_TYPE_S1_TRANS_S2_TRANS (3 << CBAR_TYPE_SHIFT)
203 #define CBAR_IRPTNDX_SHIFT 24
204 #define CBAR_IRPTNDX_MASK 0xff
206 #define ARM_SMMU_GR1_CBA2R(n) (0x800 + ((n) << 2))
207 #define CBA2R_RW64_32BIT (0 << 0)
208 #define CBA2R_RW64_64BIT (1 << 0)
209 #define CBA2R_VMID_SHIFT 16
210 #define CBA2R_VMID_MASK 0xffff
212 /* Translation context bank */
213 #define ARM_SMMU_CB_BASE(smmu) ((smmu)->base + ((smmu)->size >> 1))
214 #define ARM_SMMU_CB(smmu, n) ((n) * (1 << (smmu)->pgshift))
216 #define ARM_SMMU_CB_SCTLR 0x0
217 #define ARM_SMMU_CB_ACTLR 0x4
218 #define ARM_SMMU_CB_RESUME 0x8
219 #define ARM_SMMU_CB_TTBCR2 0x10
220 #define ARM_SMMU_CB_TTBR0 0x20
221 #define ARM_SMMU_CB_TTBR1 0x28
222 #define ARM_SMMU_CB_TTBCR 0x30
223 #define ARM_SMMU_CB_CONTEXTIDR 0x34
224 #define ARM_SMMU_CB_S1_MAIR0 0x38
225 #define ARM_SMMU_CB_S1_MAIR1 0x3c
226 #define ARM_SMMU_CB_PAR 0x50
227 #define ARM_SMMU_CB_FSR 0x58
228 #define ARM_SMMU_CB_FAR 0x60
229 #define ARM_SMMU_CB_FSYNR0 0x68
230 #define ARM_SMMU_CB_S1_TLBIVA 0x600
231 #define ARM_SMMU_CB_S1_TLBIASID 0x610
232 #define ARM_SMMU_CB_S1_TLBIVAL 0x620
233 #define ARM_SMMU_CB_S2_TLBIIPAS2 0x630
234 #define ARM_SMMU_CB_S2_TLBIIPAS2L 0x638
235 #define ARM_SMMU_CB_ATS1PR 0x800
236 #define ARM_SMMU_CB_ATSR 0x8f0
238 #define SCTLR_S1_ASIDPNE (1 << 12)
239 #define SCTLR_CFCFG (1 << 7)
240 #define SCTLR_CFIE (1 << 6)
241 #define SCTLR_CFRE (1 << 5)
242 #define SCTLR_E (1 << 4)
243 #define SCTLR_AFE (1 << 2)
244 #define SCTLR_TRE (1 << 1)
245 #define SCTLR_M (1 << 0)
247 #define ARM_MMU500_ACTLR_CPRE (1 << 1)
249 #define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
251 #define CB_PAR_F (1 << 0)
253 #define ATSR_ACTIVE (1 << 0)
255 #define RESUME_RETRY (0 << 0)
256 #define RESUME_TERMINATE (1 << 0)
258 #define TTBCR2_SEP_SHIFT 15
259 #define TTBCR2_SEP_UPSTREAM (0x7 << TTBCR2_SEP_SHIFT)
261 #define TTBRn_ASID_SHIFT 48
263 #define FSR_MULTI (1 << 31)
264 #define FSR_SS (1 << 30)
265 #define FSR_UUT (1 << 8)
266 #define FSR_ASF (1 << 7)
267 #define FSR_TLBLKF (1 << 6)
268 #define FSR_TLBMCF (1 << 5)
269 #define FSR_EF (1 << 4)
270 #define FSR_PF (1 << 3)
271 #define FSR_AFF (1 << 2)
272 #define FSR_TF (1 << 1)
274 #define FSR_IGN (FSR_AFF | FSR_ASF | \
275 FSR_TLBMCF | FSR_TLBLKF)
276 #define FSR_FAULT (FSR_MULTI | FSR_SS | FSR_UUT | \
277 FSR_EF | FSR_PF | FSR_TF | FSR_IGN)
279 #define FSYNR0_WNR (1 << 4)
281 static int force_stage;
282 module_param(force_stage, int, S_IRUGO);
283 MODULE_PARM_DESC(force_stage,
284 "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.");
285 static bool disable_bypass;
286 module_param(disable_bypass, bool, S_IRUGO);
287 MODULE_PARM_DESC(disable_bypass,
288 "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.");
290 enum arm_smmu_arch_version {
296 enum arm_smmu_implementation {
302 struct arm_smmu_s2cr {
303 struct iommu_group *group;
305 enum arm_smmu_s2cr_type type;
306 enum arm_smmu_s2cr_privcfg privcfg;
310 #define s2cr_init_val (struct arm_smmu_s2cr){ \
311 .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS, \
314 struct arm_smmu_smr {
320 struct arm_smmu_master_cfg {
321 struct arm_smmu_device *smmu;
324 #define INVALID_SMENDX -1
325 #define __fwspec_cfg(fw) ((struct arm_smmu_master_cfg *)fw->iommu_priv)
326 #define fwspec_smmu(fw) (__fwspec_cfg(fw)->smmu)
327 #define for_each_cfg_sme(fw, i, idx) \
328 for (i = 0; idx = __fwspec_cfg(fw)->smendx[i], i < fw->num_ids; ++i)
330 struct arm_smmu_device {
335 unsigned long pgshift;
337 #define ARM_SMMU_FEAT_COHERENT_WALK (1 << 0)
338 #define ARM_SMMU_FEAT_STREAM_MATCH (1 << 1)
339 #define ARM_SMMU_FEAT_TRANS_S1 (1 << 2)
340 #define ARM_SMMU_FEAT_TRANS_S2 (1 << 3)
341 #define ARM_SMMU_FEAT_TRANS_NESTED (1 << 4)
342 #define ARM_SMMU_FEAT_TRANS_OPS (1 << 5)
343 #define ARM_SMMU_FEAT_VMID16 (1 << 6)
344 #define ARM_SMMU_FEAT_FMT_AARCH64_4K (1 << 7)
345 #define ARM_SMMU_FEAT_FMT_AARCH64_16K (1 << 8)
346 #define ARM_SMMU_FEAT_FMT_AARCH64_64K (1 << 9)
347 #define ARM_SMMU_FEAT_FMT_AARCH32_L (1 << 10)
348 #define ARM_SMMU_FEAT_FMT_AARCH32_S (1 << 11)
351 #define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
353 enum arm_smmu_arch_version version;
354 enum arm_smmu_implementation model;
356 u32 num_context_banks;
357 u32 num_s2_context_banks;
358 DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
361 u32 num_mapping_groups;
364 struct arm_smmu_smr *smrs;
365 struct arm_smmu_s2cr *s2crs;
366 struct mutex stream_map_mutex;
368 unsigned long va_size;
369 unsigned long ipa_size;
370 unsigned long pa_size;
371 unsigned long pgsize_bitmap;
374 u32 num_context_irqs;
377 u32 cavium_id_base; /* Specific to Cavium */
380 enum arm_smmu_context_fmt {
381 ARM_SMMU_CTX_FMT_NONE,
382 ARM_SMMU_CTX_FMT_AARCH64,
383 ARM_SMMU_CTX_FMT_AARCH32_L,
384 ARM_SMMU_CTX_FMT_AARCH32_S,
387 struct arm_smmu_cfg {
391 enum arm_smmu_context_fmt fmt;
393 #define INVALID_IRPTNDX 0xff
395 #define ARM_SMMU_CB_ASID(smmu, cfg) ((u16)(smmu)->cavium_id_base + (cfg)->cbndx)
396 #define ARM_SMMU_CB_VMID(smmu, cfg) ((u16)(smmu)->cavium_id_base + (cfg)->cbndx + 1)
398 enum arm_smmu_domain_stage {
399 ARM_SMMU_DOMAIN_S1 = 0,
401 ARM_SMMU_DOMAIN_NESTED,
404 struct arm_smmu_domain {
405 struct arm_smmu_device *smmu;
406 struct io_pgtable_ops *pgtbl_ops;
407 spinlock_t pgtbl_lock;
408 struct arm_smmu_cfg cfg;
409 enum arm_smmu_domain_stage stage;
410 struct mutex init_mutex; /* Protects smmu pointer */
411 struct iommu_domain domain;
414 struct arm_smmu_option_prop {
419 static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);
421 static bool using_legacy_binding, using_generic_binding;
423 static struct arm_smmu_option_prop arm_smmu_options[] = {
424 { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
428 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
430 return container_of(dom, struct arm_smmu_domain, domain);
433 static void parse_driver_options(struct arm_smmu_device *smmu)
438 if (of_property_read_bool(smmu->dev->of_node,
439 arm_smmu_options[i].prop)) {
440 smmu->options |= arm_smmu_options[i].opt;
441 dev_notice(smmu->dev, "option %s\n",
442 arm_smmu_options[i].prop);
444 } while (arm_smmu_options[++i].opt);
447 static struct device_node *dev_get_dev_node(struct device *dev)
449 if (dev_is_pci(dev)) {
450 struct pci_bus *bus = to_pci_dev(dev)->bus;
452 while (!pci_is_root_bus(bus))
454 return of_node_get(bus->bridge->parent->of_node);
457 return of_node_get(dev->of_node);
460 static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
462 *((__be32 *)data) = cpu_to_be32(alias);
463 return 0; /* Continue walking */
466 static int __find_legacy_master_phandle(struct device *dev, void *data)
468 struct of_phandle_iterator *it = *(void **)data;
469 struct device_node *np = it->node;
472 of_for_each_phandle(it, err, dev->of_node, "mmu-masters",
473 "#stream-id-cells", 0)
474 if (it->node == np) {
475 *(void **)data = dev;
479 return err == -ENOENT ? 0 : err;
482 static struct platform_driver arm_smmu_driver;
483 static struct iommu_ops arm_smmu_ops;
485 static int arm_smmu_register_legacy_master(struct device *dev,
486 struct arm_smmu_device **smmu)
488 struct device *smmu_dev;
489 struct device_node *np;
490 struct of_phandle_iterator it;
496 np = dev_get_dev_node(dev);
497 if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
503 err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
504 __find_legacy_master_phandle);
512 if (dev_is_pci(dev)) {
513 /* "mmu-masters" assumes Stream ID == Requester ID */
514 pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid,
520 err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
525 sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
529 *smmu = dev_get_drvdata(smmu_dev);
530 of_phandle_iterator_args(&it, sids, it.cur_count);
531 err = iommu_fwspec_add_ids(dev, sids, it.cur_count);
536 static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
541 idx = find_next_zero_bit(map, end, start);
544 } while (test_and_set_bit(idx, map));
549 static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
554 /* Wait for any pending TLB invalidations to complete */
555 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu)
558 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
560 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_sTLBGSYNC);
561 while (readl_relaxed(gr0_base + ARM_SMMU_GR0_sTLBGSTATUS)
562 & sTLBGSTATUS_GSACTIVE) {
564 if (++count == TLB_LOOP_TIMEOUT) {
565 dev_err_ratelimited(smmu->dev,
566 "TLB sync timed out -- SMMU may be deadlocked\n");
573 static void arm_smmu_tlb_sync(void *cookie)
575 struct arm_smmu_domain *smmu_domain = cookie;
576 __arm_smmu_tlb_sync(smmu_domain->smmu);
579 static void arm_smmu_tlb_inv_context(void *cookie)
581 struct arm_smmu_domain *smmu_domain = cookie;
582 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
583 struct arm_smmu_device *smmu = smmu_domain->smmu;
584 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
588 base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
589 writel_relaxed(ARM_SMMU_CB_ASID(smmu, cfg),
590 base + ARM_SMMU_CB_S1_TLBIASID);
592 base = ARM_SMMU_GR0(smmu);
593 writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg),
594 base + ARM_SMMU_GR0_TLBIVMID);
597 __arm_smmu_tlb_sync(smmu);
600 static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
601 size_t granule, bool leaf, void *cookie)
603 struct arm_smmu_domain *smmu_domain = cookie;
604 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
605 struct arm_smmu_device *smmu = smmu_domain->smmu;
606 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
610 reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
611 reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
613 if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
615 iova |= ARM_SMMU_CB_ASID(smmu, cfg);
617 writel_relaxed(iova, reg);
619 } while (size -= granule);
622 iova |= (u64)ARM_SMMU_CB_ASID(smmu, cfg) << 48;
624 writeq_relaxed(iova, reg);
625 iova += granule >> 12;
626 } while (size -= granule);
628 } else if (smmu->version == ARM_SMMU_V2) {
629 reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
630 reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
631 ARM_SMMU_CB_S2_TLBIIPAS2;
634 smmu_write_atomic_lq(iova, reg);
635 iova += granule >> 12;
636 } while (size -= granule);
638 reg = ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_TLBIVMID;
639 writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg), reg);
643 static struct iommu_gather_ops arm_smmu_gather_ops = {
644 .tlb_flush_all = arm_smmu_tlb_inv_context,
645 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
646 .tlb_sync = arm_smmu_tlb_sync,
649 static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
653 struct iommu_domain *domain = dev;
654 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
655 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
656 struct arm_smmu_device *smmu = smmu_domain->smmu;
657 void __iomem *cb_base;
659 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
660 fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);
662 if (!(fsr & FSR_FAULT))
665 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
666 iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
668 dev_err_ratelimited(smmu->dev,
669 "Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cb=%d\n",
670 fsr, iova, fsynr, cfg->cbndx);
672 writel(fsr, cb_base + ARM_SMMU_CB_FSR);
676 static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
678 u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
679 struct arm_smmu_device *smmu = dev;
680 void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
682 gfsr = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSR);
683 gfsynr0 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR0);
684 gfsynr1 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR1);
685 gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2);
690 dev_err_ratelimited(smmu->dev,
691 "Unexpected global fault, this could be serious\n");
692 dev_err_ratelimited(smmu->dev,
693 "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
694 gfsr, gfsynr0, gfsynr1, gfsynr2);
696 writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
700 static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
701 struct io_pgtable_cfg *pgtbl_cfg)
706 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
707 struct arm_smmu_device *smmu = smmu_domain->smmu;
708 void __iomem *cb_base, *gr1_base;
710 gr1_base = ARM_SMMU_GR1(smmu);
711 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
712 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
714 if (smmu->version > ARM_SMMU_V1) {
715 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
716 reg = CBA2R_RW64_64BIT;
718 reg = CBA2R_RW64_32BIT;
719 /* 16-bit VMIDs live in CBA2R */
720 if (smmu->features & ARM_SMMU_FEAT_VMID16)
721 reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBA2R_VMID_SHIFT;
723 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(cfg->cbndx));
728 if (smmu->version < ARM_SMMU_V2)
729 reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
732 * Use the weakest shareability/memory types, so they are
733 * overridden by the ttbcr/pte.
736 reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
737 (CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
738 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
739 /* 8-bit VMIDs live in CBAR */
740 reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBAR_VMID_SHIFT;
742 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(cfg->cbndx));
746 u16 asid = ARM_SMMU_CB_ASID(smmu, cfg);
748 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
749 reg = pgtbl_cfg->arm_v7s_cfg.ttbr[0];
750 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBR0);
751 reg = pgtbl_cfg->arm_v7s_cfg.ttbr[1];
752 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBR1);
753 writel_relaxed(asid, cb_base + ARM_SMMU_CB_CONTEXTIDR);
755 reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
756 reg64 |= (u64)asid << TTBRn_ASID_SHIFT;
757 writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
758 reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[1];
759 reg64 |= (u64)asid << TTBRn_ASID_SHIFT;
760 writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR1);
763 reg64 = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
764 writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
769 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
770 reg = pgtbl_cfg->arm_v7s_cfg.tcr;
773 reg = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
774 reg2 = pgtbl_cfg->arm_lpae_s1_cfg.tcr >> 32;
775 reg2 |= TTBCR2_SEP_UPSTREAM;
777 if (smmu->version > ARM_SMMU_V1)
778 writel_relaxed(reg2, cb_base + ARM_SMMU_CB_TTBCR2);
780 reg = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
782 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
784 /* MAIRs (stage-1 only) */
786 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
787 reg = pgtbl_cfg->arm_v7s_cfg.prrr;
788 reg2 = pgtbl_cfg->arm_v7s_cfg.nmrr;
790 reg = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
791 reg2 = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
793 writel_relaxed(reg, cb_base + ARM_SMMU_CB_S1_MAIR0);
794 writel_relaxed(reg2, cb_base + ARM_SMMU_CB_S1_MAIR1);
798 reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
800 reg |= SCTLR_S1_ASIDPNE;
804 writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
807 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
808 struct arm_smmu_device *smmu)
810 int irq, start, ret = 0;
811 unsigned long ias, oas;
812 struct io_pgtable_ops *pgtbl_ops;
813 struct io_pgtable_cfg pgtbl_cfg;
814 enum io_pgtable_fmt fmt;
815 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
816 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
818 mutex_lock(&smmu_domain->init_mutex);
819 if (smmu_domain->smmu)
823 * Mapping the requested stage onto what we support is surprisingly
824 * complicated, mainly because the spec allows S1+S2 SMMUs without
825 * support for nested translation. That means we end up with the
828 * Requested Supported Actual
838 * Note that you can't actually request stage-2 mappings.
840 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
841 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
842 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
843 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
846 * Choosing a suitable context format is even more fiddly. Until we
847 * grow some way for the caller to express a preference, and/or move
848 * the decision into the io-pgtable code where it arguably belongs,
849 * just aim for the closest thing to the rest of the system, and hope
850 * that the hardware isn't esoteric enough that we can't assume AArch64
851 * support to be a superset of AArch32 support...
853 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
854 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
855 if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) &&
856 !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) &&
857 (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) &&
858 (smmu_domain->stage == ARM_SMMU_DOMAIN_S1))
859 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S;
860 if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) &&
861 (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K |
862 ARM_SMMU_FEAT_FMT_AARCH64_16K |
863 ARM_SMMU_FEAT_FMT_AARCH64_4K)))
864 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64;
866 if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
871 switch (smmu_domain->stage) {
872 case ARM_SMMU_DOMAIN_S1:
873 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
874 start = smmu->num_s2_context_banks;
876 oas = smmu->ipa_size;
877 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
878 fmt = ARM_64_LPAE_S1;
879 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
880 fmt = ARM_32_LPAE_S1;
881 ias = min(ias, 32UL);
882 oas = min(oas, 40UL);
885 ias = min(ias, 32UL);
886 oas = min(oas, 32UL);
889 case ARM_SMMU_DOMAIN_NESTED:
891 * We will likely want to change this if/when KVM gets
894 case ARM_SMMU_DOMAIN_S2:
895 cfg->cbar = CBAR_TYPE_S2_TRANS;
897 ias = smmu->ipa_size;
899 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
900 fmt = ARM_64_LPAE_S2;
902 fmt = ARM_32_LPAE_S2;
903 ias = min(ias, 40UL);
904 oas = min(oas, 40UL);
912 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
913 smmu->num_context_banks);
918 if (smmu->version < ARM_SMMU_V2) {
919 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
920 cfg->irptndx %= smmu->num_context_irqs;
922 cfg->irptndx = cfg->cbndx;
925 pgtbl_cfg = (struct io_pgtable_cfg) {
926 .pgsize_bitmap = smmu->pgsize_bitmap,
929 .tlb = &arm_smmu_gather_ops,
930 .iommu_dev = smmu->dev,
933 smmu_domain->smmu = smmu;
934 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
940 /* Update the domain's page sizes to reflect the page table format */
941 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
942 domain->geometry.aperture_end = (1UL << ias) - 1;
943 domain->geometry.force_aperture = true;
945 /* Initialise the context bank with our page table cfg */
946 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
949 * Request context fault interrupt. Do this last to avoid the
950 * handler seeing a half-initialised domain state.
952 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
953 ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
954 IRQF_SHARED, "arm-smmu-context-fault", domain);
956 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
958 cfg->irptndx = INVALID_IRPTNDX;
961 mutex_unlock(&smmu_domain->init_mutex);
963 /* Publish page table ops for map/unmap */
964 smmu_domain->pgtbl_ops = pgtbl_ops;
968 smmu_domain->smmu = NULL;
970 mutex_unlock(&smmu_domain->init_mutex);
974 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
976 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
977 struct arm_smmu_device *smmu = smmu_domain->smmu;
978 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
979 void __iomem *cb_base;
986 * Disable the context bank and free the page tables before freeing
989 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
990 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
992 if (cfg->irptndx != INVALID_IRPTNDX) {
993 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
994 devm_free_irq(smmu->dev, irq, domain);
997 free_io_pgtable_ops(smmu_domain->pgtbl_ops);
998 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
1001 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
1003 struct arm_smmu_domain *smmu_domain;
1005 if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1008 * Allocate the domain and initialise some of its data structures.
1009 * We can't really do anything meaningful until we've added a
1012 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
1016 if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
1017 iommu_get_dma_cookie(&smmu_domain->domain))) {
1022 mutex_init(&smmu_domain->init_mutex);
1023 spin_lock_init(&smmu_domain->pgtbl_lock);
1025 return &smmu_domain->domain;
1028 static void arm_smmu_domain_free(struct iommu_domain *domain)
1030 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1033 * Free the domain resources. We assume that all devices have
1034 * already been detached.
1036 iommu_put_dma_cookie(domain);
1037 arm_smmu_destroy_domain_context(domain);
1041 static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
1043 struct arm_smmu_smr *smr = smmu->smrs + idx;
1044 u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1048 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
1051 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
1053 struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
1054 u32 reg = (s2cr->type & S2CR_TYPE_MASK) << S2CR_TYPE_SHIFT |
1055 (s2cr->cbndx & S2CR_CBNDX_MASK) << S2CR_CBNDX_SHIFT |
1056 (s2cr->privcfg & S2CR_PRIVCFG_MASK) << S2CR_PRIVCFG_SHIFT;
1058 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_S2CR(idx));
1061 static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
1063 arm_smmu_write_s2cr(smmu, idx);
1065 arm_smmu_write_smr(smmu, idx);
1068 static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1070 struct arm_smmu_smr *smrs = smmu->smrs;
1071 int i, free_idx = -ENOSPC;
1073 /* Stream indexing is blissfully easy */
1077 /* Validating SMRs is... less so */
1078 for (i = 0; i < smmu->num_mapping_groups; ++i) {
1079 if (!smrs[i].valid) {
1081 * Note the first free entry we come across, which
1082 * we'll claim in the end if nothing else matches.
1089 * If the new entry is _entirely_ matched by an existing entry,
1090 * then reuse that, with the guarantee that there also cannot
1091 * be any subsequent conflicting entries. In normal use we'd
1092 * expect simply identical entries for this case, but there's
1093 * no harm in accommodating the generalisation.
1095 if ((mask & smrs[i].mask) == mask &&
1096 !((id ^ smrs[i].id) & ~smrs[i].mask))
1099 * If the new entry has any other overlap with an existing one,
1100 * though, then there always exists at least one stream ID
1101 * which would cause a conflict, and we can't allow that risk.
1103 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
1110 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
1112 if (--smmu->s2crs[idx].count)
1115 smmu->s2crs[idx] = s2cr_init_val;
1117 smmu->smrs[idx].valid = false;
1122 static int arm_smmu_master_alloc_smes(struct device *dev)
1124 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1125 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1126 struct arm_smmu_device *smmu = cfg->smmu;
1127 struct arm_smmu_smr *smrs = smmu->smrs;
1128 struct iommu_group *group;
1131 mutex_lock(&smmu->stream_map_mutex);
1132 /* Figure out a viable stream map entry allocation */
1133 for_each_cfg_sme(fwspec, i, idx) {
1134 u16 sid = fwspec->ids[i];
1135 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1137 if (idx != INVALID_SMENDX) {
1142 ret = arm_smmu_find_sme(smmu, sid, mask);
1147 if (smrs && smmu->s2crs[idx].count == 0) {
1149 smrs[idx].mask = mask;
1150 smrs[idx].valid = true;
1152 smmu->s2crs[idx].count++;
1153 cfg->smendx[i] = (s16)idx;
1156 group = iommu_group_get_for_dev(dev);
1158 group = ERR_PTR(-ENOMEM);
1159 if (IS_ERR(group)) {
1160 ret = PTR_ERR(group);
1163 iommu_group_put(group);
1165 /* It worked! Now, poke the actual hardware */
1166 for_each_cfg_sme(fwspec, i, idx) {
1167 arm_smmu_write_sme(smmu, idx);
1168 smmu->s2crs[idx].group = group;
1171 mutex_unlock(&smmu->stream_map_mutex);
1176 arm_smmu_free_sme(smmu, cfg->smendx[i]);
1177 cfg->smendx[i] = INVALID_SMENDX;
1179 mutex_unlock(&smmu->stream_map_mutex);
1183 static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1185 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1186 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1189 mutex_lock(&smmu->stream_map_mutex);
1190 for_each_cfg_sme(fwspec, i, idx) {
1191 if (arm_smmu_free_sme(smmu, idx))
1192 arm_smmu_write_sme(smmu, idx);
1193 cfg->smendx[i] = INVALID_SMENDX;
1195 mutex_unlock(&smmu->stream_map_mutex);
1198 static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1199 struct iommu_fwspec *fwspec)
1201 struct arm_smmu_device *smmu = smmu_domain->smmu;
1202 struct arm_smmu_s2cr *s2cr = smmu->s2crs;
1203 enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
1204 u8 cbndx = smmu_domain->cfg.cbndx;
1207 for_each_cfg_sme(fwspec, i, idx) {
1208 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1211 s2cr[idx].type = type;
1212 s2cr[idx].privcfg = S2CR_PRIVCFG_UNPRIV;
1213 s2cr[idx].cbndx = cbndx;
1214 arm_smmu_write_s2cr(smmu, idx);
1219 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1222 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1223 struct arm_smmu_device *smmu;
1224 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1226 if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1227 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1232 * FIXME: The arch/arm DMA API code tries to attach devices to its own
1233 * domains between of_xlate() and add_device() - we have no way to cope
1234 * with that, so until ARM gets converted to rely on groups and default
1235 * domains, just say no (but more politely than by dereferencing NULL).
1236 * This should be at least a WARN_ON once that's sorted.
1238 if (!fwspec->iommu_priv)
1241 smmu = fwspec_smmu(fwspec);
1242 /* Ensure that the domain is finalised */
1243 ret = arm_smmu_init_domain_context(domain, smmu);
1248 * Sanity check the domain. We don't support domains across
1251 if (smmu_domain->smmu != smmu) {
1253 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1254 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1258 /* Looks ok, so add the device to the domain */
1259 return arm_smmu_domain_add_master(smmu_domain, fwspec);
1262 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1263 phys_addr_t paddr, size_t size, int prot)
1266 unsigned long flags;
1267 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1268 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1273 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1274 ret = ops->map(ops, iova, paddr, size, prot);
1275 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1279 static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1283 unsigned long flags;
1284 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1285 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1290 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1291 ret = ops->unmap(ops, iova, size);
1292 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1296 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1299 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1300 struct arm_smmu_device *smmu = smmu_domain->smmu;
1301 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1302 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1303 struct device *dev = smmu->dev;
1304 void __iomem *cb_base;
1309 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
1311 /* ATS1 registers can only be written atomically */
1312 va = iova & ~0xfffUL;
1313 if (smmu->version == ARM_SMMU_V2)
1314 smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
1315 else /* Register is only 32-bit in v1 */
1316 writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
1318 if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
1319 !(tmp & ATSR_ACTIVE), 5, 50)) {
1321 "iova to phys timed out on %pad. Falling back to software table walk.\n",
1323 return ops->iova_to_phys(ops, iova);
1326 phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1327 if (phys & CB_PAR_F) {
1328 dev_err(dev, "translation fault!\n");
1329 dev_err(dev, "PAR = 0x%llx\n", phys);
1333 return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1336 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1340 unsigned long flags;
1341 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1342 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1347 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1348 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
1349 smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1350 ret = arm_smmu_iova_to_phys_hard(domain, iova);
1352 ret = ops->iova_to_phys(ops, iova);
1355 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1360 static bool arm_smmu_capable(enum iommu_cap cap)
1363 case IOMMU_CAP_CACHE_COHERENCY:
1365 * Return true here as the SMMU can always send out coherent
1369 case IOMMU_CAP_INTR_REMAP:
1370 return true; /* MSIs are just memory writes */
1371 case IOMMU_CAP_NOEXEC:
1378 static int arm_smmu_match_node(struct device *dev, void *data)
1380 return dev->of_node == data;
1383 static struct arm_smmu_device *arm_smmu_get_by_node(struct device_node *np)
1385 struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
1386 np, arm_smmu_match_node);
1388 return dev ? dev_get_drvdata(dev) : NULL;
1391 static int arm_smmu_add_device(struct device *dev)
1393 struct arm_smmu_device *smmu;
1394 struct arm_smmu_master_cfg *cfg;
1395 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1398 if (using_legacy_binding) {
1399 ret = arm_smmu_register_legacy_master(dev, &smmu);
1400 fwspec = dev->iommu_fwspec;
1403 } else if (fwspec) {
1404 smmu = arm_smmu_get_by_node(to_of_node(fwspec->iommu_fwnode));
1410 for (i = 0; i < fwspec->num_ids; i++) {
1411 u16 sid = fwspec->ids[i];
1412 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1414 if (sid & ~smmu->streamid_mask) {
1415 dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1416 sid, smmu->streamid_mask);
1419 if (mask & ~smmu->smr_mask_mask) {
1420 dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
1421 sid, smmu->smr_mask_mask);
1427 cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
1433 fwspec->iommu_priv = cfg;
1435 cfg->smendx[i] = INVALID_SMENDX;
1437 ret = arm_smmu_master_alloc_smes(dev);
1445 kfree(fwspec->iommu_priv);
1446 iommu_fwspec_free(dev);
1450 static void arm_smmu_remove_device(struct device *dev)
1452 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1454 if (!fwspec || fwspec->ops != &arm_smmu_ops)
1457 arm_smmu_master_free_smes(fwspec);
1458 iommu_group_remove_device(dev);
1459 kfree(fwspec->iommu_priv);
1460 iommu_fwspec_free(dev);
1463 static struct iommu_group *arm_smmu_device_group(struct device *dev)
1465 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1466 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1467 struct iommu_group *group = NULL;
1470 for_each_cfg_sme(fwspec, i, idx) {
1471 if (group && smmu->s2crs[idx].group &&
1472 group != smmu->s2crs[idx].group)
1473 return ERR_PTR(-EINVAL);
1475 group = smmu->s2crs[idx].group;
1481 if (dev_is_pci(dev))
1482 group = pci_device_group(dev);
1484 group = generic_device_group(dev);
1489 static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1490 enum iommu_attr attr, void *data)
1492 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1495 case DOMAIN_ATTR_NESTING:
1496 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1503 static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1504 enum iommu_attr attr, void *data)
1507 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1509 mutex_lock(&smmu_domain->init_mutex);
1512 case DOMAIN_ATTR_NESTING:
1513 if (smmu_domain->smmu) {
1519 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1521 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1529 mutex_unlock(&smmu_domain->init_mutex);
1533 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1537 if (args->args_count > 0)
1538 fwid |= (u16)args->args[0];
1540 if (args->args_count > 1)
1541 fwid |= (u16)args->args[1] << SMR_MASK_SHIFT;
1543 return iommu_fwspec_add_ids(dev, &fwid, 1);
1546 static struct iommu_ops arm_smmu_ops = {
1547 .capable = arm_smmu_capable,
1548 .domain_alloc = arm_smmu_domain_alloc,
1549 .domain_free = arm_smmu_domain_free,
1550 .attach_dev = arm_smmu_attach_dev,
1551 .map = arm_smmu_map,
1552 .unmap = arm_smmu_unmap,
1553 .map_sg = default_iommu_map_sg,
1554 .iova_to_phys = arm_smmu_iova_to_phys,
1555 .add_device = arm_smmu_add_device,
1556 .remove_device = arm_smmu_remove_device,
1557 .device_group = arm_smmu_device_group,
1558 .domain_get_attr = arm_smmu_domain_get_attr,
1559 .domain_set_attr = arm_smmu_domain_set_attr,
1560 .of_xlate = arm_smmu_of_xlate,
1561 .pgsize_bitmap = -1UL, /* Restricted during device attach */
1564 static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1566 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1567 void __iomem *cb_base;
1571 /* clear global FSR */
1572 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1573 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1576 * Reset stream mapping groups: Initial values mark all SMRn as
1577 * invalid and all S2CRn as bypass unless overridden.
1579 for (i = 0; i < smmu->num_mapping_groups; ++i)
1580 arm_smmu_write_sme(smmu, i);
1583 * Before clearing ARM_MMU500_ACTLR_CPRE, need to
1584 * clear CACHE_LOCK bit of ACR first. And, CACHE_LOCK
1585 * bit is only present in MMU-500r2 onwards.
1587 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
1588 major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
1589 if ((smmu->model == ARM_MMU500) && (major >= 2)) {
1590 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
1591 reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
1592 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
1595 /* Make sure all context banks are disabled and clear CB_FSR */
1596 for (i = 0; i < smmu->num_context_banks; ++i) {
1597 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
1598 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
1599 writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
1601 * Disable MMU-500's not-particularly-beneficial next-page
1602 * prefetcher for the sake of errata #841119 and #826419.
1604 if (smmu->model == ARM_MMU500) {
1605 reg = readl_relaxed(cb_base + ARM_SMMU_CB_ACTLR);
1606 reg &= ~ARM_MMU500_ACTLR_CPRE;
1607 writel_relaxed(reg, cb_base + ARM_SMMU_CB_ACTLR);
1611 /* Invalidate the TLB, just in case */
1612 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
1613 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
1615 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1617 /* Enable fault reporting */
1618 reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1620 /* Disable TLB broadcasting. */
1621 reg |= (sCR0_VMIDPNE | sCR0_PTM);
1623 /* Enable client access, handling unmatched streams as appropriate */
1624 reg &= ~sCR0_CLIENTPD;
1628 reg &= ~sCR0_USFCFG;
1630 /* Disable forced broadcasting */
1633 /* Don't upgrade barriers */
1634 reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
1636 if (smmu->features & ARM_SMMU_FEAT_VMID16)
1637 reg |= sCR0_VMID16EN;
1639 /* Push the button */
1640 __arm_smmu_tlb_sync(smmu);
1641 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1644 static int arm_smmu_id_size_to_bits(int size)
1663 static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1666 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1668 bool cttw_dt, cttw_reg;
1671 dev_notice(smmu->dev, "probing hardware configuration...\n");
1672 dev_notice(smmu->dev, "SMMUv%d with:\n",
1673 smmu->version == ARM_SMMU_V2 ? 2 : 1);
1676 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1678 /* Restrict available stages based on module parameter */
1679 if (force_stage == 1)
1680 id &= ~(ID0_S2TS | ID0_NTS);
1681 else if (force_stage == 2)
1682 id &= ~(ID0_S1TS | ID0_NTS);
1684 if (id & ID0_S1TS) {
1685 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1686 dev_notice(smmu->dev, "\tstage 1 translation\n");
1689 if (id & ID0_S2TS) {
1690 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1691 dev_notice(smmu->dev, "\tstage 2 translation\n");
1695 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1696 dev_notice(smmu->dev, "\tnested translation\n");
1699 if (!(smmu->features &
1700 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1701 dev_err(smmu->dev, "\tno translation support!\n");
1705 if ((id & ID0_S1TS) &&
1706 ((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
1707 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1708 dev_notice(smmu->dev, "\taddress translation ops\n");
1712 * In order for DMA API calls to work properly, we must defer to what
1713 * the DT says about coherency, regardless of what the hardware claims.
1714 * Fortunately, this also opens up a workaround for systems where the
1715 * ID register value has ended up configured incorrectly.
1717 cttw_dt = of_dma_is_coherent(smmu->dev->of_node);
1718 cttw_reg = !!(id & ID0_CTTW);
1720 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
1721 if (cttw_dt || cttw_reg)
1722 dev_notice(smmu->dev, "\t%scoherent table walk\n",
1723 cttw_dt ? "" : "non-");
1724 if (cttw_dt != cttw_reg)
1725 dev_notice(smmu->dev,
1726 "\t(IDR0.CTTW overridden by dma-coherent property)\n");
1728 /* Max. number of entries we have for stream matching/indexing */
1729 size = 1 << ((id >> ID0_NUMSIDB_SHIFT) & ID0_NUMSIDB_MASK);
1730 smmu->streamid_mask = size - 1;
1734 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1735 size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
1738 "stream-matching supported, but no SMRs present!\n");
1743 * SMR.ID bits may not be preserved if the corresponding MASK
1744 * bits are set, so check each one separately. We can reject
1745 * masters later if they try to claim IDs outside these masks.
1747 smr = smmu->streamid_mask << SMR_ID_SHIFT;
1748 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1749 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1750 smmu->streamid_mask = smr >> SMR_ID_SHIFT;
1752 smr = smmu->streamid_mask << SMR_MASK_SHIFT;
1753 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1754 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1755 smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
1757 /* Zero-initialised to mark as invalid */
1758 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
1763 dev_notice(smmu->dev,
1764 "\tstream matching with %lu register groups, mask 0x%x",
1765 size, smmu->smr_mask_mask);
1767 /* s2cr->type == 0 means translation, so initialise explicitly */
1768 smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
1772 for (i = 0; i < size; i++)
1773 smmu->s2crs[i] = s2cr_init_val;
1775 smmu->num_mapping_groups = size;
1776 mutex_init(&smmu->stream_map_mutex);
1778 if (smmu->version < ARM_SMMU_V2 || !(id & ID0_PTFS_NO_AARCH32)) {
1779 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L;
1780 if (!(id & ID0_PTFS_NO_AARCH32S))
1781 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S;
1785 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1786 smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1788 /* Check for size mismatch of SMMU address space from mapped region */
1789 size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
1790 size *= 2 << smmu->pgshift;
1791 if (smmu->size != size)
1793 "SMMU address space size (0x%lx) differs from mapped region size (0x%lx)!\n",
1796 smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1797 smmu->num_context_banks = (id >> ID1_NUMCB_SHIFT) & ID1_NUMCB_MASK;
1798 if (smmu->num_s2_context_banks > smmu->num_context_banks) {
1799 dev_err(smmu->dev, "impossible number of S2 context banks!\n");
1802 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1803 smmu->num_context_banks, smmu->num_s2_context_banks);
1805 * Cavium CN88xx erratum #27704.
1806 * Ensure ASID and VMID allocation is unique across all SMMUs in
1809 if (smmu->model == CAVIUM_SMMUV2) {
1810 smmu->cavium_id_base =
1811 atomic_add_return(smmu->num_context_banks,
1812 &cavium_smmu_context_count);
1813 smmu->cavium_id_base -= smmu->num_context_banks;
1817 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID2);
1818 size = arm_smmu_id_size_to_bits((id >> ID2_IAS_SHIFT) & ID2_IAS_MASK);
1819 smmu->ipa_size = size;
1821 /* The output mask is also applied for bypass */
1822 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1823 smmu->pa_size = size;
1825 if (id & ID2_VMID16)
1826 smmu->features |= ARM_SMMU_FEAT_VMID16;
1829 * What the page table walker can address actually depends on which
1830 * descriptor format is in use, but since a) we don't know that yet,
1831 * and b) it can vary per context bank, this will have to do...
1833 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1835 "failed to set DMA mask for table walker\n");
1837 if (smmu->version < ARM_SMMU_V2) {
1838 smmu->va_size = smmu->ipa_size;
1839 if (smmu->version == ARM_SMMU_V1_64K)
1840 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1842 size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
1843 smmu->va_size = arm_smmu_id_size_to_bits(size);
1844 if (id & ID2_PTFS_4K)
1845 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1846 if (id & ID2_PTFS_16K)
1847 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1848 if (id & ID2_PTFS_64K)
1849 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1852 /* Now we've corralled the various formats, what'll it do? */
1853 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
1854 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
1855 if (smmu->features &
1856 (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
1857 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
1858 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
1859 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
1860 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
1861 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
1863 if (arm_smmu_ops.pgsize_bitmap == -1UL)
1864 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
1866 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
1867 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
1868 smmu->pgsize_bitmap);
1871 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
1872 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1873 smmu->va_size, smmu->ipa_size);
1875 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
1876 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
1877 smmu->ipa_size, smmu->pa_size);
1882 struct arm_smmu_match_data {
1883 enum arm_smmu_arch_version version;
1884 enum arm_smmu_implementation model;
1887 #define ARM_SMMU_MATCH_DATA(name, ver, imp) \
1888 static struct arm_smmu_match_data name = { .version = ver, .model = imp }
1890 ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
1891 ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
1892 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1893 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1894 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1896 static const struct of_device_id arm_smmu_of_match[] = {
1897 { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
1898 { .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
1899 { .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
1900 { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
1901 { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
1902 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
1905 MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
1907 static int arm_smmu_device_dt_probe(struct platform_device *pdev)
1909 const struct arm_smmu_match_data *data;
1910 struct resource *res;
1911 struct arm_smmu_device *smmu;
1912 struct device *dev = &pdev->dev;
1913 int num_irqs, i, err;
1914 bool legacy_binding;
1916 legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
1917 if (legacy_binding && !using_generic_binding) {
1918 if (!using_legacy_binding)
1919 pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
1920 using_legacy_binding = true;
1921 } else if (!legacy_binding && !using_legacy_binding) {
1922 using_generic_binding = true;
1924 dev_err(dev, "not probing due to mismatched DT properties\n");
1928 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
1930 dev_err(dev, "failed to allocate arm_smmu_device\n");
1935 data = of_device_get_match_data(dev);
1936 smmu->version = data->version;
1937 smmu->model = data->model;
1939 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1940 smmu->base = devm_ioremap_resource(dev, res);
1941 if (IS_ERR(smmu->base))
1942 return PTR_ERR(smmu->base);
1943 smmu->size = resource_size(res);
1945 if (of_property_read_u32(dev->of_node, "#global-interrupts",
1946 &smmu->num_global_irqs)) {
1947 dev_err(dev, "missing #global-interrupts property\n");
1952 while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
1954 if (num_irqs > smmu->num_global_irqs)
1955 smmu->num_context_irqs++;
1958 if (!smmu->num_context_irqs) {
1959 dev_err(dev, "found %d interrupts but expected at least %d\n",
1960 num_irqs, smmu->num_global_irqs + 1);
1964 smmu->irqs = devm_kzalloc(dev, sizeof(*smmu->irqs) * num_irqs,
1967 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
1971 for (i = 0; i < num_irqs; ++i) {
1972 int irq = platform_get_irq(pdev, i);
1975 dev_err(dev, "failed to get irq index %d\n", i);
1978 smmu->irqs[i] = irq;
1981 err = arm_smmu_device_cfg_probe(smmu);
1985 parse_driver_options(smmu);
1987 if (smmu->version == ARM_SMMU_V2 &&
1988 smmu->num_context_banks != smmu->num_context_irqs) {
1990 "found only %d context interrupt(s) but %d required\n",
1991 smmu->num_context_irqs, smmu->num_context_banks);
1995 for (i = 0; i < smmu->num_global_irqs; ++i) {
1996 err = devm_request_irq(smmu->dev, smmu->irqs[i],
1997 arm_smmu_global_fault,
1999 "arm-smmu global fault",
2002 dev_err(dev, "failed to request global IRQ %d (%u)\n",
2008 of_iommu_set_ops(dev->of_node, &arm_smmu_ops);
2009 platform_set_drvdata(pdev, smmu);
2010 arm_smmu_device_reset(smmu);
2012 /* Oh, for a proper bus abstraction */
2013 if (!iommu_present(&platform_bus_type))
2014 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
2015 #ifdef CONFIG_ARM_AMBA
2016 if (!iommu_present(&amba_bustype))
2017 bus_set_iommu(&amba_bustype, &arm_smmu_ops);
2020 if (!iommu_present(&pci_bus_type)) {
2022 bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
2028 static int arm_smmu_device_remove(struct platform_device *pdev)
2030 struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2035 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2036 dev_err(&pdev->dev, "removing device with active domains!\n");
2038 /* Turn the thing off */
2039 writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2043 static struct platform_driver arm_smmu_driver = {
2046 .of_match_table = of_match_ptr(arm_smmu_of_match),
2048 .probe = arm_smmu_device_dt_probe,
2049 .remove = arm_smmu_device_remove,
2052 static int __init arm_smmu_init(void)
2054 static bool registered;
2058 ret = platform_driver_register(&arm_smmu_driver);
2064 static void __exit arm_smmu_exit(void)
2066 return platform_driver_unregister(&arm_smmu_driver);
2069 subsys_initcall(arm_smmu_init);
2070 module_exit(arm_smmu_exit);
2072 static int __init arm_smmu_of_init(struct device_node *np)
2074 int ret = arm_smmu_init();
2079 if (!of_platform_device_create(np, NULL, platform_bus_type.dev_root))
2084 IOMMU_OF_DECLARE(arm_smmuv1, "arm,smmu-v1", arm_smmu_of_init);
2085 IOMMU_OF_DECLARE(arm_smmuv2, "arm,smmu-v2", arm_smmu_of_init);
2086 IOMMU_OF_DECLARE(arm_mmu400, "arm,mmu-400", arm_smmu_of_init);
2087 IOMMU_OF_DECLARE(arm_mmu401, "arm,mmu-401", arm_smmu_of_init);
2088 IOMMU_OF_DECLARE(arm_mmu500, "arm,mmu-500", arm_smmu_of_init);
2089 IOMMU_OF_DECLARE(cavium_smmuv2, "cavium,smmu-v2", arm_smmu_of_init);
2091 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
2092 MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
2093 MODULE_LICENSE("GPL v2");