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
27 * - Extended Stream ID (16 bit)
30 #define pr_fmt(fmt) "arm-smmu: " fmt
32 #include <linux/acpi.h>
33 #include <linux/acpi_iort.h>
34 #include <linux/atomic.h>
35 #include <linux/delay.h>
36 #include <linux/dma-iommu.h>
37 #include <linux/dma-mapping.h>
38 #include <linux/err.h>
39 #include <linux/interrupt.h>
41 #include <linux/io-64-nonatomic-hi-lo.h>
42 #include <linux/iommu.h>
43 #include <linux/iopoll.h>
44 #include <linux/module.h>
46 #include <linux/of_address.h>
47 #include <linux/of_device.h>
48 #include <linux/of_iommu.h>
49 #include <linux/pci.h>
50 #include <linux/platform_device.h>
51 #include <linux/slab.h>
52 #include <linux/spinlock.h>
54 #include <linux/amba/bus.h>
56 #include "io-pgtable.h"
57 #include "arm-smmu-regs.h"
59 #define ARM_MMU500_ACTLR_CPRE (1 << 1)
61 #define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
62 #define ARM_MMU500_ACR_S2CRB_TLBEN (1 << 10)
63 #define ARM_MMU500_ACR_SMTNMB_TLBEN (1 << 8)
65 #define TLB_LOOP_TIMEOUT 1000000 /* 1s! */
66 #define TLB_SPIN_COUNT 10
68 /* Maximum number of context banks per SMMU */
69 #define ARM_SMMU_MAX_CBS 128
71 /* SMMU global address space */
72 #define ARM_SMMU_GR0(smmu) ((smmu)->base)
73 #define ARM_SMMU_GR1(smmu) ((smmu)->base + (1 << (smmu)->pgshift))
76 * SMMU global address space with conditional offset to access secure
77 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
80 #define ARM_SMMU_GR0_NS(smmu) \
82 ((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS) \
86 * Some 64-bit registers only make sense to write atomically, but in such
87 * cases all the data relevant to AArch32 formats lies within the lower word,
88 * therefore this actually makes more sense than it might first appear.
91 #define smmu_write_atomic_lq writeq_relaxed
93 #define smmu_write_atomic_lq writel_relaxed
96 /* Translation context bank */
97 #define ARM_SMMU_CB(smmu, n) ((smmu)->cb_base + ((n) << (smmu)->pgshift))
99 #define MSI_IOVA_BASE 0x8000000
100 #define MSI_IOVA_LENGTH 0x100000
102 static int force_stage;
103 module_param(force_stage, int, S_IRUGO);
104 MODULE_PARM_DESC(force_stage,
105 "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.");
106 static bool disable_bypass;
107 module_param(disable_bypass, bool, S_IRUGO);
108 MODULE_PARM_DESC(disable_bypass,
109 "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.");
111 enum arm_smmu_arch_version {
117 enum arm_smmu_implementation {
123 struct arm_smmu_s2cr {
124 struct iommu_group *group;
126 enum arm_smmu_s2cr_type type;
127 enum arm_smmu_s2cr_privcfg privcfg;
131 #define s2cr_init_val (struct arm_smmu_s2cr){ \
132 .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS, \
135 struct arm_smmu_smr {
145 struct arm_smmu_cfg *cfg;
148 struct arm_smmu_master_cfg {
149 struct arm_smmu_device *smmu;
152 #define INVALID_SMENDX -1
153 #define __fwspec_cfg(fw) ((struct arm_smmu_master_cfg *)fw->iommu_priv)
154 #define fwspec_smmu(fw) (__fwspec_cfg(fw)->smmu)
155 #define fwspec_smendx(fw, i) \
156 (i >= fw->num_ids ? INVALID_SMENDX : __fwspec_cfg(fw)->smendx[i])
157 #define for_each_cfg_sme(fw, i, idx) \
158 for (i = 0; idx = fwspec_smendx(fw, i), i < fw->num_ids; ++i)
160 struct arm_smmu_device {
164 void __iomem *cb_base;
165 unsigned long pgshift;
167 #define ARM_SMMU_FEAT_COHERENT_WALK (1 << 0)
168 #define ARM_SMMU_FEAT_STREAM_MATCH (1 << 1)
169 #define ARM_SMMU_FEAT_TRANS_S1 (1 << 2)
170 #define ARM_SMMU_FEAT_TRANS_S2 (1 << 3)
171 #define ARM_SMMU_FEAT_TRANS_NESTED (1 << 4)
172 #define ARM_SMMU_FEAT_TRANS_OPS (1 << 5)
173 #define ARM_SMMU_FEAT_VMID16 (1 << 6)
174 #define ARM_SMMU_FEAT_FMT_AARCH64_4K (1 << 7)
175 #define ARM_SMMU_FEAT_FMT_AARCH64_16K (1 << 8)
176 #define ARM_SMMU_FEAT_FMT_AARCH64_64K (1 << 9)
177 #define ARM_SMMU_FEAT_FMT_AARCH32_L (1 << 10)
178 #define ARM_SMMU_FEAT_FMT_AARCH32_S (1 << 11)
179 #define ARM_SMMU_FEAT_EXIDS (1 << 12)
182 #define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
184 enum arm_smmu_arch_version version;
185 enum arm_smmu_implementation model;
187 u32 num_context_banks;
188 u32 num_s2_context_banks;
189 DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
190 struct arm_smmu_cb *cbs;
193 u32 num_mapping_groups;
196 struct arm_smmu_smr *smrs;
197 struct arm_smmu_s2cr *s2crs;
198 struct mutex stream_map_mutex;
200 unsigned long va_size;
201 unsigned long ipa_size;
202 unsigned long pa_size;
203 unsigned long pgsize_bitmap;
206 u32 num_context_irqs;
209 u32 cavium_id_base; /* Specific to Cavium */
211 spinlock_t global_sync_lock;
213 /* IOMMU core code handle */
214 struct iommu_device iommu;
217 enum arm_smmu_context_fmt {
218 ARM_SMMU_CTX_FMT_NONE,
219 ARM_SMMU_CTX_FMT_AARCH64,
220 ARM_SMMU_CTX_FMT_AARCH32_L,
221 ARM_SMMU_CTX_FMT_AARCH32_S,
224 struct arm_smmu_cfg {
232 enum arm_smmu_context_fmt fmt;
234 #define INVALID_IRPTNDX 0xff
236 enum arm_smmu_domain_stage {
237 ARM_SMMU_DOMAIN_S1 = 0,
239 ARM_SMMU_DOMAIN_NESTED,
240 ARM_SMMU_DOMAIN_BYPASS,
243 struct arm_smmu_domain {
244 struct arm_smmu_device *smmu;
245 struct io_pgtable_ops *pgtbl_ops;
246 const struct iommu_gather_ops *tlb_ops;
247 struct arm_smmu_cfg cfg;
248 enum arm_smmu_domain_stage stage;
250 struct mutex init_mutex; /* Protects smmu pointer */
251 spinlock_t cb_lock; /* Serialises ATS1* ops and TLB syncs */
252 struct iommu_domain domain;
255 struct arm_smmu_option_prop {
260 static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);
262 static bool using_legacy_binding, using_generic_binding;
264 static struct arm_smmu_option_prop arm_smmu_options[] = {
265 { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
269 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
271 return container_of(dom, struct arm_smmu_domain, domain);
274 static void parse_driver_options(struct arm_smmu_device *smmu)
279 if (of_property_read_bool(smmu->dev->of_node,
280 arm_smmu_options[i].prop)) {
281 smmu->options |= arm_smmu_options[i].opt;
282 dev_notice(smmu->dev, "option %s\n",
283 arm_smmu_options[i].prop);
285 } while (arm_smmu_options[++i].opt);
288 static struct device_node *dev_get_dev_node(struct device *dev)
290 if (dev_is_pci(dev)) {
291 struct pci_bus *bus = to_pci_dev(dev)->bus;
293 while (!pci_is_root_bus(bus))
295 return of_node_get(bus->bridge->parent->of_node);
298 return of_node_get(dev->of_node);
301 static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
303 *((__be32 *)data) = cpu_to_be32(alias);
304 return 0; /* Continue walking */
307 static int __find_legacy_master_phandle(struct device *dev, void *data)
309 struct of_phandle_iterator *it = *(void **)data;
310 struct device_node *np = it->node;
313 of_for_each_phandle(it, err, dev->of_node, "mmu-masters",
314 "#stream-id-cells", 0)
315 if (it->node == np) {
316 *(void **)data = dev;
320 return err == -ENOENT ? 0 : err;
323 static struct platform_driver arm_smmu_driver;
324 static struct iommu_ops arm_smmu_ops;
326 static int arm_smmu_register_legacy_master(struct device *dev,
327 struct arm_smmu_device **smmu)
329 struct device *smmu_dev;
330 struct device_node *np;
331 struct of_phandle_iterator it;
337 np = dev_get_dev_node(dev);
338 if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
344 err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
345 __find_legacy_master_phandle);
353 if (dev_is_pci(dev)) {
354 /* "mmu-masters" assumes Stream ID == Requester ID */
355 pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid,
361 err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
366 sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
370 *smmu = dev_get_drvdata(smmu_dev);
371 of_phandle_iterator_args(&it, sids, it.cur_count);
372 err = iommu_fwspec_add_ids(dev, sids, it.cur_count);
377 static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
382 idx = find_next_zero_bit(map, end, start);
385 } while (test_and_set_bit(idx, map));
390 static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
395 /* Wait for any pending TLB invalidations to complete */
396 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu,
397 void __iomem *sync, void __iomem *status)
399 unsigned int spin_cnt, delay;
401 writel_relaxed(0, sync);
402 for (delay = 1; delay < TLB_LOOP_TIMEOUT; delay *= 2) {
403 for (spin_cnt = TLB_SPIN_COUNT; spin_cnt > 0; spin_cnt--) {
404 if (!(readl_relaxed(status) & sTLBGSTATUS_GSACTIVE))
410 dev_err_ratelimited(smmu->dev,
411 "TLB sync timed out -- SMMU may be deadlocked\n");
414 static void arm_smmu_tlb_sync_global(struct arm_smmu_device *smmu)
416 void __iomem *base = ARM_SMMU_GR0(smmu);
419 spin_lock_irqsave(&smmu->global_sync_lock, flags);
420 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_GR0_sTLBGSYNC,
421 base + ARM_SMMU_GR0_sTLBGSTATUS);
422 spin_unlock_irqrestore(&smmu->global_sync_lock, flags);
425 static void arm_smmu_tlb_sync_context(void *cookie)
427 struct arm_smmu_domain *smmu_domain = cookie;
428 struct arm_smmu_device *smmu = smmu_domain->smmu;
429 void __iomem *base = ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx);
432 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
433 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_CB_TLBSYNC,
434 base + ARM_SMMU_CB_TLBSTATUS);
435 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
438 static void arm_smmu_tlb_sync_vmid(void *cookie)
440 struct arm_smmu_domain *smmu_domain = cookie;
442 arm_smmu_tlb_sync_global(smmu_domain->smmu);
445 static void arm_smmu_tlb_inv_context_s1(void *cookie)
447 struct arm_smmu_domain *smmu_domain = cookie;
448 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
449 void __iomem *base = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
452 * NOTE: this is not a relaxed write; it needs to guarantee that PTEs
453 * cleared by the current CPU are visible to the SMMU before the TLBI.
455 writel(cfg->asid, base + ARM_SMMU_CB_S1_TLBIASID);
456 arm_smmu_tlb_sync_context(cookie);
459 static void arm_smmu_tlb_inv_context_s2(void *cookie)
461 struct arm_smmu_domain *smmu_domain = cookie;
462 struct arm_smmu_device *smmu = smmu_domain->smmu;
463 void __iomem *base = ARM_SMMU_GR0(smmu);
465 /* NOTE: see above */
466 writel(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
467 arm_smmu_tlb_sync_global(smmu);
470 static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
471 size_t granule, bool leaf, void *cookie)
473 struct arm_smmu_domain *smmu_domain = cookie;
474 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
475 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
476 void __iomem *reg = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
478 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
482 reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
484 if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
488 writel_relaxed(iova, reg);
490 } while (size -= granule);
493 iova |= (u64)cfg->asid << 48;
495 writeq_relaxed(iova, reg);
496 iova += granule >> 12;
497 } while (size -= granule);
500 reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
501 ARM_SMMU_CB_S2_TLBIIPAS2;
504 smmu_write_atomic_lq(iova, reg);
505 iova += granule >> 12;
506 } while (size -= granule);
511 * On MMU-401 at least, the cost of firing off multiple TLBIVMIDs appears
512 * almost negligible, but the benefit of getting the first one in as far ahead
513 * of the sync as possible is significant, hence we don't just make this a
514 * no-op and set .tlb_sync to arm_smmu_inv_context_s2() as you might think.
516 static void arm_smmu_tlb_inv_vmid_nosync(unsigned long iova, size_t size,
517 size_t granule, bool leaf, void *cookie)
519 struct arm_smmu_domain *smmu_domain = cookie;
520 void __iomem *base = ARM_SMMU_GR0(smmu_domain->smmu);
522 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
525 writel_relaxed(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
528 static const struct iommu_gather_ops arm_smmu_s1_tlb_ops = {
529 .tlb_flush_all = arm_smmu_tlb_inv_context_s1,
530 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
531 .tlb_sync = arm_smmu_tlb_sync_context,
534 static const struct iommu_gather_ops arm_smmu_s2_tlb_ops_v2 = {
535 .tlb_flush_all = arm_smmu_tlb_inv_context_s2,
536 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
537 .tlb_sync = arm_smmu_tlb_sync_context,
540 static const struct iommu_gather_ops arm_smmu_s2_tlb_ops_v1 = {
541 .tlb_flush_all = arm_smmu_tlb_inv_context_s2,
542 .tlb_add_flush = arm_smmu_tlb_inv_vmid_nosync,
543 .tlb_sync = arm_smmu_tlb_sync_vmid,
546 static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
550 struct iommu_domain *domain = dev;
551 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
552 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
553 struct arm_smmu_device *smmu = smmu_domain->smmu;
554 void __iomem *cb_base;
556 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
557 fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);
559 if (!(fsr & FSR_FAULT))
562 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
563 iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
565 dev_err_ratelimited(smmu->dev,
566 "Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cb=%d\n",
567 fsr, iova, fsynr, cfg->cbndx);
569 writel(fsr, cb_base + ARM_SMMU_CB_FSR);
573 static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
575 u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
576 struct arm_smmu_device *smmu = dev;
577 void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
579 gfsr = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSR);
580 gfsynr0 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR0);
581 gfsynr1 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR1);
582 gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2);
587 dev_err_ratelimited(smmu->dev,
588 "Unexpected global fault, this could be serious\n");
589 dev_err_ratelimited(smmu->dev,
590 "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
591 gfsr, gfsynr0, gfsynr1, gfsynr2);
593 writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
597 static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
598 struct io_pgtable_cfg *pgtbl_cfg)
600 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
601 struct arm_smmu_cb *cb = &smmu_domain->smmu->cbs[cfg->cbndx];
602 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
608 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
609 cb->tcr[0] = pgtbl_cfg->arm_v7s_cfg.tcr;
611 cb->tcr[0] = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
612 cb->tcr[1] = pgtbl_cfg->arm_lpae_s1_cfg.tcr >> 32;
613 cb->tcr[1] |= TTBCR2_SEP_UPSTREAM;
614 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
615 cb->tcr[1] |= TTBCR2_AS;
618 cb->tcr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
623 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
624 cb->ttbr[0] = pgtbl_cfg->arm_v7s_cfg.ttbr[0];
625 cb->ttbr[1] = pgtbl_cfg->arm_v7s_cfg.ttbr[1];
627 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
628 cb->ttbr[0] |= (u64)cfg->asid << TTBRn_ASID_SHIFT;
629 cb->ttbr[1] = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[1];
630 cb->ttbr[1] |= (u64)cfg->asid << TTBRn_ASID_SHIFT;
633 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
636 /* MAIRs (stage-1 only) */
638 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
639 cb->mair[0] = pgtbl_cfg->arm_v7s_cfg.prrr;
640 cb->mair[1] = pgtbl_cfg->arm_v7s_cfg.nmrr;
642 cb->mair[0] = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
643 cb->mair[1] = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
648 static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
652 struct arm_smmu_cb *cb = &smmu->cbs[idx];
653 struct arm_smmu_cfg *cfg = cb->cfg;
654 void __iomem *cb_base, *gr1_base;
656 cb_base = ARM_SMMU_CB(smmu, idx);
658 /* Unassigned context banks only need disabling */
660 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
664 gr1_base = ARM_SMMU_GR1(smmu);
665 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
668 if (smmu->version > ARM_SMMU_V1) {
669 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
670 reg = CBA2R_RW64_64BIT;
672 reg = CBA2R_RW64_32BIT;
673 /* 16-bit VMIDs live in CBA2R */
674 if (smmu->features & ARM_SMMU_FEAT_VMID16)
675 reg |= cfg->vmid << CBA2R_VMID_SHIFT;
677 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(idx));
682 if (smmu->version < ARM_SMMU_V2)
683 reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
686 * Use the weakest shareability/memory types, so they are
687 * overridden by the ttbcr/pte.
690 reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
691 (CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
692 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
693 /* 8-bit VMIDs live in CBAR */
694 reg |= cfg->vmid << CBAR_VMID_SHIFT;
696 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(idx));
700 * We must write this before the TTBRs, since it determines the
701 * access behaviour of some fields (in particular, ASID[15:8]).
703 if (stage1 && smmu->version > ARM_SMMU_V1)
704 writel_relaxed(cb->tcr[1], cb_base + ARM_SMMU_CB_TTBCR2);
705 writel_relaxed(cb->tcr[0], cb_base + ARM_SMMU_CB_TTBCR);
708 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
709 writel_relaxed(cfg->asid, cb_base + ARM_SMMU_CB_CONTEXTIDR);
710 writel_relaxed(cb->ttbr[0], cb_base + ARM_SMMU_CB_TTBR0);
711 writel_relaxed(cb->ttbr[1], cb_base + ARM_SMMU_CB_TTBR1);
713 writeq_relaxed(cb->ttbr[0], cb_base + ARM_SMMU_CB_TTBR0);
715 writeq_relaxed(cb->ttbr[1], cb_base + ARM_SMMU_CB_TTBR1);
718 /* MAIRs (stage-1 only) */
720 writel_relaxed(cb->mair[0], cb_base + ARM_SMMU_CB_S1_MAIR0);
721 writel_relaxed(cb->mair[1], cb_base + ARM_SMMU_CB_S1_MAIR1);
725 reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
727 reg |= SCTLR_S1_ASIDPNE;
728 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
731 writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
734 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
735 struct arm_smmu_device *smmu)
737 int irq, start, ret = 0;
738 unsigned long ias, oas;
739 struct io_pgtable_ops *pgtbl_ops;
740 struct io_pgtable_cfg pgtbl_cfg;
741 enum io_pgtable_fmt fmt;
742 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
743 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
745 mutex_lock(&smmu_domain->init_mutex);
746 if (smmu_domain->smmu)
749 if (domain->type == IOMMU_DOMAIN_IDENTITY) {
750 smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS;
751 smmu_domain->smmu = smmu;
756 * Mapping the requested stage onto what we support is surprisingly
757 * complicated, mainly because the spec allows S1+S2 SMMUs without
758 * support for nested translation. That means we end up with the
761 * Requested Supported Actual
771 * Note that you can't actually request stage-2 mappings.
773 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
774 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
775 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
776 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
779 * Choosing a suitable context format is even more fiddly. Until we
780 * grow some way for the caller to express a preference, and/or move
781 * the decision into the io-pgtable code where it arguably belongs,
782 * just aim for the closest thing to the rest of the system, and hope
783 * that the hardware isn't esoteric enough that we can't assume AArch64
784 * support to be a superset of AArch32 support...
786 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
787 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
788 if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) &&
789 !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) &&
790 (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) &&
791 (smmu_domain->stage == ARM_SMMU_DOMAIN_S1))
792 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S;
793 if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) &&
794 (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K |
795 ARM_SMMU_FEAT_FMT_AARCH64_16K |
796 ARM_SMMU_FEAT_FMT_AARCH64_4K)))
797 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64;
799 if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
804 switch (smmu_domain->stage) {
805 case ARM_SMMU_DOMAIN_S1:
806 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
807 start = smmu->num_s2_context_banks;
809 oas = smmu->ipa_size;
810 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
811 fmt = ARM_64_LPAE_S1;
812 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
813 fmt = ARM_32_LPAE_S1;
814 ias = min(ias, 32UL);
815 oas = min(oas, 40UL);
818 ias = min(ias, 32UL);
819 oas = min(oas, 32UL);
821 smmu_domain->tlb_ops = &arm_smmu_s1_tlb_ops;
823 case ARM_SMMU_DOMAIN_NESTED:
825 * We will likely want to change this if/when KVM gets
828 case ARM_SMMU_DOMAIN_S2:
829 cfg->cbar = CBAR_TYPE_S2_TRANS;
831 ias = smmu->ipa_size;
833 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
834 fmt = ARM_64_LPAE_S2;
836 fmt = ARM_32_LPAE_S2;
837 ias = min(ias, 40UL);
838 oas = min(oas, 40UL);
840 if (smmu->version == ARM_SMMU_V2)
841 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v2;
843 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v1;
849 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
850 smmu->num_context_banks);
855 if (smmu->version < ARM_SMMU_V2) {
856 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
857 cfg->irptndx %= smmu->num_context_irqs;
859 cfg->irptndx = cfg->cbndx;
862 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2)
863 cfg->vmid = cfg->cbndx + 1 + smmu->cavium_id_base;
865 cfg->asid = cfg->cbndx + smmu->cavium_id_base;
867 pgtbl_cfg = (struct io_pgtable_cfg) {
868 .pgsize_bitmap = smmu->pgsize_bitmap,
871 .tlb = smmu_domain->tlb_ops,
872 .iommu_dev = smmu->dev,
875 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
876 pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_NO_DMA;
878 if (smmu_domain->non_strict)
879 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_NON_STRICT;
881 smmu_domain->smmu = smmu;
882 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
888 /* Update the domain's page sizes to reflect the page table format */
889 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
890 domain->geometry.aperture_end = (1UL << ias) - 1;
891 domain->geometry.force_aperture = true;
893 /* Initialise the context bank with our page table cfg */
894 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
895 arm_smmu_write_context_bank(smmu, cfg->cbndx);
898 * Request context fault interrupt. Do this last to avoid the
899 * handler seeing a half-initialised domain state.
901 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
902 ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
903 IRQF_SHARED, "arm-smmu-context-fault", domain);
905 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
907 cfg->irptndx = INVALID_IRPTNDX;
910 mutex_unlock(&smmu_domain->init_mutex);
912 /* Publish page table ops for map/unmap */
913 smmu_domain->pgtbl_ops = pgtbl_ops;
917 smmu_domain->smmu = NULL;
919 mutex_unlock(&smmu_domain->init_mutex);
923 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
925 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
926 struct arm_smmu_device *smmu = smmu_domain->smmu;
927 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
930 if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY)
934 * Disable the context bank and free the page tables before freeing
937 smmu->cbs[cfg->cbndx].cfg = NULL;
938 arm_smmu_write_context_bank(smmu, cfg->cbndx);
940 if (cfg->irptndx != INVALID_IRPTNDX) {
941 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
942 devm_free_irq(smmu->dev, irq, domain);
945 free_io_pgtable_ops(smmu_domain->pgtbl_ops);
946 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
949 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
951 struct arm_smmu_domain *smmu_domain;
953 if (type != IOMMU_DOMAIN_UNMANAGED &&
954 type != IOMMU_DOMAIN_DMA &&
955 type != IOMMU_DOMAIN_IDENTITY)
958 * Allocate the domain and initialise some of its data structures.
959 * We can't really do anything meaningful until we've added a
962 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
966 if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
967 iommu_get_dma_cookie(&smmu_domain->domain))) {
972 mutex_init(&smmu_domain->init_mutex);
973 spin_lock_init(&smmu_domain->cb_lock);
975 return &smmu_domain->domain;
978 static void arm_smmu_domain_free(struct iommu_domain *domain)
980 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
983 * Free the domain resources. We assume that all devices have
984 * already been detached.
986 iommu_put_dma_cookie(domain);
987 arm_smmu_destroy_domain_context(domain);
991 static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
993 struct arm_smmu_smr *smr = smmu->smrs + idx;
994 u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
996 if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
998 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
1001 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
1003 struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
1004 u32 reg = (s2cr->type & S2CR_TYPE_MASK) << S2CR_TYPE_SHIFT |
1005 (s2cr->cbndx & S2CR_CBNDX_MASK) << S2CR_CBNDX_SHIFT |
1006 (s2cr->privcfg & S2CR_PRIVCFG_MASK) << S2CR_PRIVCFG_SHIFT;
1008 if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
1009 smmu->smrs[idx].valid)
1010 reg |= S2CR_EXIDVALID;
1011 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_S2CR(idx));
1014 static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
1016 arm_smmu_write_s2cr(smmu, idx);
1018 arm_smmu_write_smr(smmu, idx);
1022 * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function
1023 * should be called after sCR0 is written.
1025 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
1027 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1034 * SMR.ID bits may not be preserved if the corresponding MASK
1035 * bits are set, so check each one separately. We can reject
1036 * masters later if they try to claim IDs outside these masks.
1038 smr = smmu->streamid_mask << SMR_ID_SHIFT;
1039 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1040 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1041 smmu->streamid_mask = smr >> SMR_ID_SHIFT;
1043 smr = smmu->streamid_mask << SMR_MASK_SHIFT;
1044 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1045 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1046 smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
1049 static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1051 struct arm_smmu_smr *smrs = smmu->smrs;
1052 int i, free_idx = -ENOSPC;
1054 /* Stream indexing is blissfully easy */
1058 /* Validating SMRs is... less so */
1059 for (i = 0; i < smmu->num_mapping_groups; ++i) {
1060 if (!smrs[i].valid) {
1062 * Note the first free entry we come across, which
1063 * we'll claim in the end if nothing else matches.
1070 * If the new entry is _entirely_ matched by an existing entry,
1071 * then reuse that, with the guarantee that there also cannot
1072 * be any subsequent conflicting entries. In normal use we'd
1073 * expect simply identical entries for this case, but there's
1074 * no harm in accommodating the generalisation.
1076 if ((mask & smrs[i].mask) == mask &&
1077 !((id ^ smrs[i].id) & ~smrs[i].mask))
1080 * If the new entry has any other overlap with an existing one,
1081 * though, then there always exists at least one stream ID
1082 * which would cause a conflict, and we can't allow that risk.
1084 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
1091 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
1093 if (--smmu->s2crs[idx].count)
1096 smmu->s2crs[idx] = s2cr_init_val;
1098 smmu->smrs[idx].valid = false;
1103 static int arm_smmu_master_alloc_smes(struct device *dev)
1105 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1106 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1107 struct arm_smmu_device *smmu = cfg->smmu;
1108 struct arm_smmu_smr *smrs = smmu->smrs;
1109 struct iommu_group *group;
1112 mutex_lock(&smmu->stream_map_mutex);
1113 /* Figure out a viable stream map entry allocation */
1114 for_each_cfg_sme(fwspec, i, idx) {
1115 u16 sid = fwspec->ids[i];
1116 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1118 if (idx != INVALID_SMENDX) {
1123 ret = arm_smmu_find_sme(smmu, sid, mask);
1128 if (smrs && smmu->s2crs[idx].count == 0) {
1130 smrs[idx].mask = mask;
1131 smrs[idx].valid = true;
1133 smmu->s2crs[idx].count++;
1134 cfg->smendx[i] = (s16)idx;
1137 group = iommu_group_get_for_dev(dev);
1139 group = ERR_PTR(-ENOMEM);
1140 if (IS_ERR(group)) {
1141 ret = PTR_ERR(group);
1144 iommu_group_put(group);
1146 /* It worked! Now, poke the actual hardware */
1147 for_each_cfg_sme(fwspec, i, idx) {
1148 arm_smmu_write_sme(smmu, idx);
1149 smmu->s2crs[idx].group = group;
1152 mutex_unlock(&smmu->stream_map_mutex);
1157 arm_smmu_free_sme(smmu, cfg->smendx[i]);
1158 cfg->smendx[i] = INVALID_SMENDX;
1160 mutex_unlock(&smmu->stream_map_mutex);
1164 static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1166 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1167 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1170 mutex_lock(&smmu->stream_map_mutex);
1171 for_each_cfg_sme(fwspec, i, idx) {
1172 if (arm_smmu_free_sme(smmu, idx))
1173 arm_smmu_write_sme(smmu, idx);
1174 cfg->smendx[i] = INVALID_SMENDX;
1176 mutex_unlock(&smmu->stream_map_mutex);
1179 static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1180 struct iommu_fwspec *fwspec)
1182 struct arm_smmu_device *smmu = smmu_domain->smmu;
1183 struct arm_smmu_s2cr *s2cr = smmu->s2crs;
1184 u8 cbndx = smmu_domain->cfg.cbndx;
1185 enum arm_smmu_s2cr_type type;
1188 if (smmu_domain->stage == ARM_SMMU_DOMAIN_BYPASS)
1189 type = S2CR_TYPE_BYPASS;
1191 type = S2CR_TYPE_TRANS;
1193 for_each_cfg_sme(fwspec, i, idx) {
1194 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1197 s2cr[idx].type = type;
1198 s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
1199 s2cr[idx].cbndx = cbndx;
1200 arm_smmu_write_s2cr(smmu, idx);
1205 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1208 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1209 struct arm_smmu_device *smmu;
1210 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1212 if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1213 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1218 * FIXME: The arch/arm DMA API code tries to attach devices to its own
1219 * domains between of_xlate() and add_device() - we have no way to cope
1220 * with that, so until ARM gets converted to rely on groups and default
1221 * domains, just say no (but more politely than by dereferencing NULL).
1222 * This should be at least a WARN_ON once that's sorted.
1224 if (!fwspec->iommu_priv)
1227 smmu = fwspec_smmu(fwspec);
1228 /* Ensure that the domain is finalised */
1229 ret = arm_smmu_init_domain_context(domain, smmu);
1234 * Sanity check the domain. We don't support domains across
1237 if (smmu_domain->smmu != smmu) {
1239 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1240 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1244 /* Looks ok, so add the device to the domain */
1245 return arm_smmu_domain_add_master(smmu_domain, fwspec);
1248 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1249 phys_addr_t paddr, size_t size, int prot)
1251 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1256 return ops->map(ops, iova, paddr, size, prot);
1259 static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1262 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1267 return ops->unmap(ops, iova, size);
1270 static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain)
1272 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1274 if (smmu_domain->tlb_ops)
1275 smmu_domain->tlb_ops->tlb_flush_all(smmu_domain);
1278 static void arm_smmu_iotlb_sync(struct iommu_domain *domain)
1280 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1282 if (smmu_domain->tlb_ops)
1283 smmu_domain->tlb_ops->tlb_sync(smmu_domain);
1286 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1289 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1290 struct arm_smmu_device *smmu = smmu_domain->smmu;
1291 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1292 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1293 struct device *dev = smmu->dev;
1294 void __iomem *cb_base;
1297 unsigned long va, flags;
1299 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
1301 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
1302 /* ATS1 registers can only be written atomically */
1303 va = iova & ~0xfffUL;
1304 if (smmu->version == ARM_SMMU_V2)
1305 smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
1306 else /* Register is only 32-bit in v1 */
1307 writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
1309 if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
1310 !(tmp & ATSR_ACTIVE), 5, 50)) {
1311 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1313 "iova to phys timed out on %pad. Falling back to software table walk.\n",
1315 return ops->iova_to_phys(ops, iova);
1318 phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1319 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1320 if (phys & CB_PAR_F) {
1321 dev_err(dev, "translation fault!\n");
1322 dev_err(dev, "PAR = 0x%llx\n", phys);
1326 return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1329 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1332 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1333 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1335 if (domain->type == IOMMU_DOMAIN_IDENTITY)
1341 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
1342 smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
1343 return arm_smmu_iova_to_phys_hard(domain, iova);
1345 return ops->iova_to_phys(ops, iova);
1348 static bool arm_smmu_capable(enum iommu_cap cap)
1351 case IOMMU_CAP_CACHE_COHERENCY:
1353 * Return true here as the SMMU can always send out coherent
1357 case IOMMU_CAP_NOEXEC:
1364 static int arm_smmu_match_node(struct device *dev, void *data)
1366 return dev->fwnode == data;
1370 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
1372 struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
1373 fwnode, arm_smmu_match_node);
1375 return dev ? dev_get_drvdata(dev) : NULL;
1378 static int arm_smmu_add_device(struct device *dev)
1380 struct arm_smmu_device *smmu;
1381 struct arm_smmu_master_cfg *cfg;
1382 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1385 if (using_legacy_binding) {
1386 ret = arm_smmu_register_legacy_master(dev, &smmu);
1389 * If dev->iommu_fwspec is initally NULL, arm_smmu_register_legacy_master()
1390 * will allocate/initialise a new one. Thus we need to update fwspec for
1393 fwspec = dev->iommu_fwspec;
1396 } else if (fwspec && fwspec->ops == &arm_smmu_ops) {
1397 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
1403 for (i = 0; i < fwspec->num_ids; i++) {
1404 u16 sid = fwspec->ids[i];
1405 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1407 if (sid & ~smmu->streamid_mask) {
1408 dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1409 sid, smmu->streamid_mask);
1412 if (mask & ~smmu->smr_mask_mask) {
1413 dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
1414 mask, smmu->smr_mask_mask);
1420 cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
1426 fwspec->iommu_priv = cfg;
1428 cfg->smendx[i] = INVALID_SMENDX;
1430 ret = arm_smmu_master_alloc_smes(dev);
1434 iommu_device_link(&smmu->iommu, dev);
1441 iommu_fwspec_free(dev);
1445 static void arm_smmu_remove_device(struct device *dev)
1447 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1448 struct arm_smmu_master_cfg *cfg;
1449 struct arm_smmu_device *smmu;
1452 if (!fwspec || fwspec->ops != &arm_smmu_ops)
1455 cfg = fwspec->iommu_priv;
1458 iommu_device_unlink(&smmu->iommu, dev);
1459 arm_smmu_master_free_smes(fwspec);
1460 iommu_group_remove_device(dev);
1461 kfree(fwspec->iommu_priv);
1462 iommu_fwspec_free(dev);
1465 static struct iommu_group *arm_smmu_device_group(struct device *dev)
1467 struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1468 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1469 struct iommu_group *group = NULL;
1472 for_each_cfg_sme(fwspec, i, idx) {
1473 if (group && smmu->s2crs[idx].group &&
1474 group != smmu->s2crs[idx].group)
1475 return ERR_PTR(-EINVAL);
1477 group = smmu->s2crs[idx].group;
1481 return iommu_group_ref_get(group);
1483 if (dev_is_pci(dev))
1484 group = pci_device_group(dev);
1486 group = generic_device_group(dev);
1491 static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1492 enum iommu_attr attr, void *data)
1494 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1496 switch(domain->type) {
1497 case IOMMU_DOMAIN_UNMANAGED:
1499 case DOMAIN_ATTR_NESTING:
1500 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1506 case IOMMU_DOMAIN_DMA:
1508 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1509 *(int *)data = smmu_domain->non_strict;
1520 static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1521 enum iommu_attr attr, void *data)
1524 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1526 mutex_lock(&smmu_domain->init_mutex);
1528 switch(domain->type) {
1529 case IOMMU_DOMAIN_UNMANAGED:
1531 case DOMAIN_ATTR_NESTING:
1532 if (smmu_domain->smmu) {
1538 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1540 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1546 case IOMMU_DOMAIN_DMA:
1548 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1549 smmu_domain->non_strict = *(int *)data;
1559 mutex_unlock(&smmu_domain->init_mutex);
1563 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1567 if (args->args_count > 0)
1568 fwid |= (u16)args->args[0];
1570 if (args->args_count > 1)
1571 fwid |= (u16)args->args[1] << SMR_MASK_SHIFT;
1572 else if (!of_property_read_u32(args->np, "stream-match-mask", &mask))
1573 fwid |= (u16)mask << SMR_MASK_SHIFT;
1575 return iommu_fwspec_add_ids(dev, &fwid, 1);
1578 static void arm_smmu_get_resv_regions(struct device *dev,
1579 struct list_head *head)
1581 struct iommu_resv_region *region;
1582 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1584 region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
1585 prot, IOMMU_RESV_SW_MSI);
1589 list_add_tail(®ion->list, head);
1591 iommu_dma_get_resv_regions(dev, head);
1594 static void arm_smmu_put_resv_regions(struct device *dev,
1595 struct list_head *head)
1597 struct iommu_resv_region *entry, *next;
1599 list_for_each_entry_safe(entry, next, head, list)
1603 static struct iommu_ops arm_smmu_ops = {
1604 .capable = arm_smmu_capable,
1605 .domain_alloc = arm_smmu_domain_alloc,
1606 .domain_free = arm_smmu_domain_free,
1607 .attach_dev = arm_smmu_attach_dev,
1608 .map = arm_smmu_map,
1609 .unmap = arm_smmu_unmap,
1610 .flush_iotlb_all = arm_smmu_flush_iotlb_all,
1611 .iotlb_sync = arm_smmu_iotlb_sync,
1612 .iova_to_phys = arm_smmu_iova_to_phys,
1613 .add_device = arm_smmu_add_device,
1614 .remove_device = arm_smmu_remove_device,
1615 .device_group = arm_smmu_device_group,
1616 .domain_get_attr = arm_smmu_domain_get_attr,
1617 .domain_set_attr = arm_smmu_domain_set_attr,
1618 .of_xlate = arm_smmu_of_xlate,
1619 .get_resv_regions = arm_smmu_get_resv_regions,
1620 .put_resv_regions = arm_smmu_put_resv_regions,
1621 .pgsize_bitmap = -1UL, /* Restricted during device attach */
1624 static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1626 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1630 /* clear global FSR */
1631 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1632 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1635 * Reset stream mapping groups: Initial values mark all SMRn as
1636 * invalid and all S2CRn as bypass unless overridden.
1638 for (i = 0; i < smmu->num_mapping_groups; ++i)
1639 arm_smmu_write_sme(smmu, i);
1641 if (smmu->model == ARM_MMU500) {
1643 * Before clearing ARM_MMU500_ACTLR_CPRE, need to
1644 * clear CACHE_LOCK bit of ACR first. And, CACHE_LOCK
1645 * bit is only present in MMU-500r2 onwards.
1647 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
1648 major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
1649 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
1651 reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
1653 * Allow unmatched Stream IDs to allocate bypass
1654 * TLB entries for reduced latency.
1656 reg |= ARM_MMU500_ACR_SMTNMB_TLBEN | ARM_MMU500_ACR_S2CRB_TLBEN;
1657 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
1660 /* Make sure all context banks are disabled and clear CB_FSR */
1661 for (i = 0; i < smmu->num_context_banks; ++i) {
1662 void __iomem *cb_base = ARM_SMMU_CB(smmu, i);
1664 arm_smmu_write_context_bank(smmu, i);
1665 writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
1667 * Disable MMU-500's not-particularly-beneficial next-page
1668 * prefetcher for the sake of errata #841119 and #826419.
1670 if (smmu->model == ARM_MMU500) {
1671 reg = readl_relaxed(cb_base + ARM_SMMU_CB_ACTLR);
1672 reg &= ~ARM_MMU500_ACTLR_CPRE;
1673 writel_relaxed(reg, cb_base + ARM_SMMU_CB_ACTLR);
1677 /* Invalidate the TLB, just in case */
1678 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
1679 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
1681 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1683 /* Enable fault reporting */
1684 reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1686 /* Disable TLB broadcasting. */
1687 reg |= (sCR0_VMIDPNE | sCR0_PTM);
1689 /* Enable client access, handling unmatched streams as appropriate */
1690 reg &= ~sCR0_CLIENTPD;
1694 reg &= ~sCR0_USFCFG;
1696 /* Disable forced broadcasting */
1699 /* Don't upgrade barriers */
1700 reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
1702 if (smmu->features & ARM_SMMU_FEAT_VMID16)
1703 reg |= sCR0_VMID16EN;
1705 if (smmu->features & ARM_SMMU_FEAT_EXIDS)
1706 reg |= sCR0_EXIDENABLE;
1708 /* Push the button */
1709 arm_smmu_tlb_sync_global(smmu);
1710 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1713 static int arm_smmu_id_size_to_bits(int size)
1732 static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1735 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1737 bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1740 dev_notice(smmu->dev, "probing hardware configuration...\n");
1741 dev_notice(smmu->dev, "SMMUv%d with:\n",
1742 smmu->version == ARM_SMMU_V2 ? 2 : 1);
1745 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1747 /* Restrict available stages based on module parameter */
1748 if (force_stage == 1)
1749 id &= ~(ID0_S2TS | ID0_NTS);
1750 else if (force_stage == 2)
1751 id &= ~(ID0_S1TS | ID0_NTS);
1753 if (id & ID0_S1TS) {
1754 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1755 dev_notice(smmu->dev, "\tstage 1 translation\n");
1758 if (id & ID0_S2TS) {
1759 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1760 dev_notice(smmu->dev, "\tstage 2 translation\n");
1764 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1765 dev_notice(smmu->dev, "\tnested translation\n");
1768 if (!(smmu->features &
1769 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1770 dev_err(smmu->dev, "\tno translation support!\n");
1774 if ((id & ID0_S1TS) &&
1775 ((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
1776 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1777 dev_notice(smmu->dev, "\taddress translation ops\n");
1781 * In order for DMA API calls to work properly, we must defer to what
1782 * the FW says about coherency, regardless of what the hardware claims.
1783 * Fortunately, this also opens up a workaround for systems where the
1784 * ID register value has ended up configured incorrectly.
1786 cttw_reg = !!(id & ID0_CTTW);
1787 if (cttw_fw || cttw_reg)
1788 dev_notice(smmu->dev, "\t%scoherent table walk\n",
1789 cttw_fw ? "" : "non-");
1790 if (cttw_fw != cttw_reg)
1791 dev_notice(smmu->dev,
1792 "\t(IDR0.CTTW overridden by FW configuration)\n");
1794 /* Max. number of entries we have for stream matching/indexing */
1795 if (smmu->version == ARM_SMMU_V2 && id & ID0_EXIDS) {
1796 smmu->features |= ARM_SMMU_FEAT_EXIDS;
1799 size = 1 << ((id >> ID0_NUMSIDB_SHIFT) & ID0_NUMSIDB_MASK);
1801 smmu->streamid_mask = size - 1;
1803 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1804 size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
1807 "stream-matching supported, but no SMRs present!\n");
1811 /* Zero-initialised to mark as invalid */
1812 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
1817 dev_notice(smmu->dev,
1818 "\tstream matching with %lu register groups", size);
1820 /* s2cr->type == 0 means translation, so initialise explicitly */
1821 smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
1825 for (i = 0; i < size; i++)
1826 smmu->s2crs[i] = s2cr_init_val;
1828 smmu->num_mapping_groups = size;
1829 mutex_init(&smmu->stream_map_mutex);
1830 spin_lock_init(&smmu->global_sync_lock);
1832 if (smmu->version < ARM_SMMU_V2 || !(id & ID0_PTFS_NO_AARCH32)) {
1833 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L;
1834 if (!(id & ID0_PTFS_NO_AARCH32S))
1835 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S;
1839 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1840 smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1842 /* Check for size mismatch of SMMU address space from mapped region */
1843 size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
1844 size <<= smmu->pgshift;
1845 if (smmu->cb_base != gr0_base + size)
1847 "SMMU address space size (0x%lx) differs from mapped region size (0x%tx)!\n",
1848 size * 2, (smmu->cb_base - gr0_base) * 2);
1850 smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1851 smmu->num_context_banks = (id >> ID1_NUMCB_SHIFT) & ID1_NUMCB_MASK;
1852 if (smmu->num_s2_context_banks > smmu->num_context_banks) {
1853 dev_err(smmu->dev, "impossible number of S2 context banks!\n");
1856 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1857 smmu->num_context_banks, smmu->num_s2_context_banks);
1859 * Cavium CN88xx erratum #27704.
1860 * Ensure ASID and VMID allocation is unique across all SMMUs in
1863 if (smmu->model == CAVIUM_SMMUV2) {
1864 smmu->cavium_id_base =
1865 atomic_add_return(smmu->num_context_banks,
1866 &cavium_smmu_context_count);
1867 smmu->cavium_id_base -= smmu->num_context_banks;
1868 dev_notice(smmu->dev, "\tenabling workaround for Cavium erratum 27704\n");
1870 smmu->cbs = devm_kcalloc(smmu->dev, smmu->num_context_banks,
1871 sizeof(*smmu->cbs), GFP_KERNEL);
1876 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID2);
1877 size = arm_smmu_id_size_to_bits((id >> ID2_IAS_SHIFT) & ID2_IAS_MASK);
1878 smmu->ipa_size = size;
1880 /* The output mask is also applied for bypass */
1881 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1882 smmu->pa_size = size;
1884 if (id & ID2_VMID16)
1885 smmu->features |= ARM_SMMU_FEAT_VMID16;
1888 * What the page table walker can address actually depends on which
1889 * descriptor format is in use, but since a) we don't know that yet,
1890 * and b) it can vary per context bank, this will have to do...
1892 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1894 "failed to set DMA mask for table walker\n");
1896 if (smmu->version < ARM_SMMU_V2) {
1897 smmu->va_size = smmu->ipa_size;
1898 if (smmu->version == ARM_SMMU_V1_64K)
1899 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1901 size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
1902 smmu->va_size = arm_smmu_id_size_to_bits(size);
1903 if (id & ID2_PTFS_4K)
1904 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1905 if (id & ID2_PTFS_16K)
1906 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1907 if (id & ID2_PTFS_64K)
1908 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1911 /* Now we've corralled the various formats, what'll it do? */
1912 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
1913 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
1914 if (smmu->features &
1915 (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
1916 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
1917 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
1918 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
1919 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
1920 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
1922 if (arm_smmu_ops.pgsize_bitmap == -1UL)
1923 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
1925 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
1926 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
1927 smmu->pgsize_bitmap);
1930 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
1931 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1932 smmu->va_size, smmu->ipa_size);
1934 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
1935 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
1936 smmu->ipa_size, smmu->pa_size);
1941 struct arm_smmu_match_data {
1942 enum arm_smmu_arch_version version;
1943 enum arm_smmu_implementation model;
1946 #define ARM_SMMU_MATCH_DATA(name, ver, imp) \
1947 static struct arm_smmu_match_data name = { .version = ver, .model = imp }
1949 ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
1950 ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
1951 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1952 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1953 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1955 static const struct of_device_id arm_smmu_of_match[] = {
1956 { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
1957 { .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
1958 { .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
1959 { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
1960 { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
1961 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
1964 MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
1967 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
1972 case ACPI_IORT_SMMU_V1:
1973 case ACPI_IORT_SMMU_CORELINK_MMU400:
1974 smmu->version = ARM_SMMU_V1;
1975 smmu->model = GENERIC_SMMU;
1977 case ACPI_IORT_SMMU_CORELINK_MMU401:
1978 smmu->version = ARM_SMMU_V1_64K;
1979 smmu->model = GENERIC_SMMU;
1981 case ACPI_IORT_SMMU_V2:
1982 smmu->version = ARM_SMMU_V2;
1983 smmu->model = GENERIC_SMMU;
1985 case ACPI_IORT_SMMU_CORELINK_MMU500:
1986 smmu->version = ARM_SMMU_V2;
1987 smmu->model = ARM_MMU500;
1989 case ACPI_IORT_SMMU_CAVIUM_THUNDERX:
1990 smmu->version = ARM_SMMU_V2;
1991 smmu->model = CAVIUM_SMMUV2;
2000 static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2001 struct arm_smmu_device *smmu)
2003 struct device *dev = smmu->dev;
2004 struct acpi_iort_node *node =
2005 *(struct acpi_iort_node **)dev_get_platdata(dev);
2006 struct acpi_iort_smmu *iort_smmu;
2009 /* Retrieve SMMU1/2 specific data */
2010 iort_smmu = (struct acpi_iort_smmu *)node->node_data;
2012 ret = acpi_smmu_get_data(iort_smmu->model, smmu);
2016 /* Ignore the configuration access interrupt */
2017 smmu->num_global_irqs = 1;
2019 if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK)
2020 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2025 static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2026 struct arm_smmu_device *smmu)
2032 static int arm_smmu_device_dt_probe(struct platform_device *pdev,
2033 struct arm_smmu_device *smmu)
2035 const struct arm_smmu_match_data *data;
2036 struct device *dev = &pdev->dev;
2037 bool legacy_binding;
2039 if (of_property_read_u32(dev->of_node, "#global-interrupts",
2040 &smmu->num_global_irqs)) {
2041 dev_err(dev, "missing #global-interrupts property\n");
2045 data = of_device_get_match_data(dev);
2046 smmu->version = data->version;
2047 smmu->model = data->model;
2049 parse_driver_options(smmu);
2051 legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
2052 if (legacy_binding && !using_generic_binding) {
2053 if (!using_legacy_binding)
2054 pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
2055 using_legacy_binding = true;
2056 } else if (!legacy_binding && !using_legacy_binding) {
2057 using_generic_binding = true;
2059 dev_err(dev, "not probing due to mismatched DT properties\n");
2063 if (of_dma_is_coherent(dev->of_node))
2064 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2069 static void arm_smmu_bus_init(void)
2071 /* Oh, for a proper bus abstraction */
2072 if (!iommu_present(&platform_bus_type))
2073 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
2074 #ifdef CONFIG_ARM_AMBA
2075 if (!iommu_present(&amba_bustype))
2076 bus_set_iommu(&amba_bustype, &arm_smmu_ops);
2079 if (!iommu_present(&pci_bus_type)) {
2081 bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
2086 static int arm_smmu_device_probe(struct platform_device *pdev)
2088 struct resource *res;
2089 resource_size_t ioaddr;
2090 struct arm_smmu_device *smmu;
2091 struct device *dev = &pdev->dev;
2092 int num_irqs, i, err;
2094 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
2096 dev_err(dev, "failed to allocate arm_smmu_device\n");
2102 err = arm_smmu_device_dt_probe(pdev, smmu);
2104 err = arm_smmu_device_acpi_probe(pdev, smmu);
2109 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2110 ioaddr = res->start;
2111 smmu->base = devm_ioremap_resource(dev, res);
2112 if (IS_ERR(smmu->base))
2113 return PTR_ERR(smmu->base);
2114 smmu->cb_base = smmu->base + resource_size(res) / 2;
2117 while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
2119 if (num_irqs > smmu->num_global_irqs)
2120 smmu->num_context_irqs++;
2123 if (!smmu->num_context_irqs) {
2124 dev_err(dev, "found %d interrupts but expected at least %d\n",
2125 num_irqs, smmu->num_global_irqs + 1);
2129 smmu->irqs = devm_kcalloc(dev, num_irqs, sizeof(*smmu->irqs),
2132 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
2136 for (i = 0; i < num_irqs; ++i) {
2137 int irq = platform_get_irq(pdev, i);
2140 dev_err(dev, "failed to get irq index %d\n", i);
2143 smmu->irqs[i] = irq;
2146 err = arm_smmu_device_cfg_probe(smmu);
2150 if (smmu->version == ARM_SMMU_V2) {
2151 if (smmu->num_context_banks > smmu->num_context_irqs) {
2153 "found only %d context irq(s) but %d required\n",
2154 smmu->num_context_irqs, smmu->num_context_banks);
2158 /* Ignore superfluous interrupts */
2159 smmu->num_context_irqs = smmu->num_context_banks;
2162 for (i = 0; i < smmu->num_global_irqs; ++i) {
2163 err = devm_request_irq(smmu->dev, smmu->irqs[i],
2164 arm_smmu_global_fault,
2166 "arm-smmu global fault",
2169 dev_err(dev, "failed to request global IRQ %d (%u)\n",
2175 err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL,
2176 "smmu.%pa", &ioaddr);
2178 dev_err(dev, "Failed to register iommu in sysfs\n");
2182 iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
2183 iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);
2185 err = iommu_device_register(&smmu->iommu);
2187 dev_err(dev, "Failed to register iommu\n");
2191 platform_set_drvdata(pdev, smmu);
2192 arm_smmu_device_reset(smmu);
2193 arm_smmu_test_smr_masks(smmu);
2196 * For ACPI and generic DT bindings, an SMMU will be probed before
2197 * any device which might need it, so we want the bus ops in place
2198 * ready to handle default domain setup as soon as any SMMU exists.
2200 if (!using_legacy_binding)
2201 arm_smmu_bus_init();
2207 * With the legacy DT binding in play, though, we have no guarantees about
2208 * probe order, but then we're also not doing default domains, so we can
2209 * delay setting bus ops until we're sure every possible SMMU is ready,
2210 * and that way ensure that no add_device() calls get missed.
2212 static int arm_smmu_legacy_bus_init(void)
2214 if (using_legacy_binding)
2215 arm_smmu_bus_init();
2218 device_initcall_sync(arm_smmu_legacy_bus_init);
2220 static int arm_smmu_device_remove(struct platform_device *pdev)
2222 struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2227 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2228 dev_err(&pdev->dev, "removing device with active domains!\n");
2230 /* Turn the thing off */
2231 writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2235 static void arm_smmu_device_shutdown(struct platform_device *pdev)
2237 arm_smmu_device_remove(pdev);
2240 static int __maybe_unused arm_smmu_pm_resume(struct device *dev)
2242 struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2244 arm_smmu_device_reset(smmu);
2248 static SIMPLE_DEV_PM_OPS(arm_smmu_pm_ops, NULL, arm_smmu_pm_resume);
2250 static struct platform_driver arm_smmu_driver = {
2253 .of_match_table = of_match_ptr(arm_smmu_of_match),
2254 .pm = &arm_smmu_pm_ops,
2256 .probe = arm_smmu_device_probe,
2257 .remove = arm_smmu_device_remove,
2258 .shutdown = arm_smmu_device_shutdown,
2260 module_platform_driver(arm_smmu_driver);
2262 MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
2263 MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
2264 MODULE_LICENSE("GPL v2");