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/io-pgtable.h>
43 #include <linux/iommu.h>
44 #include <linux/iopoll.h>
45 #include <linux/init.h>
46 #include <linux/moduleparam.h>
48 #include <linux/of_address.h>
49 #include <linux/of_device.h>
50 #include <linux/of_iommu.h>
51 #include <linux/pci.h>
52 #include <linux/platform_device.h>
53 #include <linux/pm_runtime.h>
54 #include <linux/slab.h>
55 #include <linux/spinlock.h>
57 #include <linux/amba/bus.h>
58 #include <linux/fsl/mc.h>
60 #include "arm-smmu-regs.h"
62 #define ARM_MMU500_ACTLR_CPRE (1 << 1)
64 #define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
65 #define ARM_MMU500_ACR_S2CRB_TLBEN (1 << 10)
66 #define ARM_MMU500_ACR_SMTNMB_TLBEN (1 << 8)
68 #define TLB_LOOP_TIMEOUT 1000000 /* 1s! */
69 #define TLB_SPIN_COUNT 10
71 /* Maximum number of context banks per SMMU */
72 #define ARM_SMMU_MAX_CBS 128
74 /* SMMU global address space */
75 #define ARM_SMMU_GR0(smmu) ((smmu)->base)
76 #define ARM_SMMU_GR1(smmu) ((smmu)->base + (1 << (smmu)->pgshift))
79 * SMMU global address space with conditional offset to access secure
80 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
83 #define ARM_SMMU_GR0_NS(smmu) \
85 ((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS) \
89 * Some 64-bit registers only make sense to write atomically, but in such
90 * cases all the data relevant to AArch32 formats lies within the lower word,
91 * therefore this actually makes more sense than it might first appear.
94 #define smmu_write_atomic_lq writeq_relaxed
96 #define smmu_write_atomic_lq writel_relaxed
99 /* Translation context bank */
100 #define ARM_SMMU_CB(smmu, n) ((smmu)->cb_base + ((n) << (smmu)->pgshift))
102 #define MSI_IOVA_BASE 0x8000000
103 #define MSI_IOVA_LENGTH 0x100000
105 static int force_stage;
107 * not really modular, but the easiest way to keep compat with existing
108 * bootargs behaviour is to continue using module_param() here.
110 module_param(force_stage, int, S_IRUGO);
111 MODULE_PARM_DESC(force_stage,
112 "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.");
113 static bool disable_bypass =
114 IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT);
115 module_param(disable_bypass, bool, S_IRUGO);
116 MODULE_PARM_DESC(disable_bypass,
117 "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.");
119 enum arm_smmu_arch_version {
125 enum arm_smmu_implementation {
132 struct arm_smmu_s2cr {
133 struct iommu_group *group;
135 enum arm_smmu_s2cr_type type;
136 enum arm_smmu_s2cr_privcfg privcfg;
140 #define s2cr_init_val (struct arm_smmu_s2cr){ \
141 .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS, \
144 struct arm_smmu_smr {
154 struct arm_smmu_cfg *cfg;
157 struct arm_smmu_master_cfg {
158 struct arm_smmu_device *smmu;
161 #define INVALID_SMENDX -1
162 #define __fwspec_cfg(fw) ((struct arm_smmu_master_cfg *)fw->iommu_priv)
163 #define fwspec_smmu(fw) (__fwspec_cfg(fw)->smmu)
164 #define fwspec_smendx(fw, i) \
165 (i >= fw->num_ids ? INVALID_SMENDX : __fwspec_cfg(fw)->smendx[i])
166 #define for_each_cfg_sme(fw, i, idx) \
167 for (i = 0; idx = fwspec_smendx(fw, i), i < fw->num_ids; ++i)
169 struct arm_smmu_device {
173 void __iomem *cb_base;
174 unsigned long pgshift;
176 #define ARM_SMMU_FEAT_COHERENT_WALK (1 << 0)
177 #define ARM_SMMU_FEAT_STREAM_MATCH (1 << 1)
178 #define ARM_SMMU_FEAT_TRANS_S1 (1 << 2)
179 #define ARM_SMMU_FEAT_TRANS_S2 (1 << 3)
180 #define ARM_SMMU_FEAT_TRANS_NESTED (1 << 4)
181 #define ARM_SMMU_FEAT_TRANS_OPS (1 << 5)
182 #define ARM_SMMU_FEAT_VMID16 (1 << 6)
183 #define ARM_SMMU_FEAT_FMT_AARCH64_4K (1 << 7)
184 #define ARM_SMMU_FEAT_FMT_AARCH64_16K (1 << 8)
185 #define ARM_SMMU_FEAT_FMT_AARCH64_64K (1 << 9)
186 #define ARM_SMMU_FEAT_FMT_AARCH32_L (1 << 10)
187 #define ARM_SMMU_FEAT_FMT_AARCH32_S (1 << 11)
188 #define ARM_SMMU_FEAT_EXIDS (1 << 12)
191 #define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
193 enum arm_smmu_arch_version version;
194 enum arm_smmu_implementation model;
196 u32 num_context_banks;
197 u32 num_s2_context_banks;
198 DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
199 struct arm_smmu_cb *cbs;
202 u32 num_mapping_groups;
205 struct arm_smmu_smr *smrs;
206 struct arm_smmu_s2cr *s2crs;
207 struct mutex stream_map_mutex;
209 unsigned long va_size;
210 unsigned long ipa_size;
211 unsigned long pa_size;
212 unsigned long pgsize_bitmap;
215 u32 num_context_irqs;
217 struct clk_bulk_data *clks;
220 u32 cavium_id_base; /* Specific to Cavium */
222 spinlock_t global_sync_lock;
224 /* IOMMU core code handle */
225 struct iommu_device iommu;
228 enum arm_smmu_context_fmt {
229 ARM_SMMU_CTX_FMT_NONE,
230 ARM_SMMU_CTX_FMT_AARCH64,
231 ARM_SMMU_CTX_FMT_AARCH32_L,
232 ARM_SMMU_CTX_FMT_AARCH32_S,
235 struct arm_smmu_cfg {
243 enum arm_smmu_context_fmt fmt;
245 #define INVALID_IRPTNDX 0xff
247 enum arm_smmu_domain_stage {
248 ARM_SMMU_DOMAIN_S1 = 0,
250 ARM_SMMU_DOMAIN_NESTED,
251 ARM_SMMU_DOMAIN_BYPASS,
254 struct arm_smmu_domain {
255 struct arm_smmu_device *smmu;
256 struct io_pgtable_ops *pgtbl_ops;
257 const struct iommu_gather_ops *tlb_ops;
258 struct arm_smmu_cfg cfg;
259 enum arm_smmu_domain_stage stage;
261 struct mutex init_mutex; /* Protects smmu pointer */
262 spinlock_t cb_lock; /* Serialises ATS1* ops and TLB syncs */
263 struct iommu_domain domain;
266 struct arm_smmu_option_prop {
271 static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);
273 static bool using_legacy_binding, using_generic_binding;
275 static struct arm_smmu_option_prop arm_smmu_options[] = {
276 { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
280 static inline int arm_smmu_rpm_get(struct arm_smmu_device *smmu)
282 if (pm_runtime_enabled(smmu->dev))
283 return pm_runtime_get_sync(smmu->dev);
288 static inline void arm_smmu_rpm_put(struct arm_smmu_device *smmu)
290 if (pm_runtime_enabled(smmu->dev))
291 pm_runtime_put(smmu->dev);
294 static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
296 return container_of(dom, struct arm_smmu_domain, domain);
299 static void parse_driver_options(struct arm_smmu_device *smmu)
304 if (of_property_read_bool(smmu->dev->of_node,
305 arm_smmu_options[i].prop)) {
306 smmu->options |= arm_smmu_options[i].opt;
307 dev_notice(smmu->dev, "option %s\n",
308 arm_smmu_options[i].prop);
310 } while (arm_smmu_options[++i].opt);
313 static struct device_node *dev_get_dev_node(struct device *dev)
315 if (dev_is_pci(dev)) {
316 struct pci_bus *bus = to_pci_dev(dev)->bus;
318 while (!pci_is_root_bus(bus))
320 return of_node_get(bus->bridge->parent->of_node);
323 return of_node_get(dev->of_node);
326 static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
328 *((__be32 *)data) = cpu_to_be32(alias);
329 return 0; /* Continue walking */
332 static int __find_legacy_master_phandle(struct device *dev, void *data)
334 struct of_phandle_iterator *it = *(void **)data;
335 struct device_node *np = it->node;
338 of_for_each_phandle(it, err, dev->of_node, "mmu-masters",
339 "#stream-id-cells", 0)
340 if (it->node == np) {
341 *(void **)data = dev;
345 return err == -ENOENT ? 0 : err;
348 static struct platform_driver arm_smmu_driver;
349 static struct iommu_ops arm_smmu_ops;
351 static int arm_smmu_register_legacy_master(struct device *dev,
352 struct arm_smmu_device **smmu)
354 struct device *smmu_dev;
355 struct device_node *np;
356 struct of_phandle_iterator it;
362 np = dev_get_dev_node(dev);
363 if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
369 err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
370 __find_legacy_master_phandle);
378 if (dev_is_pci(dev)) {
379 /* "mmu-masters" assumes Stream ID == Requester ID */
380 pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid,
386 err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
391 sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
395 *smmu = dev_get_drvdata(smmu_dev);
396 of_phandle_iterator_args(&it, sids, it.cur_count);
397 err = iommu_fwspec_add_ids(dev, sids, it.cur_count);
402 static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
407 idx = find_next_zero_bit(map, end, start);
410 } while (test_and_set_bit(idx, map));
415 static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
420 /* Wait for any pending TLB invalidations to complete */
421 static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu,
422 void __iomem *sync, void __iomem *status)
424 unsigned int spin_cnt, delay;
426 writel_relaxed(0, sync);
427 for (delay = 1; delay < TLB_LOOP_TIMEOUT; delay *= 2) {
428 for (spin_cnt = TLB_SPIN_COUNT; spin_cnt > 0; spin_cnt--) {
429 if (!(readl_relaxed(status) & sTLBGSTATUS_GSACTIVE))
435 dev_err_ratelimited(smmu->dev,
436 "TLB sync timed out -- SMMU may be deadlocked\n");
439 static void arm_smmu_tlb_sync_global(struct arm_smmu_device *smmu)
441 void __iomem *base = ARM_SMMU_GR0(smmu);
444 spin_lock_irqsave(&smmu->global_sync_lock, flags);
445 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_GR0_sTLBGSYNC,
446 base + ARM_SMMU_GR0_sTLBGSTATUS);
447 spin_unlock_irqrestore(&smmu->global_sync_lock, flags);
450 static void arm_smmu_tlb_sync_context(void *cookie)
452 struct arm_smmu_domain *smmu_domain = cookie;
453 struct arm_smmu_device *smmu = smmu_domain->smmu;
454 void __iomem *base = ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx);
457 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
458 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_CB_TLBSYNC,
459 base + ARM_SMMU_CB_TLBSTATUS);
460 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
463 static void arm_smmu_tlb_sync_vmid(void *cookie)
465 struct arm_smmu_domain *smmu_domain = cookie;
467 arm_smmu_tlb_sync_global(smmu_domain->smmu);
470 static void arm_smmu_tlb_inv_context_s1(void *cookie)
472 struct arm_smmu_domain *smmu_domain = cookie;
473 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
474 void __iomem *base = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
477 * NOTE: this is not a relaxed write; it needs to guarantee that PTEs
478 * cleared by the current CPU are visible to the SMMU before the TLBI.
480 writel(cfg->asid, base + ARM_SMMU_CB_S1_TLBIASID);
481 arm_smmu_tlb_sync_context(cookie);
484 static void arm_smmu_tlb_inv_context_s2(void *cookie)
486 struct arm_smmu_domain *smmu_domain = cookie;
487 struct arm_smmu_device *smmu = smmu_domain->smmu;
488 void __iomem *base = ARM_SMMU_GR0(smmu);
490 /* NOTE: see above */
491 writel(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
492 arm_smmu_tlb_sync_global(smmu);
495 static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
496 size_t granule, bool leaf, void *cookie)
498 struct arm_smmu_domain *smmu_domain = cookie;
499 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
500 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
501 void __iomem *reg = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
503 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
507 reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
509 if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
513 writel_relaxed(iova, reg);
515 } while (size -= granule);
518 iova |= (u64)cfg->asid << 48;
520 writeq_relaxed(iova, reg);
521 iova += granule >> 12;
522 } while (size -= granule);
525 reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
526 ARM_SMMU_CB_S2_TLBIIPAS2;
529 smmu_write_atomic_lq(iova, reg);
530 iova += granule >> 12;
531 } while (size -= granule);
536 * On MMU-401 at least, the cost of firing off multiple TLBIVMIDs appears
537 * almost negligible, but the benefit of getting the first one in as far ahead
538 * of the sync as possible is significant, hence we don't just make this a
539 * no-op and set .tlb_sync to arm_smmu_inv_context_s2() as you might think.
541 static void arm_smmu_tlb_inv_vmid_nosync(unsigned long iova, size_t size,
542 size_t granule, bool leaf, void *cookie)
544 struct arm_smmu_domain *smmu_domain = cookie;
545 void __iomem *base = ARM_SMMU_GR0(smmu_domain->smmu);
547 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
550 writel_relaxed(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
553 static const struct iommu_gather_ops arm_smmu_s1_tlb_ops = {
554 .tlb_flush_all = arm_smmu_tlb_inv_context_s1,
555 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
556 .tlb_sync = arm_smmu_tlb_sync_context,
559 static const struct iommu_gather_ops arm_smmu_s2_tlb_ops_v2 = {
560 .tlb_flush_all = arm_smmu_tlb_inv_context_s2,
561 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
562 .tlb_sync = arm_smmu_tlb_sync_context,
565 static const struct iommu_gather_ops arm_smmu_s2_tlb_ops_v1 = {
566 .tlb_flush_all = arm_smmu_tlb_inv_context_s2,
567 .tlb_add_flush = arm_smmu_tlb_inv_vmid_nosync,
568 .tlb_sync = arm_smmu_tlb_sync_vmid,
571 static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
573 u32 fsr, fsynr, cbfrsynra;
575 struct iommu_domain *domain = dev;
576 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
577 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
578 struct arm_smmu_device *smmu = smmu_domain->smmu;
579 void __iomem *gr1_base = ARM_SMMU_GR1(smmu);
580 void __iomem *cb_base;
582 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
583 fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);
585 if (!(fsr & FSR_FAULT))
588 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
589 iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
590 cbfrsynra = readl_relaxed(gr1_base + ARM_SMMU_GR1_CBFRSYNRA(cfg->cbndx));
592 dev_err_ratelimited(smmu->dev,
593 "Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cbfrsynra=0x%x, cb=%d\n",
594 fsr, iova, fsynr, cbfrsynra, cfg->cbndx);
596 writel(fsr, cb_base + ARM_SMMU_CB_FSR);
600 static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
602 u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
603 struct arm_smmu_device *smmu = dev;
604 void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
606 gfsr = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSR);
607 gfsynr0 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR0);
608 gfsynr1 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR1);
609 gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2);
614 dev_err_ratelimited(smmu->dev,
615 "Unexpected global fault, this could be serious\n");
616 dev_err_ratelimited(smmu->dev,
617 "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
618 gfsr, gfsynr0, gfsynr1, gfsynr2);
620 writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
624 static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
625 struct io_pgtable_cfg *pgtbl_cfg)
627 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
628 struct arm_smmu_cb *cb = &smmu_domain->smmu->cbs[cfg->cbndx];
629 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
635 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
636 cb->tcr[0] = pgtbl_cfg->arm_v7s_cfg.tcr;
638 cb->tcr[0] = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
639 cb->tcr[1] = pgtbl_cfg->arm_lpae_s1_cfg.tcr >> 32;
640 cb->tcr[1] |= TTBCR2_SEP_UPSTREAM;
641 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
642 cb->tcr[1] |= TTBCR2_AS;
645 cb->tcr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
650 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
651 cb->ttbr[0] = pgtbl_cfg->arm_v7s_cfg.ttbr[0];
652 cb->ttbr[1] = pgtbl_cfg->arm_v7s_cfg.ttbr[1];
654 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
655 cb->ttbr[0] |= (u64)cfg->asid << TTBRn_ASID_SHIFT;
656 cb->ttbr[1] = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[1];
657 cb->ttbr[1] |= (u64)cfg->asid << TTBRn_ASID_SHIFT;
660 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
663 /* MAIRs (stage-1 only) */
665 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
666 cb->mair[0] = pgtbl_cfg->arm_v7s_cfg.prrr;
667 cb->mair[1] = pgtbl_cfg->arm_v7s_cfg.nmrr;
669 cb->mair[0] = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
670 cb->mair[1] = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
675 static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
679 struct arm_smmu_cb *cb = &smmu->cbs[idx];
680 struct arm_smmu_cfg *cfg = cb->cfg;
681 void __iomem *cb_base, *gr1_base;
683 cb_base = ARM_SMMU_CB(smmu, idx);
685 /* Unassigned context banks only need disabling */
687 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
691 gr1_base = ARM_SMMU_GR1(smmu);
692 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
695 if (smmu->version > ARM_SMMU_V1) {
696 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
697 reg = CBA2R_RW64_64BIT;
699 reg = CBA2R_RW64_32BIT;
700 /* 16-bit VMIDs live in CBA2R */
701 if (smmu->features & ARM_SMMU_FEAT_VMID16)
702 reg |= cfg->vmid << CBA2R_VMID_SHIFT;
704 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(idx));
709 if (smmu->version < ARM_SMMU_V2)
710 reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
713 * Use the weakest shareability/memory types, so they are
714 * overridden by the ttbcr/pte.
717 reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
718 (CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
719 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
720 /* 8-bit VMIDs live in CBAR */
721 reg |= cfg->vmid << CBAR_VMID_SHIFT;
723 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(idx));
727 * We must write this before the TTBRs, since it determines the
728 * access behaviour of some fields (in particular, ASID[15:8]).
730 if (stage1 && smmu->version > ARM_SMMU_V1)
731 writel_relaxed(cb->tcr[1], cb_base + ARM_SMMU_CB_TTBCR2);
732 writel_relaxed(cb->tcr[0], cb_base + ARM_SMMU_CB_TTBCR);
735 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
736 writel_relaxed(cfg->asid, cb_base + ARM_SMMU_CB_CONTEXTIDR);
737 writel_relaxed(cb->ttbr[0], cb_base + ARM_SMMU_CB_TTBR0);
738 writel_relaxed(cb->ttbr[1], cb_base + ARM_SMMU_CB_TTBR1);
740 writeq_relaxed(cb->ttbr[0], cb_base + ARM_SMMU_CB_TTBR0);
742 writeq_relaxed(cb->ttbr[1], cb_base + ARM_SMMU_CB_TTBR1);
745 /* MAIRs (stage-1 only) */
747 writel_relaxed(cb->mair[0], cb_base + ARM_SMMU_CB_S1_MAIR0);
748 writel_relaxed(cb->mair[1], cb_base + ARM_SMMU_CB_S1_MAIR1);
752 reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
754 reg |= SCTLR_S1_ASIDPNE;
755 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
758 writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
761 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
762 struct arm_smmu_device *smmu)
764 int irq, start, ret = 0;
765 unsigned long ias, oas;
766 struct io_pgtable_ops *pgtbl_ops;
767 struct io_pgtable_cfg pgtbl_cfg;
768 enum io_pgtable_fmt fmt;
769 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
770 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
772 mutex_lock(&smmu_domain->init_mutex);
773 if (smmu_domain->smmu)
776 if (domain->type == IOMMU_DOMAIN_IDENTITY) {
777 smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS;
778 smmu_domain->smmu = smmu;
783 * Mapping the requested stage onto what we support is surprisingly
784 * complicated, mainly because the spec allows S1+S2 SMMUs without
785 * support for nested translation. That means we end up with the
788 * Requested Supported Actual
798 * Note that you can't actually request stage-2 mappings.
800 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
801 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
802 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
803 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
806 * Choosing a suitable context format is even more fiddly. Until we
807 * grow some way for the caller to express a preference, and/or move
808 * the decision into the io-pgtable code where it arguably belongs,
809 * just aim for the closest thing to the rest of the system, and hope
810 * that the hardware isn't esoteric enough that we can't assume AArch64
811 * support to be a superset of AArch32 support...
813 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
814 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
815 if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) &&
816 !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) &&
817 (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) &&
818 (smmu_domain->stage == ARM_SMMU_DOMAIN_S1))
819 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S;
820 if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) &&
821 (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K |
822 ARM_SMMU_FEAT_FMT_AARCH64_16K |
823 ARM_SMMU_FEAT_FMT_AARCH64_4K)))
824 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64;
826 if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
831 switch (smmu_domain->stage) {
832 case ARM_SMMU_DOMAIN_S1:
833 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
834 start = smmu->num_s2_context_banks;
836 oas = smmu->ipa_size;
837 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
838 fmt = ARM_64_LPAE_S1;
839 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
840 fmt = ARM_32_LPAE_S1;
841 ias = min(ias, 32UL);
842 oas = min(oas, 40UL);
845 ias = min(ias, 32UL);
846 oas = min(oas, 32UL);
848 smmu_domain->tlb_ops = &arm_smmu_s1_tlb_ops;
850 case ARM_SMMU_DOMAIN_NESTED:
852 * We will likely want to change this if/when KVM gets
855 case ARM_SMMU_DOMAIN_S2:
856 cfg->cbar = CBAR_TYPE_S2_TRANS;
858 ias = smmu->ipa_size;
860 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
861 fmt = ARM_64_LPAE_S2;
863 fmt = ARM_32_LPAE_S2;
864 ias = min(ias, 40UL);
865 oas = min(oas, 40UL);
867 if (smmu->version == ARM_SMMU_V2)
868 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v2;
870 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v1;
876 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
877 smmu->num_context_banks);
882 if (smmu->version < ARM_SMMU_V2) {
883 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
884 cfg->irptndx %= smmu->num_context_irqs;
886 cfg->irptndx = cfg->cbndx;
889 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2)
890 cfg->vmid = cfg->cbndx + 1 + smmu->cavium_id_base;
892 cfg->asid = cfg->cbndx + smmu->cavium_id_base;
894 pgtbl_cfg = (struct io_pgtable_cfg) {
895 .pgsize_bitmap = smmu->pgsize_bitmap,
898 .tlb = smmu_domain->tlb_ops,
899 .iommu_dev = smmu->dev,
902 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
903 pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_NO_DMA;
905 if (smmu_domain->non_strict)
906 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_NON_STRICT;
908 smmu_domain->smmu = smmu;
909 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
915 /* Update the domain's page sizes to reflect the page table format */
916 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
917 domain->geometry.aperture_end = (1UL << ias) - 1;
918 domain->geometry.force_aperture = true;
920 /* Initialise the context bank with our page table cfg */
921 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
922 arm_smmu_write_context_bank(smmu, cfg->cbndx);
925 * Request context fault interrupt. Do this last to avoid the
926 * handler seeing a half-initialised domain state.
928 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
929 ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
930 IRQF_SHARED, "arm-smmu-context-fault", domain);
932 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
934 cfg->irptndx = INVALID_IRPTNDX;
937 mutex_unlock(&smmu_domain->init_mutex);
939 /* Publish page table ops for map/unmap */
940 smmu_domain->pgtbl_ops = pgtbl_ops;
944 smmu_domain->smmu = NULL;
946 mutex_unlock(&smmu_domain->init_mutex);
950 static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
952 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
953 struct arm_smmu_device *smmu = smmu_domain->smmu;
954 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
957 if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY)
960 ret = arm_smmu_rpm_get(smmu);
965 * Disable the context bank and free the page tables before freeing
968 smmu->cbs[cfg->cbndx].cfg = NULL;
969 arm_smmu_write_context_bank(smmu, cfg->cbndx);
971 if (cfg->irptndx != INVALID_IRPTNDX) {
972 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
973 devm_free_irq(smmu->dev, irq, domain);
976 free_io_pgtable_ops(smmu_domain->pgtbl_ops);
977 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
979 arm_smmu_rpm_put(smmu);
982 static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
984 struct arm_smmu_domain *smmu_domain;
986 if (type != IOMMU_DOMAIN_UNMANAGED &&
987 type != IOMMU_DOMAIN_DMA &&
988 type != IOMMU_DOMAIN_IDENTITY)
991 * Allocate the domain and initialise some of its data structures.
992 * We can't really do anything meaningful until we've added a
995 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
999 if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
1000 iommu_get_dma_cookie(&smmu_domain->domain))) {
1005 mutex_init(&smmu_domain->init_mutex);
1006 spin_lock_init(&smmu_domain->cb_lock);
1008 return &smmu_domain->domain;
1011 static void arm_smmu_domain_free(struct iommu_domain *domain)
1013 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1016 * Free the domain resources. We assume that all devices have
1017 * already been detached.
1019 iommu_put_dma_cookie(domain);
1020 arm_smmu_destroy_domain_context(domain);
1024 static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
1026 struct arm_smmu_smr *smr = smmu->smrs + idx;
1027 u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1029 if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
1031 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
1034 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
1036 struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
1037 u32 reg = (s2cr->type & S2CR_TYPE_MASK) << S2CR_TYPE_SHIFT |
1038 (s2cr->cbndx & S2CR_CBNDX_MASK) << S2CR_CBNDX_SHIFT |
1039 (s2cr->privcfg & S2CR_PRIVCFG_MASK) << S2CR_PRIVCFG_SHIFT;
1041 if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
1042 smmu->smrs[idx].valid)
1043 reg |= S2CR_EXIDVALID;
1044 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_S2CR(idx));
1047 static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
1049 arm_smmu_write_s2cr(smmu, idx);
1051 arm_smmu_write_smr(smmu, idx);
1055 * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function
1056 * should be called after sCR0 is written.
1058 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
1060 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1067 * SMR.ID bits may not be preserved if the corresponding MASK
1068 * bits are set, so check each one separately. We can reject
1069 * masters later if they try to claim IDs outside these masks.
1071 smr = smmu->streamid_mask << SMR_ID_SHIFT;
1072 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1073 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1074 smmu->streamid_mask = smr >> SMR_ID_SHIFT;
1076 smr = smmu->streamid_mask << SMR_MASK_SHIFT;
1077 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1078 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1079 smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
1082 static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1084 struct arm_smmu_smr *smrs = smmu->smrs;
1085 int i, free_idx = -ENOSPC;
1087 /* Stream indexing is blissfully easy */
1091 /* Validating SMRs is... less so */
1092 for (i = 0; i < smmu->num_mapping_groups; ++i) {
1093 if (!smrs[i].valid) {
1095 * Note the first free entry we come across, which
1096 * we'll claim in the end if nothing else matches.
1103 * If the new entry is _entirely_ matched by an existing entry,
1104 * then reuse that, with the guarantee that there also cannot
1105 * be any subsequent conflicting entries. In normal use we'd
1106 * expect simply identical entries for this case, but there's
1107 * no harm in accommodating the generalisation.
1109 if ((mask & smrs[i].mask) == mask &&
1110 !((id ^ smrs[i].id) & ~smrs[i].mask))
1113 * If the new entry has any other overlap with an existing one,
1114 * though, then there always exists at least one stream ID
1115 * which would cause a conflict, and we can't allow that risk.
1117 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
1124 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
1126 if (--smmu->s2crs[idx].count)
1129 smmu->s2crs[idx] = s2cr_init_val;
1131 smmu->smrs[idx].valid = false;
1136 static int arm_smmu_master_alloc_smes(struct device *dev)
1138 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1139 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1140 struct arm_smmu_device *smmu = cfg->smmu;
1141 struct arm_smmu_smr *smrs = smmu->smrs;
1142 struct iommu_group *group;
1145 mutex_lock(&smmu->stream_map_mutex);
1146 /* Figure out a viable stream map entry allocation */
1147 for_each_cfg_sme(fwspec, i, idx) {
1148 u16 sid = fwspec->ids[i];
1149 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1151 if (idx != INVALID_SMENDX) {
1156 ret = arm_smmu_find_sme(smmu, sid, mask);
1161 if (smrs && smmu->s2crs[idx].count == 0) {
1163 smrs[idx].mask = mask;
1164 smrs[idx].valid = true;
1166 smmu->s2crs[idx].count++;
1167 cfg->smendx[i] = (s16)idx;
1170 group = iommu_group_get_for_dev(dev);
1172 group = ERR_PTR(-ENOMEM);
1173 if (IS_ERR(group)) {
1174 ret = PTR_ERR(group);
1177 iommu_group_put(group);
1179 /* It worked! Now, poke the actual hardware */
1180 for_each_cfg_sme(fwspec, i, idx) {
1181 arm_smmu_write_sme(smmu, idx);
1182 smmu->s2crs[idx].group = group;
1185 mutex_unlock(&smmu->stream_map_mutex);
1190 arm_smmu_free_sme(smmu, cfg->smendx[i]);
1191 cfg->smendx[i] = INVALID_SMENDX;
1193 mutex_unlock(&smmu->stream_map_mutex);
1197 static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1199 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1200 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1203 mutex_lock(&smmu->stream_map_mutex);
1204 for_each_cfg_sme(fwspec, i, idx) {
1205 if (arm_smmu_free_sme(smmu, idx))
1206 arm_smmu_write_sme(smmu, idx);
1207 cfg->smendx[i] = INVALID_SMENDX;
1209 mutex_unlock(&smmu->stream_map_mutex);
1212 static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1213 struct iommu_fwspec *fwspec)
1215 struct arm_smmu_device *smmu = smmu_domain->smmu;
1216 struct arm_smmu_s2cr *s2cr = smmu->s2crs;
1217 u8 cbndx = smmu_domain->cfg.cbndx;
1218 enum arm_smmu_s2cr_type type;
1221 if (smmu_domain->stage == ARM_SMMU_DOMAIN_BYPASS)
1222 type = S2CR_TYPE_BYPASS;
1224 type = S2CR_TYPE_TRANS;
1226 for_each_cfg_sme(fwspec, i, idx) {
1227 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1230 s2cr[idx].type = type;
1231 s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
1232 s2cr[idx].cbndx = cbndx;
1233 arm_smmu_write_s2cr(smmu, idx);
1238 static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1241 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1242 struct arm_smmu_device *smmu;
1243 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1245 if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1246 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1251 * FIXME: The arch/arm DMA API code tries to attach devices to its own
1252 * domains between of_xlate() and add_device() - we have no way to cope
1253 * with that, so until ARM gets converted to rely on groups and default
1254 * domains, just say no (but more politely than by dereferencing NULL).
1255 * This should be at least a WARN_ON once that's sorted.
1257 if (!fwspec->iommu_priv)
1260 smmu = fwspec_smmu(fwspec);
1262 ret = arm_smmu_rpm_get(smmu);
1266 /* Ensure that the domain is finalised */
1267 ret = arm_smmu_init_domain_context(domain, smmu);
1272 * Sanity check the domain. We don't support domains across
1275 if (smmu_domain->smmu != smmu) {
1277 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1278 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1283 /* Looks ok, so add the device to the domain */
1284 ret = arm_smmu_domain_add_master(smmu_domain, fwspec);
1287 arm_smmu_rpm_put(smmu);
1291 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1292 phys_addr_t paddr, size_t size, int prot)
1294 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1295 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1301 arm_smmu_rpm_get(smmu);
1302 ret = ops->map(ops, iova, paddr, size, prot);
1303 arm_smmu_rpm_put(smmu);
1308 static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1311 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
1312 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1318 arm_smmu_rpm_get(smmu);
1319 ret = ops->unmap(ops, iova, size);
1320 arm_smmu_rpm_put(smmu);
1325 static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain)
1327 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1328 struct arm_smmu_device *smmu = smmu_domain->smmu;
1330 if (smmu_domain->tlb_ops) {
1331 arm_smmu_rpm_get(smmu);
1332 smmu_domain->tlb_ops->tlb_flush_all(smmu_domain);
1333 arm_smmu_rpm_put(smmu);
1337 static void arm_smmu_iotlb_sync(struct iommu_domain *domain)
1339 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1340 struct arm_smmu_device *smmu = smmu_domain->smmu;
1342 if (smmu_domain->tlb_ops) {
1343 arm_smmu_rpm_get(smmu);
1344 smmu_domain->tlb_ops->tlb_sync(smmu_domain);
1345 arm_smmu_rpm_put(smmu);
1349 static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1352 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1353 struct arm_smmu_device *smmu = smmu_domain->smmu;
1354 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1355 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1356 struct device *dev = smmu->dev;
1357 void __iomem *cb_base;
1360 unsigned long va, flags;
1363 ret = arm_smmu_rpm_get(smmu);
1367 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
1369 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
1370 /* ATS1 registers can only be written atomically */
1371 va = iova & ~0xfffUL;
1372 if (smmu->version == ARM_SMMU_V2)
1373 smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
1374 else /* Register is only 32-bit in v1 */
1375 writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
1377 if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
1378 !(tmp & ATSR_ACTIVE), 5, 50)) {
1379 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1381 "iova to phys timed out on %pad. Falling back to software table walk.\n",
1383 return ops->iova_to_phys(ops, iova);
1386 phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1387 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
1388 if (phys & CB_PAR_F) {
1389 dev_err(dev, "translation fault!\n");
1390 dev_err(dev, "PAR = 0x%llx\n", phys);
1394 arm_smmu_rpm_put(smmu);
1396 return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1399 static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1402 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1403 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
1405 if (domain->type == IOMMU_DOMAIN_IDENTITY)
1411 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
1412 smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
1413 return arm_smmu_iova_to_phys_hard(domain, iova);
1415 return ops->iova_to_phys(ops, iova);
1418 static bool arm_smmu_capable(enum iommu_cap cap)
1421 case IOMMU_CAP_CACHE_COHERENCY:
1423 * Return true here as the SMMU can always send out coherent
1427 case IOMMU_CAP_NOEXEC:
1434 static int arm_smmu_match_node(struct device *dev, void *data)
1436 return dev->fwnode == data;
1440 struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
1442 struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
1443 fwnode, arm_smmu_match_node);
1445 return dev ? dev_get_drvdata(dev) : NULL;
1448 static int arm_smmu_add_device(struct device *dev)
1450 struct arm_smmu_device *smmu;
1451 struct arm_smmu_master_cfg *cfg;
1452 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1455 if (using_legacy_binding) {
1456 ret = arm_smmu_register_legacy_master(dev, &smmu);
1459 * If dev->iommu_fwspec is initally NULL, arm_smmu_register_legacy_master()
1460 * will allocate/initialise a new one. Thus we need to update fwspec for
1463 fwspec = dev_iommu_fwspec_get(dev);
1466 } else if (fwspec && fwspec->ops == &arm_smmu_ops) {
1467 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
1473 for (i = 0; i < fwspec->num_ids; i++) {
1474 u16 sid = fwspec->ids[i];
1475 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1477 if (sid & ~smmu->streamid_mask) {
1478 dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1479 sid, smmu->streamid_mask);
1482 if (mask & ~smmu->smr_mask_mask) {
1483 dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
1484 mask, smmu->smr_mask_mask);
1490 cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
1496 fwspec->iommu_priv = cfg;
1498 cfg->smendx[i] = INVALID_SMENDX;
1500 ret = arm_smmu_rpm_get(smmu);
1504 ret = arm_smmu_master_alloc_smes(dev);
1505 arm_smmu_rpm_put(smmu);
1510 iommu_device_link(&smmu->iommu, dev);
1512 device_link_add(dev, smmu->dev,
1513 DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_SUPPLIER);
1520 iommu_fwspec_free(dev);
1524 static void arm_smmu_remove_device(struct device *dev)
1526 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1527 struct arm_smmu_master_cfg *cfg;
1528 struct arm_smmu_device *smmu;
1531 if (!fwspec || fwspec->ops != &arm_smmu_ops)
1534 cfg = fwspec->iommu_priv;
1537 ret = arm_smmu_rpm_get(smmu);
1541 iommu_device_unlink(&smmu->iommu, dev);
1542 arm_smmu_master_free_smes(fwspec);
1544 arm_smmu_rpm_put(smmu);
1546 iommu_group_remove_device(dev);
1547 kfree(fwspec->iommu_priv);
1548 iommu_fwspec_free(dev);
1551 static struct iommu_group *arm_smmu_device_group(struct device *dev)
1553 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
1554 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1555 struct iommu_group *group = NULL;
1558 for_each_cfg_sme(fwspec, i, idx) {
1559 if (group && smmu->s2crs[idx].group &&
1560 group != smmu->s2crs[idx].group)
1561 return ERR_PTR(-EINVAL);
1563 group = smmu->s2crs[idx].group;
1567 return iommu_group_ref_get(group);
1569 if (dev_is_pci(dev))
1570 group = pci_device_group(dev);
1571 else if (dev_is_fsl_mc(dev))
1572 group = fsl_mc_device_group(dev);
1574 group = generic_device_group(dev);
1579 static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1580 enum iommu_attr attr, void *data)
1582 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1584 switch(domain->type) {
1585 case IOMMU_DOMAIN_UNMANAGED:
1587 case DOMAIN_ATTR_NESTING:
1588 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1594 case IOMMU_DOMAIN_DMA:
1596 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1597 *(int *)data = smmu_domain->non_strict;
1608 static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1609 enum iommu_attr attr, void *data)
1612 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1614 mutex_lock(&smmu_domain->init_mutex);
1616 switch(domain->type) {
1617 case IOMMU_DOMAIN_UNMANAGED:
1619 case DOMAIN_ATTR_NESTING:
1620 if (smmu_domain->smmu) {
1626 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1628 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1634 case IOMMU_DOMAIN_DMA:
1636 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1637 smmu_domain->non_strict = *(int *)data;
1647 mutex_unlock(&smmu_domain->init_mutex);
1651 static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1655 if (args->args_count > 0)
1656 fwid |= (u16)args->args[0];
1658 if (args->args_count > 1)
1659 fwid |= (u16)args->args[1] << SMR_MASK_SHIFT;
1660 else if (!of_property_read_u32(args->np, "stream-match-mask", &mask))
1661 fwid |= (u16)mask << SMR_MASK_SHIFT;
1663 return iommu_fwspec_add_ids(dev, &fwid, 1);
1666 static void arm_smmu_get_resv_regions(struct device *dev,
1667 struct list_head *head)
1669 struct iommu_resv_region *region;
1670 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1672 region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
1673 prot, IOMMU_RESV_SW_MSI);
1677 list_add_tail(®ion->list, head);
1679 iommu_dma_get_resv_regions(dev, head);
1682 static void arm_smmu_put_resv_regions(struct device *dev,
1683 struct list_head *head)
1685 struct iommu_resv_region *entry, *next;
1687 list_for_each_entry_safe(entry, next, head, list)
1691 static struct iommu_ops arm_smmu_ops = {
1692 .capable = arm_smmu_capable,
1693 .domain_alloc = arm_smmu_domain_alloc,
1694 .domain_free = arm_smmu_domain_free,
1695 .attach_dev = arm_smmu_attach_dev,
1696 .map = arm_smmu_map,
1697 .unmap = arm_smmu_unmap,
1698 .flush_iotlb_all = arm_smmu_flush_iotlb_all,
1699 .iotlb_sync = arm_smmu_iotlb_sync,
1700 .iova_to_phys = arm_smmu_iova_to_phys,
1701 .add_device = arm_smmu_add_device,
1702 .remove_device = arm_smmu_remove_device,
1703 .device_group = arm_smmu_device_group,
1704 .domain_get_attr = arm_smmu_domain_get_attr,
1705 .domain_set_attr = arm_smmu_domain_set_attr,
1706 .of_xlate = arm_smmu_of_xlate,
1707 .get_resv_regions = arm_smmu_get_resv_regions,
1708 .put_resv_regions = arm_smmu_put_resv_regions,
1709 .pgsize_bitmap = -1UL, /* Restricted during device attach */
1712 static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1714 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1718 /* clear global FSR */
1719 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1720 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1723 * Reset stream mapping groups: Initial values mark all SMRn as
1724 * invalid and all S2CRn as bypass unless overridden.
1726 for (i = 0; i < smmu->num_mapping_groups; ++i)
1727 arm_smmu_write_sme(smmu, i);
1729 if (smmu->model == ARM_MMU500) {
1731 * Before clearing ARM_MMU500_ACTLR_CPRE, need to
1732 * clear CACHE_LOCK bit of ACR first. And, CACHE_LOCK
1733 * bit is only present in MMU-500r2 onwards.
1735 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
1736 major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
1737 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
1739 reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
1741 * Allow unmatched Stream IDs to allocate bypass
1742 * TLB entries for reduced latency.
1744 reg |= ARM_MMU500_ACR_SMTNMB_TLBEN | ARM_MMU500_ACR_S2CRB_TLBEN;
1745 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
1748 /* Make sure all context banks are disabled and clear CB_FSR */
1749 for (i = 0; i < smmu->num_context_banks; ++i) {
1750 void __iomem *cb_base = ARM_SMMU_CB(smmu, i);
1752 arm_smmu_write_context_bank(smmu, i);
1753 writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
1755 * Disable MMU-500's not-particularly-beneficial next-page
1756 * prefetcher for the sake of errata #841119 and #826419.
1758 if (smmu->model == ARM_MMU500) {
1759 reg = readl_relaxed(cb_base + ARM_SMMU_CB_ACTLR);
1760 reg &= ~ARM_MMU500_ACTLR_CPRE;
1761 writel_relaxed(reg, cb_base + ARM_SMMU_CB_ACTLR);
1765 /* Invalidate the TLB, just in case */
1766 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
1767 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
1769 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1771 /* Enable fault reporting */
1772 reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1774 /* Disable TLB broadcasting. */
1775 reg |= (sCR0_VMIDPNE | sCR0_PTM);
1777 /* Enable client access, handling unmatched streams as appropriate */
1778 reg &= ~sCR0_CLIENTPD;
1782 reg &= ~sCR0_USFCFG;
1784 /* Disable forced broadcasting */
1787 /* Don't upgrade barriers */
1788 reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
1790 if (smmu->features & ARM_SMMU_FEAT_VMID16)
1791 reg |= sCR0_VMID16EN;
1793 if (smmu->features & ARM_SMMU_FEAT_EXIDS)
1794 reg |= sCR0_EXIDENABLE;
1796 /* Push the button */
1797 arm_smmu_tlb_sync_global(smmu);
1798 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1801 static int arm_smmu_id_size_to_bits(int size)
1820 static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1823 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1825 bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1828 dev_notice(smmu->dev, "probing hardware configuration...\n");
1829 dev_notice(smmu->dev, "SMMUv%d with:\n",
1830 smmu->version == ARM_SMMU_V2 ? 2 : 1);
1833 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1835 /* Restrict available stages based on module parameter */
1836 if (force_stage == 1)
1837 id &= ~(ID0_S2TS | ID0_NTS);
1838 else if (force_stage == 2)
1839 id &= ~(ID0_S1TS | ID0_NTS);
1841 if (id & ID0_S1TS) {
1842 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1843 dev_notice(smmu->dev, "\tstage 1 translation\n");
1846 if (id & ID0_S2TS) {
1847 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1848 dev_notice(smmu->dev, "\tstage 2 translation\n");
1852 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1853 dev_notice(smmu->dev, "\tnested translation\n");
1856 if (!(smmu->features &
1857 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1858 dev_err(smmu->dev, "\tno translation support!\n");
1862 if ((id & ID0_S1TS) &&
1863 ((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
1864 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1865 dev_notice(smmu->dev, "\taddress translation ops\n");
1869 * In order for DMA API calls to work properly, we must defer to what
1870 * the FW says about coherency, regardless of what the hardware claims.
1871 * Fortunately, this also opens up a workaround for systems where the
1872 * ID register value has ended up configured incorrectly.
1874 cttw_reg = !!(id & ID0_CTTW);
1875 if (cttw_fw || cttw_reg)
1876 dev_notice(smmu->dev, "\t%scoherent table walk\n",
1877 cttw_fw ? "" : "non-");
1878 if (cttw_fw != cttw_reg)
1879 dev_notice(smmu->dev,
1880 "\t(IDR0.CTTW overridden by FW configuration)\n");
1882 /* Max. number of entries we have for stream matching/indexing */
1883 if (smmu->version == ARM_SMMU_V2 && id & ID0_EXIDS) {
1884 smmu->features |= ARM_SMMU_FEAT_EXIDS;
1887 size = 1 << ((id >> ID0_NUMSIDB_SHIFT) & ID0_NUMSIDB_MASK);
1889 smmu->streamid_mask = size - 1;
1891 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1892 size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
1895 "stream-matching supported, but no SMRs present!\n");
1899 /* Zero-initialised to mark as invalid */
1900 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
1905 dev_notice(smmu->dev,
1906 "\tstream matching with %lu register groups", size);
1908 /* s2cr->type == 0 means translation, so initialise explicitly */
1909 smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
1913 for (i = 0; i < size; i++)
1914 smmu->s2crs[i] = s2cr_init_val;
1916 smmu->num_mapping_groups = size;
1917 mutex_init(&smmu->stream_map_mutex);
1918 spin_lock_init(&smmu->global_sync_lock);
1920 if (smmu->version < ARM_SMMU_V2 || !(id & ID0_PTFS_NO_AARCH32)) {
1921 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L;
1922 if (!(id & ID0_PTFS_NO_AARCH32S))
1923 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S;
1927 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1928 smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1930 /* Check for size mismatch of SMMU address space from mapped region */
1931 size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
1932 size <<= smmu->pgshift;
1933 if (smmu->cb_base != gr0_base + size)
1935 "SMMU address space size (0x%lx) differs from mapped region size (0x%tx)!\n",
1936 size * 2, (smmu->cb_base - gr0_base) * 2);
1938 smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1939 smmu->num_context_banks = (id >> ID1_NUMCB_SHIFT) & ID1_NUMCB_MASK;
1940 if (smmu->num_s2_context_banks > smmu->num_context_banks) {
1941 dev_err(smmu->dev, "impossible number of S2 context banks!\n");
1944 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1945 smmu->num_context_banks, smmu->num_s2_context_banks);
1947 * Cavium CN88xx erratum #27704.
1948 * Ensure ASID and VMID allocation is unique across all SMMUs in
1951 if (smmu->model == CAVIUM_SMMUV2) {
1952 smmu->cavium_id_base =
1953 atomic_add_return(smmu->num_context_banks,
1954 &cavium_smmu_context_count);
1955 smmu->cavium_id_base -= smmu->num_context_banks;
1956 dev_notice(smmu->dev, "\tenabling workaround for Cavium erratum 27704\n");
1958 smmu->cbs = devm_kcalloc(smmu->dev, smmu->num_context_banks,
1959 sizeof(*smmu->cbs), GFP_KERNEL);
1964 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID2);
1965 size = arm_smmu_id_size_to_bits((id >> ID2_IAS_SHIFT) & ID2_IAS_MASK);
1966 smmu->ipa_size = size;
1968 /* The output mask is also applied for bypass */
1969 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1970 smmu->pa_size = size;
1972 if (id & ID2_VMID16)
1973 smmu->features |= ARM_SMMU_FEAT_VMID16;
1976 * What the page table walker can address actually depends on which
1977 * descriptor format is in use, but since a) we don't know that yet,
1978 * and b) it can vary per context bank, this will have to do...
1980 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1982 "failed to set DMA mask for table walker\n");
1984 if (smmu->version < ARM_SMMU_V2) {
1985 smmu->va_size = smmu->ipa_size;
1986 if (smmu->version == ARM_SMMU_V1_64K)
1987 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1989 size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
1990 smmu->va_size = arm_smmu_id_size_to_bits(size);
1991 if (id & ID2_PTFS_4K)
1992 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1993 if (id & ID2_PTFS_16K)
1994 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1995 if (id & ID2_PTFS_64K)
1996 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1999 /* Now we've corralled the various formats, what'll it do? */
2000 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
2001 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
2002 if (smmu->features &
2003 (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
2004 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
2005 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
2006 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
2007 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
2008 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
2010 if (arm_smmu_ops.pgsize_bitmap == -1UL)
2011 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
2013 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
2014 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
2015 smmu->pgsize_bitmap);
2018 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
2019 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
2020 smmu->va_size, smmu->ipa_size);
2022 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
2023 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
2024 smmu->ipa_size, smmu->pa_size);
2029 struct arm_smmu_match_data {
2030 enum arm_smmu_arch_version version;
2031 enum arm_smmu_implementation model;
2034 #define ARM_SMMU_MATCH_DATA(name, ver, imp) \
2035 static const struct arm_smmu_match_data name = { .version = ver, .model = imp }
2037 ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
2038 ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
2039 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
2040 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
2041 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
2042 ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2);
2044 static const struct of_device_id arm_smmu_of_match[] = {
2045 { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
2046 { .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
2047 { .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
2048 { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
2049 { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
2050 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
2051 { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
2056 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
2061 case ACPI_IORT_SMMU_V1:
2062 case ACPI_IORT_SMMU_CORELINK_MMU400:
2063 smmu->version = ARM_SMMU_V1;
2064 smmu->model = GENERIC_SMMU;
2066 case ACPI_IORT_SMMU_CORELINK_MMU401:
2067 smmu->version = ARM_SMMU_V1_64K;
2068 smmu->model = GENERIC_SMMU;
2070 case ACPI_IORT_SMMU_V2:
2071 smmu->version = ARM_SMMU_V2;
2072 smmu->model = GENERIC_SMMU;
2074 case ACPI_IORT_SMMU_CORELINK_MMU500:
2075 smmu->version = ARM_SMMU_V2;
2076 smmu->model = ARM_MMU500;
2078 case ACPI_IORT_SMMU_CAVIUM_THUNDERX:
2079 smmu->version = ARM_SMMU_V2;
2080 smmu->model = CAVIUM_SMMUV2;
2089 static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2090 struct arm_smmu_device *smmu)
2092 struct device *dev = smmu->dev;
2093 struct acpi_iort_node *node =
2094 *(struct acpi_iort_node **)dev_get_platdata(dev);
2095 struct acpi_iort_smmu *iort_smmu;
2098 /* Retrieve SMMU1/2 specific data */
2099 iort_smmu = (struct acpi_iort_smmu *)node->node_data;
2101 ret = acpi_smmu_get_data(iort_smmu->model, smmu);
2105 /* Ignore the configuration access interrupt */
2106 smmu->num_global_irqs = 1;
2108 if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK)
2109 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2114 static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2115 struct arm_smmu_device *smmu)
2121 static int arm_smmu_device_dt_probe(struct platform_device *pdev,
2122 struct arm_smmu_device *smmu)
2124 const struct arm_smmu_match_data *data;
2125 struct device *dev = &pdev->dev;
2126 bool legacy_binding;
2128 if (of_property_read_u32(dev->of_node, "#global-interrupts",
2129 &smmu->num_global_irqs)) {
2130 dev_err(dev, "missing #global-interrupts property\n");
2134 data = of_device_get_match_data(dev);
2135 smmu->version = data->version;
2136 smmu->model = data->model;
2138 parse_driver_options(smmu);
2140 legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
2141 if (legacy_binding && !using_generic_binding) {
2142 if (!using_legacy_binding)
2143 pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
2144 using_legacy_binding = true;
2145 } else if (!legacy_binding && !using_legacy_binding) {
2146 using_generic_binding = true;
2148 dev_err(dev, "not probing due to mismatched DT properties\n");
2152 if (of_dma_is_coherent(dev->of_node))
2153 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2158 static void arm_smmu_bus_init(void)
2160 /* Oh, for a proper bus abstraction */
2161 if (!iommu_present(&platform_bus_type))
2162 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
2163 #ifdef CONFIG_ARM_AMBA
2164 if (!iommu_present(&amba_bustype))
2165 bus_set_iommu(&amba_bustype, &arm_smmu_ops);
2168 if (!iommu_present(&pci_bus_type)) {
2170 bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
2173 #ifdef CONFIG_FSL_MC_BUS
2174 if (!iommu_present(&fsl_mc_bus_type))
2175 bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops);
2179 static int arm_smmu_device_probe(struct platform_device *pdev)
2181 struct resource *res;
2182 resource_size_t ioaddr;
2183 struct arm_smmu_device *smmu;
2184 struct device *dev = &pdev->dev;
2185 int num_irqs, i, err;
2187 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
2189 dev_err(dev, "failed to allocate arm_smmu_device\n");
2195 err = arm_smmu_device_dt_probe(pdev, smmu);
2197 err = arm_smmu_device_acpi_probe(pdev, smmu);
2202 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2203 ioaddr = res->start;
2204 smmu->base = devm_ioremap_resource(dev, res);
2205 if (IS_ERR(smmu->base))
2206 return PTR_ERR(smmu->base);
2207 smmu->cb_base = smmu->base + resource_size(res) / 2;
2210 while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
2212 if (num_irqs > smmu->num_global_irqs)
2213 smmu->num_context_irqs++;
2216 if (!smmu->num_context_irqs) {
2217 dev_err(dev, "found %d interrupts but expected at least %d\n",
2218 num_irqs, smmu->num_global_irqs + 1);
2222 smmu->irqs = devm_kcalloc(dev, num_irqs, sizeof(*smmu->irqs),
2225 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
2229 for (i = 0; i < num_irqs; ++i) {
2230 int irq = platform_get_irq(pdev, i);
2233 dev_err(dev, "failed to get irq index %d\n", i);
2236 smmu->irqs[i] = irq;
2239 err = devm_clk_bulk_get_all(dev, &smmu->clks);
2241 dev_err(dev, "failed to get clocks %d\n", err);
2244 smmu->num_clks = err;
2246 err = clk_bulk_prepare_enable(smmu->num_clks, smmu->clks);
2250 err = arm_smmu_device_cfg_probe(smmu);
2254 if (smmu->version == ARM_SMMU_V2) {
2255 if (smmu->num_context_banks > smmu->num_context_irqs) {
2257 "found only %d context irq(s) but %d required\n",
2258 smmu->num_context_irqs, smmu->num_context_banks);
2262 /* Ignore superfluous interrupts */
2263 smmu->num_context_irqs = smmu->num_context_banks;
2266 for (i = 0; i < smmu->num_global_irqs; ++i) {
2267 err = devm_request_irq(smmu->dev, smmu->irqs[i],
2268 arm_smmu_global_fault,
2270 "arm-smmu global fault",
2273 dev_err(dev, "failed to request global IRQ %d (%u)\n",
2279 err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL,
2280 "smmu.%pa", &ioaddr);
2282 dev_err(dev, "Failed to register iommu in sysfs\n");
2286 iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
2287 iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);
2289 err = iommu_device_register(&smmu->iommu);
2291 dev_err(dev, "Failed to register iommu\n");
2295 platform_set_drvdata(pdev, smmu);
2296 arm_smmu_device_reset(smmu);
2297 arm_smmu_test_smr_masks(smmu);
2300 * We want to avoid touching dev->power.lock in fastpaths unless
2301 * it's really going to do something useful - pm_runtime_enabled()
2302 * can serve as an ideal proxy for that decision. So, conditionally
2303 * enable pm_runtime.
2305 if (dev->pm_domain) {
2306 pm_runtime_set_active(dev);
2307 pm_runtime_enable(dev);
2311 * For ACPI and generic DT bindings, an SMMU will be probed before
2312 * any device which might need it, so we want the bus ops in place
2313 * ready to handle default domain setup as soon as any SMMU exists.
2315 if (!using_legacy_binding)
2316 arm_smmu_bus_init();
2322 * With the legacy DT binding in play, though, we have no guarantees about
2323 * probe order, but then we're also not doing default domains, so we can
2324 * delay setting bus ops until we're sure every possible SMMU is ready,
2325 * and that way ensure that no add_device() calls get missed.
2327 static int arm_smmu_legacy_bus_init(void)
2329 if (using_legacy_binding)
2330 arm_smmu_bus_init();
2333 device_initcall_sync(arm_smmu_legacy_bus_init);
2335 static void arm_smmu_device_shutdown(struct platform_device *pdev)
2337 struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2342 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2343 dev_err(&pdev->dev, "removing device with active domains!\n");
2345 arm_smmu_rpm_get(smmu);
2346 /* Turn the thing off */
2347 writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2348 arm_smmu_rpm_put(smmu);
2350 if (pm_runtime_enabled(smmu->dev))
2351 pm_runtime_force_suspend(smmu->dev);
2353 clk_bulk_disable(smmu->num_clks, smmu->clks);
2355 clk_bulk_unprepare(smmu->num_clks, smmu->clks);
2358 static int __maybe_unused arm_smmu_runtime_resume(struct device *dev)
2360 struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2363 ret = clk_bulk_enable(smmu->num_clks, smmu->clks);
2367 arm_smmu_device_reset(smmu);
2372 static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev)
2374 struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2376 clk_bulk_disable(smmu->num_clks, smmu->clks);
2381 static int __maybe_unused arm_smmu_pm_resume(struct device *dev)
2383 if (pm_runtime_suspended(dev))
2386 return arm_smmu_runtime_resume(dev);
2389 static int __maybe_unused arm_smmu_pm_suspend(struct device *dev)
2391 if (pm_runtime_suspended(dev))
2394 return arm_smmu_runtime_suspend(dev);
2397 static const struct dev_pm_ops arm_smmu_pm_ops = {
2398 SET_SYSTEM_SLEEP_PM_OPS(arm_smmu_pm_suspend, arm_smmu_pm_resume)
2399 SET_RUNTIME_PM_OPS(arm_smmu_runtime_suspend,
2400 arm_smmu_runtime_resume, NULL)
2403 static struct platform_driver arm_smmu_driver = {
2406 .of_match_table = of_match_ptr(arm_smmu_of_match),
2407 .pm = &arm_smmu_pm_ops,
2408 .suppress_bind_attrs = true,
2410 .probe = arm_smmu_device_probe,
2411 .shutdown = arm_smmu_device_shutdown,
2413 builtin_platform_driver(arm_smmu_driver);