bus_find_device: Unify the match callback with class_find_device
[linux-2.6-block.git] / drivers / iommu / arm-smmu.c
CommitLineData
45ae7cff
WD
1/*
2 * IOMMU API for ARM architected SMMU implementations.
3 *
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.
7 *
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.
12 *
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.
16 *
17 * Copyright (C) 2013 ARM Limited
18 *
19 * Author: Will Deacon <will.deacon@arm.com>
20 *
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
45ae7cff 26 * - Context fault reporting
dc0eaa4e 27 * - Extended Stream ID (16 bit)
45ae7cff
WD
28 */
29
30#define pr_fmt(fmt) "arm-smmu: " fmt
31
d6fcd3b1
LP
32#include <linux/acpi.h>
33#include <linux/acpi_iort.h>
1f3d5ca4 34#include <linux/atomic.h>
45ae7cff 35#include <linux/delay.h>
9adb9594 36#include <linux/dma-iommu.h>
45ae7cff
WD
37#include <linux/dma-mapping.h>
38#include <linux/err.h>
39#include <linux/interrupt.h>
40#include <linux/io.h>
f9a05f05 41#include <linux/io-64-nonatomic-hi-lo.h>
b77cf11f 42#include <linux/io-pgtable.h>
45ae7cff 43#include <linux/iommu.h>
859a732e 44#include <linux/iopoll.h>
addb672f
PG
45#include <linux/init.h>
46#include <linux/moduleparam.h>
45ae7cff 47#include <linux/of.h>
bae2c2d4 48#include <linux/of_address.h>
d6fc5d97 49#include <linux/of_device.h>
adfec2e7 50#include <linux/of_iommu.h>
a9a1b0b5 51#include <linux/pci.h>
45ae7cff 52#include <linux/platform_device.h>
96a299d2 53#include <linux/pm_runtime.h>
45ae7cff
WD
54#include <linux/slab.h>
55#include <linux/spinlock.h>
56
57#include <linux/amba/bus.h>
eab03e2a 58#include <linux/fsl/mc.h>
45ae7cff 59
2b03774b
RC
60#include "arm-smmu-regs.h"
61
62#define ARM_MMU500_ACTLR_CPRE (1 << 1)
63
64#define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
74f55d34 65#define ARM_MMU500_ACR_S2CRB_TLBEN (1 << 10)
2b03774b
RC
66#define ARM_MMU500_ACR_SMTNMB_TLBEN (1 << 8)
67
68#define TLB_LOOP_TIMEOUT 1000000 /* 1s! */
69#define TLB_SPIN_COUNT 10
45ae7cff 70
45ae7cff
WD
71/* Maximum number of context banks per SMMU */
72#define ARM_SMMU_MAX_CBS 128
73
45ae7cff
WD
74/* SMMU global address space */
75#define ARM_SMMU_GR0(smmu) ((smmu)->base)
c757e852 76#define ARM_SMMU_GR1(smmu) ((smmu)->base + (1 << (smmu)->pgshift))
45ae7cff 77
3a5df8ff
AH
78/*
79 * SMMU global address space with conditional offset to access secure
80 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
81 * nsGFSYNR0: 0x450)
82 */
83#define ARM_SMMU_GR0_NS(smmu) \
84 ((smmu)->base + \
85 ((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS) \
86 ? 0x400 : 0))
87
f9a05f05
RM
88/*
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.
92 */
668b4ada 93#ifdef CONFIG_64BIT
f9a05f05 94#define smmu_write_atomic_lq writeq_relaxed
668b4ada 95#else
f9a05f05 96#define smmu_write_atomic_lq writel_relaxed
668b4ada
TC
97#endif
98
45ae7cff 99/* Translation context bank */
452107c7 100#define ARM_SMMU_CB(smmu, n) ((smmu)->cb_base + ((n) << (smmu)->pgshift))
45ae7cff 101
f3ebee80
EA
102#define MSI_IOVA_BASE 0x8000000
103#define MSI_IOVA_LENGTH 0x100000
104
4cf740b0 105static int force_stage;
addb672f
PG
106/*
107 * not really modular, but the easiest way to keep compat with existing
108 * bootargs behaviour is to continue using module_param() here.
109 */
25a1c96c 110module_param(force_stage, int, S_IRUGO);
4cf740b0
WD
111MODULE_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.");
954a03be
DA
113static bool disable_bypass =
114 IS_ENABLED(CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT);
25a1c96c
RM
115module_param(disable_bypass, bool, S_IRUGO);
116MODULE_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.");
4cf740b0 118
09360403 119enum arm_smmu_arch_version {
b7862e35
RM
120 ARM_SMMU_V1,
121 ARM_SMMU_V1_64K,
09360403
RM
122 ARM_SMMU_V2,
123};
124
67b65a3f
RM
125enum arm_smmu_implementation {
126 GENERIC_SMMU,
f0cfffc4 127 ARM_MMU500,
e086d912 128 CAVIUM_SMMUV2,
89cddc56 129 QCOM_SMMUV2,
67b65a3f
RM
130};
131
8e8b203e 132struct arm_smmu_s2cr {
588888a7
RM
133 struct iommu_group *group;
134 int count;
8e8b203e
RM
135 enum arm_smmu_s2cr_type type;
136 enum arm_smmu_s2cr_privcfg privcfg;
137 u8 cbndx;
138};
139
140#define s2cr_init_val (struct arm_smmu_s2cr){ \
141 .type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS, \
142}
143
45ae7cff 144struct arm_smmu_smr {
45ae7cff
WD
145 u16 mask;
146 u16 id;
1f3d5ca4 147 bool valid;
45ae7cff
WD
148};
149
90df373c
RM
150struct arm_smmu_cb {
151 u64 ttbr[2];
152 u32 tcr[2];
153 u32 mair[2];
154 struct arm_smmu_cfg *cfg;
155};
156
a9a1b0b5 157struct arm_smmu_master_cfg {
f80cd885 158 struct arm_smmu_device *smmu;
adfec2e7 159 s16 smendx[];
45ae7cff 160};
1f3d5ca4 161#define INVALID_SMENDX -1
adfec2e7
RM
162#define __fwspec_cfg(fw) ((struct arm_smmu_master_cfg *)fw->iommu_priv)
163#define fwspec_smmu(fw) (__fwspec_cfg(fw)->smmu)
8c82d6ec
RM
164#define fwspec_smendx(fw, i) \
165 (i >= fw->num_ids ? INVALID_SMENDX : __fwspec_cfg(fw)->smendx[i])
adfec2e7 166#define for_each_cfg_sme(fw, i, idx) \
8c82d6ec 167 for (i = 0; idx = fwspec_smendx(fw, i), i < fw->num_ids; ++i)
45ae7cff
WD
168
169struct arm_smmu_device {
170 struct device *dev;
45ae7cff
WD
171
172 void __iomem *base;
452107c7 173 void __iomem *cb_base;
c757e852 174 unsigned long pgshift;
45ae7cff
WD
175
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)
859a732e 181#define ARM_SMMU_FEAT_TRANS_OPS (1 << 5)
4e3e9b69 182#define ARM_SMMU_FEAT_VMID16 (1 << 6)
7602b871
RM
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)
dc0eaa4e 188#define ARM_SMMU_FEAT_EXIDS (1 << 12)
45ae7cff 189 u32 features;
3a5df8ff
AH
190
191#define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
192 u32 options;
09360403 193 enum arm_smmu_arch_version version;
67b65a3f 194 enum arm_smmu_implementation model;
45ae7cff
WD
195
196 u32 num_context_banks;
197 u32 num_s2_context_banks;
198 DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
90df373c 199 struct arm_smmu_cb *cbs;
45ae7cff
WD
200 atomic_t irptndx;
201
202 u32 num_mapping_groups;
21174240
RM
203 u16 streamid_mask;
204 u16 smr_mask_mask;
1f3d5ca4 205 struct arm_smmu_smr *smrs;
8e8b203e 206 struct arm_smmu_s2cr *s2crs;
588888a7 207 struct mutex stream_map_mutex;
45ae7cff 208
518f7136
WD
209 unsigned long va_size;
210 unsigned long ipa_size;
211 unsigned long pa_size;
d5466357 212 unsigned long pgsize_bitmap;
45ae7cff
WD
213
214 u32 num_global_irqs;
215 u32 num_context_irqs;
216 unsigned int *irqs;
96a299d2
S
217 struct clk_bulk_data *clks;
218 int num_clks;
45ae7cff 219
1bd37a68 220 u32 cavium_id_base; /* Specific to Cavium */
9648cbc9 221
8e517e76
WD
222 spinlock_t global_sync_lock;
223
9648cbc9
JR
224 /* IOMMU core code handle */
225 struct iommu_device iommu;
45ae7cff
WD
226};
227
7602b871
RM
228enum 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,
45ae7cff
WD
233};
234
235struct arm_smmu_cfg {
45ae7cff
WD
236 u8 cbndx;
237 u8 irptndx;
280b683c
RM
238 union {
239 u16 asid;
240 u16 vmid;
241 };
45ae7cff 242 u32 cbar;
7602b871 243 enum arm_smmu_context_fmt fmt;
45ae7cff 244};
faea13b7 245#define INVALID_IRPTNDX 0xff
45ae7cff 246
c752ce45
WD
247enum arm_smmu_domain_stage {
248 ARM_SMMU_DOMAIN_S1 = 0,
249 ARM_SMMU_DOMAIN_S2,
250 ARM_SMMU_DOMAIN_NESTED,
61bc6711 251 ARM_SMMU_DOMAIN_BYPASS,
c752ce45
WD
252};
253
45ae7cff 254struct arm_smmu_domain {
44680eed 255 struct arm_smmu_device *smmu;
518f7136 256 struct io_pgtable_ops *pgtbl_ops;
32b12449 257 const struct iommu_gather_ops *tlb_ops;
44680eed 258 struct arm_smmu_cfg cfg;
c752ce45 259 enum arm_smmu_domain_stage stage;
44f6876a 260 bool non_strict;
518f7136 261 struct mutex init_mutex; /* Protects smmu pointer */
8e517e76 262 spinlock_t cb_lock; /* Serialises ATS1* ops and TLB syncs */
1d672638 263 struct iommu_domain domain;
45ae7cff
WD
264};
265
3a5df8ff
AH
266struct arm_smmu_option_prop {
267 u32 opt;
268 const char *prop;
269};
270
1bd37a68
TC
271static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);
272
021bb842
RM
273static bool using_legacy_binding, using_generic_binding;
274
2907320d 275static struct arm_smmu_option_prop arm_smmu_options[] = {
3a5df8ff
AH
276 { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
277 { 0, NULL},
278};
279
d4a44f07
S
280static inline int arm_smmu_rpm_get(struct arm_smmu_device *smmu)
281{
282 if (pm_runtime_enabled(smmu->dev))
283 return pm_runtime_get_sync(smmu->dev);
284
285 return 0;
286}
287
288static inline void arm_smmu_rpm_put(struct arm_smmu_device *smmu)
289{
290 if (pm_runtime_enabled(smmu->dev))
291 pm_runtime_put(smmu->dev);
292}
293
1d672638
JR
294static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
295{
296 return container_of(dom, struct arm_smmu_domain, domain);
297}
298
3a5df8ff
AH
299static void parse_driver_options(struct arm_smmu_device *smmu)
300{
301 int i = 0;
2907320d 302
3a5df8ff
AH
303 do {
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);
309 }
310 } while (arm_smmu_options[++i].opt);
311}
312
8f68f8e2 313static struct device_node *dev_get_dev_node(struct device *dev)
a9a1b0b5
WD
314{
315 if (dev_is_pci(dev)) {
316 struct pci_bus *bus = to_pci_dev(dev)->bus;
2907320d 317
a9a1b0b5
WD
318 while (!pci_is_root_bus(bus))
319 bus = bus->parent;
f80cd885 320 return of_node_get(bus->bridge->parent->of_node);
a9a1b0b5
WD
321 }
322
f80cd885 323 return of_node_get(dev->of_node);
a9a1b0b5
WD
324}
325
f80cd885 326static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
45ae7cff 327{
f80cd885
RM
328 *((__be32 *)data) = cpu_to_be32(alias);
329 return 0; /* Continue walking */
45ae7cff
WD
330}
331
f80cd885 332static int __find_legacy_master_phandle(struct device *dev, void *data)
a9a1b0b5 333{
f80cd885
RM
334 struct of_phandle_iterator *it = *(void **)data;
335 struct device_node *np = it->node;
336 int err;
337
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;
342 return 1;
343 }
344 it->node = np;
345 return err == -ENOENT ? 0 : err;
a9a1b0b5
WD
346}
347
d6fc5d97 348static struct platform_driver arm_smmu_driver;
adfec2e7 349static struct iommu_ops arm_smmu_ops;
d6fc5d97 350
adfec2e7
RM
351static int arm_smmu_register_legacy_master(struct device *dev,
352 struct arm_smmu_device **smmu)
45ae7cff 353{
adfec2e7 354 struct device *smmu_dev;
f80cd885
RM
355 struct device_node *np;
356 struct of_phandle_iterator it;
357 void *data = &it;
adfec2e7 358 u32 *sids;
f80cd885
RM
359 __be32 pci_sid;
360 int err;
45ae7cff 361
f80cd885
RM
362 np = dev_get_dev_node(dev);
363 if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
364 of_node_put(np);
365 return -ENODEV;
366 }
45ae7cff 367
f80cd885 368 it.node = np;
d6fc5d97
RM
369 err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
370 __find_legacy_master_phandle);
adfec2e7 371 smmu_dev = data;
f80cd885
RM
372 of_node_put(np);
373 if (err == 0)
374 return -ENODEV;
375 if (err < 0)
376 return err;
45ae7cff 377
f80cd885
RM
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,
381 &pci_sid);
382 it.cur = &pci_sid;
383 it.cur_count = 1;
384 }
45ae7cff 385
adfec2e7
RM
386 err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
387 &arm_smmu_ops);
388 if (err)
389 return err;
45ae7cff 390
adfec2e7
RM
391 sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
392 if (!sids)
393 return -ENOMEM;
44680eed 394
adfec2e7
RM
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);
398 kfree(sids);
399 return err;
45ae7cff
WD
400}
401
402static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
403{
404 int idx;
405
406 do {
407 idx = find_next_zero_bit(map, end, start);
408 if (idx == end)
409 return -ENOSPC;
410 } while (test_and_set_bit(idx, map));
411
412 return idx;
413}
414
415static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
416{
417 clear_bit(idx, map);
418}
419
420/* Wait for any pending TLB invalidations to complete */
11febfca
RM
421static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu,
422 void __iomem *sync, void __iomem *status)
45ae7cff 423{
8513c893 424 unsigned int spin_cnt, delay;
45ae7cff 425
11febfca 426 writel_relaxed(0, sync);
8513c893
RM
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))
430 return;
431 cpu_relax();
45ae7cff 432 }
8513c893 433 udelay(delay);
45ae7cff 434 }
8513c893
RM
435 dev_err_ratelimited(smmu->dev,
436 "TLB sync timed out -- SMMU may be deadlocked\n");
45ae7cff
WD
437}
438
11febfca
RM
439static void arm_smmu_tlb_sync_global(struct arm_smmu_device *smmu)
440{
441 void __iomem *base = ARM_SMMU_GR0(smmu);
8e517e76 442 unsigned long flags;
11febfca 443
8e517e76 444 spin_lock_irqsave(&smmu->global_sync_lock, flags);
11febfca
RM
445 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_GR0_sTLBGSYNC,
446 base + ARM_SMMU_GR0_sTLBGSTATUS);
8e517e76 447 spin_unlock_irqrestore(&smmu->global_sync_lock, flags);
11febfca
RM
448}
449
450static void arm_smmu_tlb_sync_context(void *cookie)
518f7136
WD
451{
452 struct arm_smmu_domain *smmu_domain = cookie;
11febfca
RM
453 struct arm_smmu_device *smmu = smmu_domain->smmu;
454 void __iomem *base = ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx);
8e517e76 455 unsigned long flags;
11febfca 456
8e517e76 457 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
11febfca
RM
458 __arm_smmu_tlb_sync(smmu, base + ARM_SMMU_CB_TLBSYNC,
459 base + ARM_SMMU_CB_TLBSTATUS);
8e517e76 460 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
518f7136
WD
461}
462
11febfca 463static void arm_smmu_tlb_sync_vmid(void *cookie)
518f7136
WD
464{
465 struct arm_smmu_domain *smmu_domain = cookie;
11febfca
RM
466
467 arm_smmu_tlb_sync_global(smmu_domain->smmu);
518f7136
WD
468}
469
11febfca 470static void arm_smmu_tlb_inv_context_s1(void *cookie)
1463fe44 471{
518f7136 472 struct arm_smmu_domain *smmu_domain = cookie;
44680eed 473 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
11febfca 474 void __iomem *base = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
1463fe44 475
44f6876a
RM
476 /*
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.
479 */
480 writel(cfg->asid, base + ARM_SMMU_CB_S1_TLBIASID);
11febfca
RM
481 arm_smmu_tlb_sync_context(cookie);
482}
1463fe44 483
11febfca
RM
484static void arm_smmu_tlb_inv_context_s2(void *cookie)
485{
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);
1463fe44 489
44f6876a
RM
490 /* NOTE: see above */
491 writel(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
11febfca 492 arm_smmu_tlb_sync_global(smmu);
518f7136
WD
493}
494
495static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
06c610e8 496 size_t granule, bool leaf, void *cookie)
518f7136
WD
497{
498 struct arm_smmu_domain *smmu_domain = cookie;
499 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
518f7136 500 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
11febfca 501 void __iomem *reg = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
518f7136 502
7d321bd3
WD
503 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
504 wmb();
505
518f7136 506 if (stage1) {
518f7136
WD
507 reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
508
7602b871 509 if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
518f7136 510 iova &= ~12UL;
280b683c 511 iova |= cfg->asid;
75df1386
RM
512 do {
513 writel_relaxed(iova, reg);
514 iova += granule;
515 } while (size -= granule);
518f7136
WD
516 } else {
517 iova >>= 12;
280b683c 518 iova |= (u64)cfg->asid << 48;
75df1386
RM
519 do {
520 writeq_relaxed(iova, reg);
521 iova += granule >> 12;
522 } while (size -= granule);
518f7136 523 }
11febfca 524 } else {
518f7136
WD
525 reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
526 ARM_SMMU_CB_S2_TLBIIPAS2;
75df1386
RM
527 iova >>= 12;
528 do {
f9a05f05 529 smmu_write_atomic_lq(iova, reg);
75df1386
RM
530 iova += granule >> 12;
531 } while (size -= granule);
518f7136
WD
532 }
533}
534
11febfca
RM
535/*
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.
540 */
541static void arm_smmu_tlb_inv_vmid_nosync(unsigned long iova, size_t size,
542 size_t granule, bool leaf, void *cookie)
543{
544 struct arm_smmu_domain *smmu_domain = cookie;
545 void __iomem *base = ARM_SMMU_GR0(smmu_domain->smmu);
546
7d321bd3
WD
547 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
548 wmb();
549
11febfca
RM
550 writel_relaxed(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
551}
552
553static const struct iommu_gather_ops arm_smmu_s1_tlb_ops = {
554 .tlb_flush_all = arm_smmu_tlb_inv_context_s1,
518f7136 555 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
11febfca
RM
556 .tlb_sync = arm_smmu_tlb_sync_context,
557};
558
559static const struct iommu_gather_ops arm_smmu_s2_tlb_ops_v2 = {
560 .tlb_flush_all = arm_smmu_tlb_inv_context_s2,
518f7136 561 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
11febfca
RM
562 .tlb_sync = arm_smmu_tlb_sync_context,
563};
564
565static 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,
518f7136
WD
569};
570
45ae7cff
WD
571static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
572{
bc580b56 573 u32 fsr, fsynr, cbfrsynra;
45ae7cff
WD
574 unsigned long iova;
575 struct iommu_domain *domain = dev;
1d672638 576 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed
WD
577 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
578 struct arm_smmu_device *smmu = smmu_domain->smmu;
bc580b56 579 void __iomem *gr1_base = ARM_SMMU_GR1(smmu);
45ae7cff
WD
580 void __iomem *cb_base;
581
452107c7 582 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
45ae7cff
WD
583 fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);
584
585 if (!(fsr & FSR_FAULT))
586 return IRQ_NONE;
587
45ae7cff 588 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
f9a05f05 589 iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
bc580b56 590 cbfrsynra = readl_relaxed(gr1_base + ARM_SMMU_GR1_CBFRSYNRA(cfg->cbndx));
45ae7cff 591
3714ce1d 592 dev_err_ratelimited(smmu->dev,
bc580b56
VG
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);
45ae7cff 595
3714ce1d
WD
596 writel(fsr, cb_base + ARM_SMMU_CB_FSR);
597 return IRQ_HANDLED;
45ae7cff
WD
598}
599
600static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
601{
602 u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
603 struct arm_smmu_device *smmu = dev;
3a5df8ff 604 void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
45ae7cff
WD
605
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);
610
3a5df8ff
AH
611 if (!gfsr)
612 return IRQ_NONE;
613
45ae7cff
WD
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);
619
620 writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
adaba320 621 return IRQ_HANDLED;
45ae7cff
WD
622}
623
518f7136
WD
624static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
625 struct io_pgtable_cfg *pgtbl_cfg)
45ae7cff 626{
44680eed 627 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
90df373c
RM
628 struct arm_smmu_cb *cb = &smmu_domain->smmu->cbs[cfg->cbndx];
629 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
630
631 cb->cfg = cfg;
632
633 /* TTBCR */
634 if (stage1) {
635 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
636 cb->tcr[0] = pgtbl_cfg->arm_v7s_cfg.tcr;
637 } else {
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;
643 }
644 } else {
645 cb->tcr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
646 }
647
648 /* TTBRs */
649 if (stage1) {
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];
653 } else {
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;
658 }
659 } else {
660 cb->ttbr[0] = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
661 }
662
663 /* MAIRs (stage-1 only) */
664 if (stage1) {
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;
668 } else {
669 cb->mair[0] = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
670 cb->mair[1] = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
671 }
672 }
673}
674
675static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
676{
677 u32 reg;
678 bool stage1;
679 struct arm_smmu_cb *cb = &smmu->cbs[idx];
680 struct arm_smmu_cfg *cfg = cb->cfg;
c88ae5de 681 void __iomem *cb_base, *gr1_base;
45ae7cff 682
90df373c
RM
683 cb_base = ARM_SMMU_CB(smmu, idx);
684
685 /* Unassigned context banks only need disabling */
686 if (!cfg) {
687 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
688 return;
689 }
690
45ae7cff 691 gr1_base = ARM_SMMU_GR1(smmu);
44680eed 692 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
45ae7cff 693
90df373c 694 /* CBA2R */
4a1c93cb 695 if (smmu->version > ARM_SMMU_V1) {
7602b871
RM
696 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
697 reg = CBA2R_RW64_64BIT;
698 else
699 reg = CBA2R_RW64_32BIT;
4e3e9b69
TC
700 /* 16-bit VMIDs live in CBA2R */
701 if (smmu->features & ARM_SMMU_FEAT_VMID16)
280b683c 702 reg |= cfg->vmid << CBA2R_VMID_SHIFT;
4e3e9b69 703
90df373c 704 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(idx));
4a1c93cb
WD
705 }
706
45ae7cff 707 /* CBAR */
44680eed 708 reg = cfg->cbar;
b7862e35 709 if (smmu->version < ARM_SMMU_V2)
2907320d 710 reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
45ae7cff 711
57ca90f6
WD
712 /*
713 * Use the weakest shareability/memory types, so they are
714 * overridden by the ttbcr/pte.
715 */
716 if (stage1) {
717 reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
718 (CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
4e3e9b69
TC
719 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
720 /* 8-bit VMIDs live in CBAR */
280b683c 721 reg |= cfg->vmid << CBAR_VMID_SHIFT;
57ca90f6 722 }
90df373c 723 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(idx));
45ae7cff 724
125458ab
SG
725 /*
726 * TTBCR
727 * We must write this before the TTBRs, since it determines the
728 * access behaviour of some fields (in particular, ASID[15:8]).
729 */
90df373c
RM
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);
45ae7cff 733
518f7136 734 /* TTBRs */
90df373c
RM
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);
518f7136 739 } else {
90df373c
RM
740 writeq_relaxed(cb->ttbr[0], cb_base + ARM_SMMU_CB_TTBR0);
741 if (stage1)
742 writeq_relaxed(cb->ttbr[1], cb_base + ARM_SMMU_CB_TTBR1);
518f7136 743 }
a65217a4 744
518f7136 745 /* MAIRs (stage-1 only) */
45ae7cff 746 if (stage1) {
90df373c
RM
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);
45ae7cff
WD
749 }
750
45ae7cff 751 /* SCTLR */
6070529b 752 reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
45ae7cff
WD
753 if (stage1)
754 reg |= SCTLR_S1_ASIDPNE;
90df373c
RM
755 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN))
756 reg |= SCTLR_E;
757
25724841 758 writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
45ae7cff
WD
759}
760
761static int arm_smmu_init_domain_context(struct iommu_domain *domain,
44680eed 762 struct arm_smmu_device *smmu)
45ae7cff 763{
a18037b2 764 int irq, start, ret = 0;
518f7136
WD
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;
1d672638 769 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed 770 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
45ae7cff 771
518f7136 772 mutex_lock(&smmu_domain->init_mutex);
a18037b2
MH
773 if (smmu_domain->smmu)
774 goto out_unlock;
775
61bc6711
WD
776 if (domain->type == IOMMU_DOMAIN_IDENTITY) {
777 smmu_domain->stage = ARM_SMMU_DOMAIN_BYPASS;
778 smmu_domain->smmu = smmu;
779 goto out_unlock;
780 }
781
c752ce45
WD
782 /*
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
786 * following table:
787 *
788 * Requested Supported Actual
789 * S1 N S1
790 * S1 S1+S2 S1
791 * S1 S2 S2
792 * S1 S1 S1
793 * N N N
794 * N S1+S2 S2
795 * N S2 S2
796 * N S1 S1
797 *
798 * Note that you can't actually request stage-2 mappings.
799 */
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;
804
7602b871
RM
805 /*
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...
812 */
813 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
814 cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
6070529b
RM
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;
7602b871
RM
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;
825
826 if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
827 ret = -EINVAL;
828 goto out_unlock;
829 }
830
c752ce45
WD
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;
518f7136
WD
835 ias = smmu->va_size;
836 oas = smmu->ipa_size;
7602b871 837 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
518f7136 838 fmt = ARM_64_LPAE_S1;
6070529b 839 } else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
518f7136 840 fmt = ARM_32_LPAE_S1;
7602b871
RM
841 ias = min(ias, 32UL);
842 oas = min(oas, 40UL);
6070529b
RM
843 } else {
844 fmt = ARM_V7S;
845 ias = min(ias, 32UL);
846 oas = min(oas, 32UL);
7602b871 847 }
32b12449 848 smmu_domain->tlb_ops = &arm_smmu_s1_tlb_ops;
c752ce45
WD
849 break;
850 case ARM_SMMU_DOMAIN_NESTED:
45ae7cff
WD
851 /*
852 * We will likely want to change this if/when KVM gets
853 * involved.
854 */
c752ce45 855 case ARM_SMMU_DOMAIN_S2:
9c5c92e3
WD
856 cfg->cbar = CBAR_TYPE_S2_TRANS;
857 start = 0;
518f7136
WD
858 ias = smmu->ipa_size;
859 oas = smmu->pa_size;
7602b871 860 if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
518f7136 861 fmt = ARM_64_LPAE_S2;
7602b871 862 } else {
518f7136 863 fmt = ARM_32_LPAE_S2;
7602b871
RM
864 ias = min(ias, 40UL);
865 oas = min(oas, 40UL);
866 }
11febfca 867 if (smmu->version == ARM_SMMU_V2)
32b12449 868 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v2;
11febfca 869 else
32b12449 870 smmu_domain->tlb_ops = &arm_smmu_s2_tlb_ops_v1;
c752ce45
WD
871 break;
872 default:
873 ret = -EINVAL;
874 goto out_unlock;
45ae7cff 875 }
45ae7cff
WD
876 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
877 smmu->num_context_banks);
287980e4 878 if (ret < 0)
a18037b2 879 goto out_unlock;
45ae7cff 880
44680eed 881 cfg->cbndx = ret;
b7862e35 882 if (smmu->version < ARM_SMMU_V2) {
44680eed
WD
883 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
884 cfg->irptndx %= smmu->num_context_irqs;
45ae7cff 885 } else {
44680eed 886 cfg->irptndx = cfg->cbndx;
45ae7cff
WD
887 }
888
280b683c
RM
889 if (smmu_domain->stage == ARM_SMMU_DOMAIN_S2)
890 cfg->vmid = cfg->cbndx + 1 + smmu->cavium_id_base;
891 else
892 cfg->asid = cfg->cbndx + smmu->cavium_id_base;
893
518f7136 894 pgtbl_cfg = (struct io_pgtable_cfg) {
d5466357 895 .pgsize_bitmap = smmu->pgsize_bitmap,
518f7136
WD
896 .ias = ias,
897 .oas = oas,
32b12449 898 .tlb = smmu_domain->tlb_ops,
2df7a25c 899 .iommu_dev = smmu->dev,
518f7136
WD
900 };
901
81b3c252
RM
902 if (smmu->features & ARM_SMMU_FEAT_COHERENT_WALK)
903 pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_NO_DMA;
904
44f6876a
RM
905 if (smmu_domain->non_strict)
906 pgtbl_cfg.quirks |= IO_PGTABLE_QUIRK_NON_STRICT;
907
518f7136
WD
908 smmu_domain->smmu = smmu;
909 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
910 if (!pgtbl_ops) {
911 ret = -ENOMEM;
912 goto out_clear_smmu;
913 }
914
d5466357
RM
915 /* Update the domain's page sizes to reflect the page table format */
916 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
455eb7d3
RM
917 domain->geometry.aperture_end = (1UL << ias) - 1;
918 domain->geometry.force_aperture = true;
a18037b2 919
518f7136
WD
920 /* Initialise the context bank with our page table cfg */
921 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
90df373c 922 arm_smmu_write_context_bank(smmu, cfg->cbndx);
518f7136
WD
923
924 /*
925 * Request context fault interrupt. Do this last to avoid the
926 * handler seeing a half-initialised domain state.
927 */
44680eed 928 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
bee14004
PF
929 ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
930 IRQF_SHARED, "arm-smmu-context-fault", domain);
287980e4 931 if (ret < 0) {
45ae7cff 932 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
44680eed
WD
933 cfg->irptndx, irq);
934 cfg->irptndx = INVALID_IRPTNDX;
45ae7cff
WD
935 }
936
518f7136
WD
937 mutex_unlock(&smmu_domain->init_mutex);
938
939 /* Publish page table ops for map/unmap */
940 smmu_domain->pgtbl_ops = pgtbl_ops;
a9a1b0b5 941 return 0;
45ae7cff 942
518f7136
WD
943out_clear_smmu:
944 smmu_domain->smmu = NULL;
a18037b2 945out_unlock:
518f7136 946 mutex_unlock(&smmu_domain->init_mutex);
45ae7cff
WD
947 return ret;
948}
949
950static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
951{
1d672638 952 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed
WD
953 struct arm_smmu_device *smmu = smmu_domain->smmu;
954 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
d4a44f07 955 int ret, irq;
45ae7cff 956
61bc6711 957 if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY)
45ae7cff
WD
958 return;
959
d4a44f07
S
960 ret = arm_smmu_rpm_get(smmu);
961 if (ret < 0)
962 return;
963
518f7136
WD
964 /*
965 * Disable the context bank and free the page tables before freeing
966 * it.
967 */
90df373c
RM
968 smmu->cbs[cfg->cbndx].cfg = NULL;
969 arm_smmu_write_context_bank(smmu, cfg->cbndx);
1463fe44 970
44680eed
WD
971 if (cfg->irptndx != INVALID_IRPTNDX) {
972 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
bee14004 973 devm_free_irq(smmu->dev, irq, domain);
45ae7cff
WD
974 }
975
44830b0c 976 free_io_pgtable_ops(smmu_domain->pgtbl_ops);
44680eed 977 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
d4a44f07
S
978
979 arm_smmu_rpm_put(smmu);
45ae7cff
WD
980}
981
1d672638 982static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
45ae7cff
WD
983{
984 struct arm_smmu_domain *smmu_domain;
45ae7cff 985
61bc6711
WD
986 if (type != IOMMU_DOMAIN_UNMANAGED &&
987 type != IOMMU_DOMAIN_DMA &&
988 type != IOMMU_DOMAIN_IDENTITY)
1d672638 989 return NULL;
45ae7cff
WD
990 /*
991 * Allocate the domain and initialise some of its data structures.
992 * We can't really do anything meaningful until we've added a
993 * master.
994 */
995 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
996 if (!smmu_domain)
1d672638 997 return NULL;
45ae7cff 998
021bb842
RM
999 if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
1000 iommu_get_dma_cookie(&smmu_domain->domain))) {
9adb9594
RM
1001 kfree(smmu_domain);
1002 return NULL;
1003 }
1004
518f7136 1005 mutex_init(&smmu_domain->init_mutex);
523d7423 1006 spin_lock_init(&smmu_domain->cb_lock);
1d672638
JR
1007
1008 return &smmu_domain->domain;
45ae7cff
WD
1009}
1010
1d672638 1011static void arm_smmu_domain_free(struct iommu_domain *domain)
45ae7cff 1012{
1d672638 1013 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1463fe44
WD
1014
1015 /*
1016 * Free the domain resources. We assume that all devices have
1017 * already been detached.
1018 */
9adb9594 1019 iommu_put_dma_cookie(domain);
45ae7cff 1020 arm_smmu_destroy_domain_context(domain);
45ae7cff
WD
1021 kfree(smmu_domain);
1022}
1023
1f3d5ca4
RM
1024static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
1025{
1026 struct arm_smmu_smr *smr = smmu->smrs + idx;
f80cd885 1027 u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1f3d5ca4 1028
dc0eaa4e 1029 if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
1f3d5ca4
RM
1030 reg |= SMR_VALID;
1031 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
1032}
1033
8e8b203e
RM
1034static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
1035{
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;
1040
dc0eaa4e
AM
1041 if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
1042 smmu->smrs[idx].valid)
1043 reg |= S2CR_EXIDVALID;
8e8b203e
RM
1044 writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_S2CR(idx));
1045}
1046
1047static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
1048{
1049 arm_smmu_write_s2cr(smmu, idx);
1050 if (smmu->smrs)
1051 arm_smmu_write_smr(smmu, idx);
1052}
1053
dc0eaa4e
AM
1054/*
1055 * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function
1056 * should be called after sCR0 is written.
1057 */
1058static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
1059{
1060 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1061 u32 smr;
1062
1063 if (!smmu->smrs)
1064 return;
1065
1066 /*
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.
1070 */
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;
1075
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;
1080}
1081
588888a7 1082static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1f3d5ca4
RM
1083{
1084 struct arm_smmu_smr *smrs = smmu->smrs;
588888a7 1085 int i, free_idx = -ENOSPC;
1f3d5ca4 1086
588888a7
RM
1087 /* Stream indexing is blissfully easy */
1088 if (!smrs)
1089 return id;
1090
1091 /* Validating SMRs is... less so */
1092 for (i = 0; i < smmu->num_mapping_groups; ++i) {
1093 if (!smrs[i].valid) {
1094 /*
1095 * Note the first free entry we come across, which
1096 * we'll claim in the end if nothing else matches.
1097 */
1098 if (free_idx < 0)
1099 free_idx = i;
1f3d5ca4
RM
1100 continue;
1101 }
588888a7
RM
1102 /*
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.
1108 */
1109 if ((mask & smrs[i].mask) == mask &&
1110 !((id ^ smrs[i].id) & ~smrs[i].mask))
1111 return i;
1112 /*
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.
1116 */
1117 if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
1118 return -EINVAL;
1119 }
1f3d5ca4 1120
588888a7
RM
1121 return free_idx;
1122}
1123
1124static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
1125{
1126 if (--smmu->s2crs[idx].count)
1127 return false;
1128
1129 smmu->s2crs[idx] = s2cr_init_val;
1130 if (smmu->smrs)
1131 smmu->smrs[idx].valid = false;
1132
1133 return true;
1134}
1135
1136static int arm_smmu_master_alloc_smes(struct device *dev)
1137{
9b468f7d 1138 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
adfec2e7 1139 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
588888a7
RM
1140 struct arm_smmu_device *smmu = cfg->smmu;
1141 struct arm_smmu_smr *smrs = smmu->smrs;
1142 struct iommu_group *group;
1143 int i, idx, ret;
1144
1145 mutex_lock(&smmu->stream_map_mutex);
1146 /* Figure out a viable stream map entry allocation */
adfec2e7 1147 for_each_cfg_sme(fwspec, i, idx) {
021bb842
RM
1148 u16 sid = fwspec->ids[i];
1149 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1150
588888a7
RM
1151 if (idx != INVALID_SMENDX) {
1152 ret = -EEXIST;
1153 goto out_err;
45ae7cff
WD
1154 }
1155
021bb842 1156 ret = arm_smmu_find_sme(smmu, sid, mask);
588888a7
RM
1157 if (ret < 0)
1158 goto out_err;
1159
1160 idx = ret;
1161 if (smrs && smmu->s2crs[idx].count == 0) {
021bb842
RM
1162 smrs[idx].id = sid;
1163 smrs[idx].mask = mask;
588888a7
RM
1164 smrs[idx].valid = true;
1165 }
1166 smmu->s2crs[idx].count++;
1167 cfg->smendx[i] = (s16)idx;
45ae7cff
WD
1168 }
1169
588888a7
RM
1170 group = iommu_group_get_for_dev(dev);
1171 if (!group)
1172 group = ERR_PTR(-ENOMEM);
1173 if (IS_ERR(group)) {
1174 ret = PTR_ERR(group);
1175 goto out_err;
1176 }
1177 iommu_group_put(group);
1f3d5ca4 1178
45ae7cff 1179 /* It worked! Now, poke the actual hardware */
adfec2e7 1180 for_each_cfg_sme(fwspec, i, idx) {
588888a7
RM
1181 arm_smmu_write_sme(smmu, idx);
1182 smmu->s2crs[idx].group = group;
1183 }
45ae7cff 1184
588888a7 1185 mutex_unlock(&smmu->stream_map_mutex);
45ae7cff
WD
1186 return 0;
1187
588888a7 1188out_err:
1f3d5ca4 1189 while (i--) {
588888a7 1190 arm_smmu_free_sme(smmu, cfg->smendx[i]);
1f3d5ca4
RM
1191 cfg->smendx[i] = INVALID_SMENDX;
1192 }
588888a7
RM
1193 mutex_unlock(&smmu->stream_map_mutex);
1194 return ret;
45ae7cff
WD
1195}
1196
adfec2e7 1197static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
45ae7cff 1198{
adfec2e7
RM
1199 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1200 struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
d3097e39 1201 int i, idx;
43b412be 1202
588888a7 1203 mutex_lock(&smmu->stream_map_mutex);
adfec2e7 1204 for_each_cfg_sme(fwspec, i, idx) {
588888a7
RM
1205 if (arm_smmu_free_sme(smmu, idx))
1206 arm_smmu_write_sme(smmu, idx);
1f3d5ca4 1207 cfg->smendx[i] = INVALID_SMENDX;
45ae7cff 1208 }
588888a7 1209 mutex_unlock(&smmu->stream_map_mutex);
45ae7cff
WD
1210}
1211
45ae7cff 1212static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
adfec2e7 1213 struct iommu_fwspec *fwspec)
45ae7cff 1214{
44680eed 1215 struct arm_smmu_device *smmu = smmu_domain->smmu;
8e8b203e 1216 struct arm_smmu_s2cr *s2cr = smmu->s2crs;
8e8b203e 1217 u8 cbndx = smmu_domain->cfg.cbndx;
61bc6711 1218 enum arm_smmu_s2cr_type type;
588888a7 1219 int i, idx;
45ae7cff 1220
61bc6711
WD
1221 if (smmu_domain->stage == ARM_SMMU_DOMAIN_BYPASS)
1222 type = S2CR_TYPE_BYPASS;
1223 else
1224 type = S2CR_TYPE_TRANS;
1225
adfec2e7 1226 for_each_cfg_sme(fwspec, i, idx) {
8e8b203e 1227 if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
588888a7 1228 continue;
1f3d5ca4 1229
8e8b203e 1230 s2cr[idx].type = type;
e1989807 1231 s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
8e8b203e
RM
1232 s2cr[idx].cbndx = cbndx;
1233 arm_smmu_write_s2cr(smmu, idx);
43b412be 1234 }
8e8b203e 1235 return 0;
bc7f2ce0
WD
1236}
1237
45ae7cff
WD
1238static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1239{
a18037b2 1240 int ret;
9b468f7d 1241 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
adfec2e7 1242 struct arm_smmu_device *smmu;
1d672638 1243 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
45ae7cff 1244
adfec2e7 1245 if (!fwspec || fwspec->ops != &arm_smmu_ops) {
45ae7cff
WD
1246 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1247 return -ENXIO;
1248 }
1249
fba4f8e5
RM
1250 /*
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.
1256 */
1257 if (!fwspec->iommu_priv)
1258 return -ENODEV;
1259
adfec2e7 1260 smmu = fwspec_smmu(fwspec);
d4a44f07
S
1261
1262 ret = arm_smmu_rpm_get(smmu);
1263 if (ret < 0)
1264 return ret;
1265
518f7136 1266 /* Ensure that the domain is finalised */
adfec2e7 1267 ret = arm_smmu_init_domain_context(domain, smmu);
287980e4 1268 if (ret < 0)
d4a44f07 1269 goto rpm_put;
518f7136 1270
45ae7cff 1271 /*
44680eed
WD
1272 * Sanity check the domain. We don't support domains across
1273 * different SMMUs.
45ae7cff 1274 */
adfec2e7 1275 if (smmu_domain->smmu != smmu) {
45ae7cff
WD
1276 dev_err(dev,
1277 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
adfec2e7 1278 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
d4a44f07
S
1279 ret = -EINVAL;
1280 goto rpm_put;
45ae7cff 1281 }
45ae7cff
WD
1282
1283 /* Looks ok, so add the device to the domain */
d4a44f07
S
1284 ret = arm_smmu_domain_add_master(smmu_domain, fwspec);
1285
1286rpm_put:
1287 arm_smmu_rpm_put(smmu);
1288 return ret;
45ae7cff
WD
1289}
1290
45ae7cff 1291static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
b410aed9 1292 phys_addr_t paddr, size_t size, int prot)
45ae7cff 1293{
523d7423 1294 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
d4a44f07
S
1295 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1296 int ret;
45ae7cff 1297
518f7136 1298 if (!ops)
45ae7cff
WD
1299 return -ENODEV;
1300
d4a44f07
S
1301 arm_smmu_rpm_get(smmu);
1302 ret = ops->map(ops, iova, paddr, size, prot);
1303 arm_smmu_rpm_put(smmu);
1304
1305 return ret;
45ae7cff
WD
1306}
1307
1308static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1309 size_t size)
1310{
523d7423 1311 struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
d4a44f07
S
1312 struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
1313 size_t ret;
45ae7cff 1314
518f7136
WD
1315 if (!ops)
1316 return 0;
1317
d4a44f07
S
1318 arm_smmu_rpm_get(smmu);
1319 ret = ops->unmap(ops, iova, size);
1320 arm_smmu_rpm_put(smmu);
1321
1322 return ret;
45ae7cff
WD
1323}
1324
44f6876a
RM
1325static void arm_smmu_flush_iotlb_all(struct iommu_domain *domain)
1326{
1327 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
d4a44f07 1328 struct arm_smmu_device *smmu = smmu_domain->smmu;
44f6876a 1329
d4a44f07
S
1330 if (smmu_domain->tlb_ops) {
1331 arm_smmu_rpm_get(smmu);
44f6876a 1332 smmu_domain->tlb_ops->tlb_flush_all(smmu_domain);
d4a44f07
S
1333 arm_smmu_rpm_put(smmu);
1334 }
44f6876a
RM
1335}
1336
32b12449
RM
1337static void arm_smmu_iotlb_sync(struct iommu_domain *domain)
1338{
1339 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
d4a44f07 1340 struct arm_smmu_device *smmu = smmu_domain->smmu;
32b12449 1341
d4a44f07
S
1342 if (smmu_domain->tlb_ops) {
1343 arm_smmu_rpm_get(smmu);
32b12449 1344 smmu_domain->tlb_ops->tlb_sync(smmu_domain);
d4a44f07
S
1345 arm_smmu_rpm_put(smmu);
1346 }
32b12449
RM
1347}
1348
859a732e
MH
1349static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1350 dma_addr_t iova)
1351{
1d672638 1352 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
859a732e
MH
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;
1358 u32 tmp;
1359 u64 phys;
523d7423 1360 unsigned long va, flags;
d4a44f07
S
1361 int ret;
1362
1363 ret = arm_smmu_rpm_get(smmu);
1364 if (ret < 0)
1365 return 0;
859a732e 1366
452107c7 1367 cb_base = ARM_SMMU_CB(smmu, cfg->cbndx);
859a732e 1368
523d7423 1369 spin_lock_irqsave(&smmu_domain->cb_lock, flags);
661d962f
RM
1370 /* ATS1 registers can only be written atomically */
1371 va = iova & ~0xfffUL;
661d962f 1372 if (smmu->version == ARM_SMMU_V2)
f9a05f05
RM
1373 smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
1374 else /* Register is only 32-bit in v1 */
661d962f 1375 writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
859a732e
MH
1376
1377 if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
1378 !(tmp & ATSR_ACTIVE), 5, 50)) {
523d7423 1379 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
859a732e 1380 dev_err(dev,
077124c9 1381 "iova to phys timed out on %pad. Falling back to software table walk.\n",
859a732e
MH
1382 &iova);
1383 return ops->iova_to_phys(ops, iova);
1384 }
1385
f9a05f05 1386 phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
523d7423 1387 spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
859a732e
MH
1388 if (phys & CB_PAR_F) {
1389 dev_err(dev, "translation fault!\n");
1390 dev_err(dev, "PAR = 0x%llx\n", phys);
1391 return 0;
1392 }
1393
d4a44f07
S
1394 arm_smmu_rpm_put(smmu);
1395
859a732e
MH
1396 return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1397}
1398
45ae7cff 1399static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
859a732e 1400 dma_addr_t iova)
45ae7cff 1401{
1d672638 1402 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
523d7423 1403 struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
45ae7cff 1404
bdf95923
SG
1405 if (domain->type == IOMMU_DOMAIN_IDENTITY)
1406 return iova;
1407
518f7136 1408 if (!ops)
a44a9791 1409 return 0;
45ae7cff 1410
83a60ed8 1411 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
523d7423
RM
1412 smmu_domain->stage == ARM_SMMU_DOMAIN_S1)
1413 return arm_smmu_iova_to_phys_hard(domain, iova);
859a732e 1414
523d7423 1415 return ops->iova_to_phys(ops, iova);
45ae7cff
WD
1416}
1417
1fd0c775 1418static bool arm_smmu_capable(enum iommu_cap cap)
45ae7cff 1419{
d0948945
WD
1420 switch (cap) {
1421 case IOMMU_CAP_CACHE_COHERENCY:
1fd0c775
JR
1422 /*
1423 * Return true here as the SMMU can always send out coherent
1424 * requests.
1425 */
1426 return true;
0029a8dd
AM
1427 case IOMMU_CAP_NOEXEC:
1428 return true;
d0948945 1429 default:
1fd0c775 1430 return false;
d0948945 1431 }
45ae7cff 1432}
45ae7cff 1433
021bb842
RM
1434static int arm_smmu_match_node(struct device *dev, void *data)
1435{
ce9babe5 1436 return dev->fwnode == data;
021bb842
RM
1437}
1438
ce9babe5
LP
1439static
1440struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
021bb842
RM
1441{
1442 struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
ce9babe5 1443 fwnode, arm_smmu_match_node);
021bb842
RM
1444 put_device(dev);
1445 return dev ? dev_get_drvdata(dev) : NULL;
1446}
1447
f80cd885 1448static int arm_smmu_add_device(struct device *dev)
45ae7cff 1449{
adfec2e7 1450 struct arm_smmu_device *smmu;
03edb226 1451 struct arm_smmu_master_cfg *cfg;
9b468f7d 1452 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
f80cd885 1453 int i, ret;
8f68f8e2 1454
021bb842
RM
1455 if (using_legacy_binding) {
1456 ret = arm_smmu_register_legacy_master(dev, &smmu);
a7990c64
AS
1457
1458 /*
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
1461 * later use.
1462 */
9b468f7d 1463 fwspec = dev_iommu_fwspec_get(dev);
021bb842
RM
1464 if (ret)
1465 goto out_free;
3c117b54 1466 } else if (fwspec && fwspec->ops == &arm_smmu_ops) {
ce9babe5 1467 smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
021bb842
RM
1468 } else {
1469 return -ENODEV;
1470 }
a9a1b0b5 1471
f80cd885 1472 ret = -EINVAL;
adfec2e7
RM
1473 for (i = 0; i < fwspec->num_ids; i++) {
1474 u16 sid = fwspec->ids[i];
021bb842 1475 u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
03edb226 1476
adfec2e7 1477 if (sid & ~smmu->streamid_mask) {
f80cd885 1478 dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
021bb842
RM
1479 sid, smmu->streamid_mask);
1480 goto out_free;
1481 }
1482 if (mask & ~smmu->smr_mask_mask) {
1483 dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
6323f474 1484 mask, smmu->smr_mask_mask);
f80cd885
RM
1485 goto out_free;
1486 }
1f3d5ca4 1487 }
5fc63a7c 1488
adfec2e7
RM
1489 ret = -ENOMEM;
1490 cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
1491 GFP_KERNEL);
1492 if (!cfg)
1493 goto out_free;
1494
1495 cfg->smmu = smmu;
1496 fwspec->iommu_priv = cfg;
1497 while (i--)
1498 cfg->smendx[i] = INVALID_SMENDX;
1499
d4a44f07
S
1500 ret = arm_smmu_rpm_get(smmu);
1501 if (ret < 0)
1502 goto out_cfg_free;
1503
588888a7 1504 ret = arm_smmu_master_alloc_smes(dev);
d4a44f07
S
1505 arm_smmu_rpm_put(smmu);
1506
adfec2e7 1507 if (ret)
c54451a5 1508 goto out_cfg_free;
adfec2e7 1509
9648cbc9
JR
1510 iommu_device_link(&smmu->iommu, dev);
1511
655e3643
S
1512 device_link_add(dev, smmu->dev,
1513 DL_FLAG_PM_RUNTIME | DL_FLAG_AUTOREMOVE_SUPPLIER);
1514
adfec2e7 1515 return 0;
f80cd885 1516
c54451a5
VG
1517out_cfg_free:
1518 kfree(cfg);
f80cd885 1519out_free:
adfec2e7 1520 iommu_fwspec_free(dev);
f80cd885 1521 return ret;
03edb226
WD
1522}
1523
45ae7cff
WD
1524static void arm_smmu_remove_device(struct device *dev)
1525{
9b468f7d 1526 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
9648cbc9
JR
1527 struct arm_smmu_master_cfg *cfg;
1528 struct arm_smmu_device *smmu;
d4a44f07 1529 int ret;
8e8b203e 1530
adfec2e7 1531 if (!fwspec || fwspec->ops != &arm_smmu_ops)
f80cd885 1532 return;
8e8b203e 1533
9648cbc9
JR
1534 cfg = fwspec->iommu_priv;
1535 smmu = cfg->smmu;
1536
d4a44f07
S
1537 ret = arm_smmu_rpm_get(smmu);
1538 if (ret < 0)
1539 return;
1540
9648cbc9 1541 iommu_device_unlink(&smmu->iommu, dev);
adfec2e7 1542 arm_smmu_master_free_smes(fwspec);
d4a44f07
S
1543
1544 arm_smmu_rpm_put(smmu);
1545
5fc63a7c 1546 iommu_group_remove_device(dev);
adfec2e7
RM
1547 kfree(fwspec->iommu_priv);
1548 iommu_fwspec_free(dev);
45ae7cff
WD
1549}
1550
af659932
JR
1551static struct iommu_group *arm_smmu_device_group(struct device *dev)
1552{
9b468f7d 1553 struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
adfec2e7 1554 struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
588888a7
RM
1555 struct iommu_group *group = NULL;
1556 int i, idx;
1557
adfec2e7 1558 for_each_cfg_sme(fwspec, i, idx) {
588888a7
RM
1559 if (group && smmu->s2crs[idx].group &&
1560 group != smmu->s2crs[idx].group)
1561 return ERR_PTR(-EINVAL);
1562
1563 group = smmu->s2crs[idx].group;
1564 }
1565
1566 if (group)
e1b44cbe 1567 return iommu_group_ref_get(group);
af659932
JR
1568
1569 if (dev_is_pci(dev))
1570 group = pci_device_group(dev);
eab03e2a
NG
1571 else if (dev_is_fsl_mc(dev))
1572 group = fsl_mc_device_group(dev);
af659932
JR
1573 else
1574 group = generic_device_group(dev);
1575
af659932
JR
1576 return group;
1577}
1578
c752ce45
WD
1579static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1580 enum iommu_attr attr, void *data)
1581{
1d672638 1582 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
c752ce45 1583
44f6876a
RM
1584 switch(domain->type) {
1585 case IOMMU_DOMAIN_UNMANAGED:
1586 switch (attr) {
1587 case DOMAIN_ATTR_NESTING:
1588 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1589 return 0;
1590 default:
1591 return -ENODEV;
1592 }
1593 break;
1594 case IOMMU_DOMAIN_DMA:
1595 switch (attr) {
1596 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1597 *(int *)data = smmu_domain->non_strict;
1598 return 0;
1599 default:
1600 return -ENODEV;
1601 }
1602 break;
c752ce45 1603 default:
44f6876a 1604 return -EINVAL;
c752ce45
WD
1605 }
1606}
1607
1608static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1609 enum iommu_attr attr, void *data)
1610{
518f7136 1611 int ret = 0;
1d672638 1612 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
c752ce45 1613
518f7136
WD
1614 mutex_lock(&smmu_domain->init_mutex);
1615
44f6876a
RM
1616 switch(domain->type) {
1617 case IOMMU_DOMAIN_UNMANAGED:
1618 switch (attr) {
1619 case DOMAIN_ATTR_NESTING:
1620 if (smmu_domain->smmu) {
1621 ret = -EPERM;
1622 goto out_unlock;
1623 }
1624
1625 if (*(int *)data)
1626 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1627 else
1628 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1629 break;
1630 default:
1631 ret = -ENODEV;
1632 }
1633 break;
1634 case IOMMU_DOMAIN_DMA:
1635 switch (attr) {
1636 case DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE:
1637 smmu_domain->non_strict = *(int *)data;
1638 break;
1639 default:
1640 ret = -ENODEV;
518f7136 1641 }
518f7136 1642 break;
c752ce45 1643 default:
44f6876a 1644 ret = -EINVAL;
c752ce45 1645 }
518f7136
WD
1646out_unlock:
1647 mutex_unlock(&smmu_domain->init_mutex);
1648 return ret;
c752ce45
WD
1649}
1650
021bb842
RM
1651static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
1652{
56fbf600 1653 u32 mask, fwid = 0;
021bb842
RM
1654
1655 if (args->args_count > 0)
1656 fwid |= (u16)args->args[0];
1657
1658 if (args->args_count > 1)
1659 fwid |= (u16)args->args[1] << SMR_MASK_SHIFT;
56fbf600
RM
1660 else if (!of_property_read_u32(args->np, "stream-match-mask", &mask))
1661 fwid |= (u16)mask << SMR_MASK_SHIFT;
021bb842
RM
1662
1663 return iommu_fwspec_add_ids(dev, &fwid, 1);
1664}
1665
f3ebee80
EA
1666static void arm_smmu_get_resv_regions(struct device *dev,
1667 struct list_head *head)
1668{
1669 struct iommu_resv_region *region;
1670 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
1671
1672 region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
9d3a4de4 1673 prot, IOMMU_RESV_SW_MSI);
f3ebee80
EA
1674 if (!region)
1675 return;
1676
1677 list_add_tail(&region->list, head);
273df963
RM
1678
1679 iommu_dma_get_resv_regions(dev, head);
f3ebee80
EA
1680}
1681
1682static void arm_smmu_put_resv_regions(struct device *dev,
1683 struct list_head *head)
1684{
1685 struct iommu_resv_region *entry, *next;
1686
1687 list_for_each_entry_safe(entry, next, head, list)
1688 kfree(entry);
1689}
1690
518f7136 1691static struct iommu_ops arm_smmu_ops = {
c752ce45 1692 .capable = arm_smmu_capable,
1d672638
JR
1693 .domain_alloc = arm_smmu_domain_alloc,
1694 .domain_free = arm_smmu_domain_free,
c752ce45 1695 .attach_dev = arm_smmu_attach_dev,
c752ce45
WD
1696 .map = arm_smmu_map,
1697 .unmap = arm_smmu_unmap,
44f6876a 1698 .flush_iotlb_all = arm_smmu_flush_iotlb_all,
32b12449 1699 .iotlb_sync = arm_smmu_iotlb_sync,
c752ce45
WD
1700 .iova_to_phys = arm_smmu_iova_to_phys,
1701 .add_device = arm_smmu_add_device,
1702 .remove_device = arm_smmu_remove_device,
af659932 1703 .device_group = arm_smmu_device_group,
c752ce45
WD
1704 .domain_get_attr = arm_smmu_domain_get_attr,
1705 .domain_set_attr = arm_smmu_domain_set_attr,
021bb842 1706 .of_xlate = arm_smmu_of_xlate,
f3ebee80
EA
1707 .get_resv_regions = arm_smmu_get_resv_regions,
1708 .put_resv_regions = arm_smmu_put_resv_regions,
518f7136 1709 .pgsize_bitmap = -1UL, /* Restricted during device attach */
45ae7cff
WD
1710};
1711
1712static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1713{
1714 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1f3d5ca4 1715 int i;
3ca3712a 1716 u32 reg, major;
659db6f6 1717
3a5df8ff
AH
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);
45ae7cff 1721
1f3d5ca4
RM
1722 /*
1723 * Reset stream mapping groups: Initial values mark all SMRn as
1724 * invalid and all S2CRn as bypass unless overridden.
1725 */
8e8b203e
RM
1726 for (i = 0; i < smmu->num_mapping_groups; ++i)
1727 arm_smmu_write_sme(smmu, i);
45ae7cff 1728
6eb18d4a
NG
1729 if (smmu->model == ARM_MMU500) {
1730 /*
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.
1734 */
1735 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
1736 major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
3ca3712a 1737 reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
6eb18d4a
NG
1738 if (major >= 2)
1739 reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
1740 /*
1741 * Allow unmatched Stream IDs to allocate bypass
1742 * TLB entries for reduced latency.
1743 */
74f55d34 1744 reg |= ARM_MMU500_ACR_SMTNMB_TLBEN | ARM_MMU500_ACR_S2CRB_TLBEN;
3ca3712a
PF
1745 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
1746 }
1747
659db6f6
AH
1748 /* Make sure all context banks are disabled and clear CB_FSR */
1749 for (i = 0; i < smmu->num_context_banks; ++i) {
90df373c
RM
1750 void __iomem *cb_base = ARM_SMMU_CB(smmu, i);
1751
1752 arm_smmu_write_context_bank(smmu, i);
659db6f6 1753 writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
f0cfffc4
RM
1754 /*
1755 * Disable MMU-500's not-particularly-beneficial next-page
1756 * prefetcher for the sake of errata #841119 and #826419.
1757 */
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);
1762 }
659db6f6 1763 }
1463fe44 1764
45ae7cff 1765 /* Invalidate the TLB, just in case */
45ae7cff
WD
1766 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
1767 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
1768
3a5df8ff 1769 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
659db6f6 1770
45ae7cff 1771 /* Enable fault reporting */
659db6f6 1772 reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
45ae7cff
WD
1773
1774 /* Disable TLB broadcasting. */
659db6f6 1775 reg |= (sCR0_VMIDPNE | sCR0_PTM);
45ae7cff 1776
25a1c96c
RM
1777 /* Enable client access, handling unmatched streams as appropriate */
1778 reg &= ~sCR0_CLIENTPD;
1779 if (disable_bypass)
1780 reg |= sCR0_USFCFG;
1781 else
1782 reg &= ~sCR0_USFCFG;
45ae7cff
WD
1783
1784 /* Disable forced broadcasting */
659db6f6 1785 reg &= ~sCR0_FB;
45ae7cff
WD
1786
1787 /* Don't upgrade barriers */
659db6f6 1788 reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
45ae7cff 1789
4e3e9b69
TC
1790 if (smmu->features & ARM_SMMU_FEAT_VMID16)
1791 reg |= sCR0_VMID16EN;
1792
dc0eaa4e
AM
1793 if (smmu->features & ARM_SMMU_FEAT_EXIDS)
1794 reg |= sCR0_EXIDENABLE;
1795
45ae7cff 1796 /* Push the button */
11febfca 1797 arm_smmu_tlb_sync_global(smmu);
3a5df8ff 1798 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
45ae7cff
WD
1799}
1800
1801static int arm_smmu_id_size_to_bits(int size)
1802{
1803 switch (size) {
1804 case 0:
1805 return 32;
1806 case 1:
1807 return 36;
1808 case 2:
1809 return 40;
1810 case 3:
1811 return 42;
1812 case 4:
1813 return 44;
1814 case 5:
1815 default:
1816 return 48;
1817 }
1818}
1819
1820static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1821{
1822 unsigned long size;
1823 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1824 u32 id;
bbb8a184 1825 bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
8e8b203e 1826 int i;
45ae7cff
WD
1827
1828 dev_notice(smmu->dev, "probing hardware configuration...\n");
b7862e35
RM
1829 dev_notice(smmu->dev, "SMMUv%d with:\n",
1830 smmu->version == ARM_SMMU_V2 ? 2 : 1);
45ae7cff
WD
1831
1832 /* ID0 */
1833 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
4cf740b0
WD
1834
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);
1840
45ae7cff
WD
1841 if (id & ID0_S1TS) {
1842 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1843 dev_notice(smmu->dev, "\tstage 1 translation\n");
1844 }
1845
1846 if (id & ID0_S2TS) {
1847 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1848 dev_notice(smmu->dev, "\tstage 2 translation\n");
1849 }
1850
1851 if (id & ID0_NTS) {
1852 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1853 dev_notice(smmu->dev, "\tnested translation\n");
1854 }
1855
1856 if (!(smmu->features &
4cf740b0 1857 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
45ae7cff
WD
1858 dev_err(smmu->dev, "\tno translation support!\n");
1859 return -ENODEV;
1860 }
1861
b7862e35
RM
1862 if ((id & ID0_S1TS) &&
1863 ((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
859a732e
MH
1864 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1865 dev_notice(smmu->dev, "\taddress translation ops\n");
1866 }
1867
bae2c2d4
RM
1868 /*
1869 * In order for DMA API calls to work properly, we must defer to what
bbb8a184 1870 * the FW says about coherency, regardless of what the hardware claims.
bae2c2d4
RM
1871 * Fortunately, this also opens up a workaround for systems where the
1872 * ID register value has ended up configured incorrectly.
1873 */
bae2c2d4 1874 cttw_reg = !!(id & ID0_CTTW);
bbb8a184 1875 if (cttw_fw || cttw_reg)
bae2c2d4 1876 dev_notice(smmu->dev, "\t%scoherent table walk\n",
bbb8a184
LP
1877 cttw_fw ? "" : "non-");
1878 if (cttw_fw != cttw_reg)
bae2c2d4 1879 dev_notice(smmu->dev,
bbb8a184 1880 "\t(IDR0.CTTW overridden by FW configuration)\n");
45ae7cff 1881
21174240 1882 /* Max. number of entries we have for stream matching/indexing */
dc0eaa4e
AM
1883 if (smmu->version == ARM_SMMU_V2 && id & ID0_EXIDS) {
1884 smmu->features |= ARM_SMMU_FEAT_EXIDS;
1885 size = 1 << 16;
1886 } else {
1887 size = 1 << ((id >> ID0_NUMSIDB_SHIFT) & ID0_NUMSIDB_MASK);
1888 }
21174240 1889 smmu->streamid_mask = size - 1;
45ae7cff 1890 if (id & ID0_SMS) {
45ae7cff 1891 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
21174240
RM
1892 size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
1893 if (size == 0) {
45ae7cff
WD
1894 dev_err(smmu->dev,
1895 "stream-matching supported, but no SMRs present!\n");
1896 return -ENODEV;
1897 }
1898
1f3d5ca4
RM
1899 /* Zero-initialised to mark as invalid */
1900 smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
1901 GFP_KERNEL);
1902 if (!smmu->smrs)
1903 return -ENOMEM;
1904
45ae7cff 1905 dev_notice(smmu->dev,
dc0eaa4e 1906 "\tstream matching with %lu register groups", size);
45ae7cff 1907 }
8e8b203e
RM
1908 /* s2cr->type == 0 means translation, so initialise explicitly */
1909 smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
1910 GFP_KERNEL);
1911 if (!smmu->s2crs)
1912 return -ENOMEM;
1913 for (i = 0; i < size; i++)
1914 smmu->s2crs[i] = s2cr_init_val;
1915
21174240 1916 smmu->num_mapping_groups = size;
588888a7 1917 mutex_init(&smmu->stream_map_mutex);
8e517e76 1918 spin_lock_init(&smmu->global_sync_lock);
45ae7cff 1919
7602b871
RM
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;
1924 }
1925
45ae7cff
WD
1926 /* ID1 */
1927 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
c757e852 1928 smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
45ae7cff 1929
c55af7f7 1930 /* Check for size mismatch of SMMU address space from mapped region */
518f7136 1931 size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
452107c7
RM
1932 size <<= smmu->pgshift;
1933 if (smmu->cb_base != gr0_base + size)
2907320d 1934 dev_warn(smmu->dev,
452107c7
RM
1935 "SMMU address space size (0x%lx) differs from mapped region size (0x%tx)!\n",
1936 size * 2, (smmu->cb_base - gr0_base) * 2);
45ae7cff 1937
518f7136 1938 smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
45ae7cff
WD
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");
1942 return -ENODEV;
1943 }
1944 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1945 smmu->num_context_banks, smmu->num_s2_context_banks);
e086d912
RM
1946 /*
1947 * Cavium CN88xx erratum #27704.
1948 * Ensure ASID and VMID allocation is unique across all SMMUs in
1949 * the system.
1950 */
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;
53c35dce 1956 dev_notice(smmu->dev, "\tenabling workaround for Cavium erratum 27704\n");
e086d912 1957 }
90df373c
RM
1958 smmu->cbs = devm_kcalloc(smmu->dev, smmu->num_context_banks,
1959 sizeof(*smmu->cbs), GFP_KERNEL);
1960 if (!smmu->cbs)
1961 return -ENOMEM;
45ae7cff
WD
1962
1963 /* ID2 */
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);
518f7136 1966 smmu->ipa_size = size;
45ae7cff 1967
518f7136 1968 /* The output mask is also applied for bypass */
45ae7cff 1969 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
518f7136 1970 smmu->pa_size = size;
45ae7cff 1971
4e3e9b69
TC
1972 if (id & ID2_VMID16)
1973 smmu->features |= ARM_SMMU_FEAT_VMID16;
1974
f1d84548
RM
1975 /*
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...
1979 */
1980 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1981 dev_warn(smmu->dev,
1982 "failed to set DMA mask for table walker\n");
1983
b7862e35 1984 if (smmu->version < ARM_SMMU_V2) {
518f7136 1985 smmu->va_size = smmu->ipa_size;
b7862e35
RM
1986 if (smmu->version == ARM_SMMU_V1_64K)
1987 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
45ae7cff 1988 } else {
45ae7cff 1989 size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
518f7136 1990 smmu->va_size = arm_smmu_id_size_to_bits(size);
518f7136 1991 if (id & ID2_PTFS_4K)
7602b871 1992 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
518f7136 1993 if (id & ID2_PTFS_16K)
7602b871 1994 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
518f7136 1995 if (id & ID2_PTFS_64K)
7602b871 1996 smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
45ae7cff
WD
1997 }
1998
7602b871 1999 /* Now we've corralled the various formats, what'll it do? */
7602b871 2000 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
d5466357 2001 smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
7602b871
RM
2002 if (smmu->features &
2003 (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
d5466357 2004 smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
7602b871 2005 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
d5466357 2006 smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
7602b871 2007 if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
d5466357
RM
2008 smmu->pgsize_bitmap |= SZ_64K | SZ_512M;
2009
2010 if (arm_smmu_ops.pgsize_bitmap == -1UL)
2011 arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
2012 else
2013 arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
2014 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
2015 smmu->pgsize_bitmap);
7602b871 2016
518f7136 2017
28d6007b
WD
2018 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
2019 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
518f7136 2020 smmu->va_size, smmu->ipa_size);
28d6007b
WD
2021
2022 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
2023 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
518f7136 2024 smmu->ipa_size, smmu->pa_size);
28d6007b 2025
45ae7cff
WD
2026 return 0;
2027}
2028
67b65a3f
RM
2029struct arm_smmu_match_data {
2030 enum arm_smmu_arch_version version;
2031 enum arm_smmu_implementation model;
2032};
2033
2034#define ARM_SMMU_MATCH_DATA(name, ver, imp) \
96a299d2 2035static const struct arm_smmu_match_data name = { .version = ver, .model = imp }
67b65a3f
RM
2036
2037ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
2038ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
b7862e35 2039ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
f0cfffc4 2040ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
e086d912 2041ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
89cddc56 2042ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2);
67b65a3f 2043
09b5269a 2044static const struct of_device_id arm_smmu_of_match[] = {
67b65a3f
RM
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 },
b7862e35 2048 { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
f0cfffc4 2049 { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
e086d912 2050 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
89cddc56 2051 { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
09360403
RM
2052 { },
2053};
09360403 2054
d6fcd3b1
LP
2055#ifdef CONFIG_ACPI
2056static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
2057{
2058 int ret = 0;
2059
2060 switch (model) {
2061 case ACPI_IORT_SMMU_V1:
2062 case ACPI_IORT_SMMU_CORELINK_MMU400:
2063 smmu->version = ARM_SMMU_V1;
2064 smmu->model = GENERIC_SMMU;
2065 break;
84c24379
RM
2066 case ACPI_IORT_SMMU_CORELINK_MMU401:
2067 smmu->version = ARM_SMMU_V1_64K;
2068 smmu->model = GENERIC_SMMU;
2069 break;
d6fcd3b1
LP
2070 case ACPI_IORT_SMMU_V2:
2071 smmu->version = ARM_SMMU_V2;
2072 smmu->model = GENERIC_SMMU;
2073 break;
2074 case ACPI_IORT_SMMU_CORELINK_MMU500:
2075 smmu->version = ARM_SMMU_V2;
2076 smmu->model = ARM_MMU500;
2077 break;
84c24379
RM
2078 case ACPI_IORT_SMMU_CAVIUM_THUNDERX:
2079 smmu->version = ARM_SMMU_V2;
2080 smmu->model = CAVIUM_SMMUV2;
2081 break;
d6fcd3b1
LP
2082 default:
2083 ret = -ENODEV;
2084 }
2085
2086 return ret;
2087}
2088
2089static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2090 struct arm_smmu_device *smmu)
2091{
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;
2096 int ret;
2097
2098 /* Retrieve SMMU1/2 specific data */
2099 iort_smmu = (struct acpi_iort_smmu *)node->node_data;
2100
2101 ret = acpi_smmu_get_data(iort_smmu->model, smmu);
2102 if (ret < 0)
2103 return ret;
2104
2105 /* Ignore the configuration access interrupt */
2106 smmu->num_global_irqs = 1;
2107
2108 if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK)
2109 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2110
2111 return 0;
2112}
2113#else
2114static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
2115 struct arm_smmu_device *smmu)
2116{
2117 return -ENODEV;
2118}
2119#endif
2120
bbb8a184
LP
2121static int arm_smmu_device_dt_probe(struct platform_device *pdev,
2122 struct arm_smmu_device *smmu)
45ae7cff 2123{
67b65a3f 2124 const struct arm_smmu_match_data *data;
45ae7cff 2125 struct device *dev = &pdev->dev;
021bb842
RM
2126 bool legacy_binding;
2127
bbb8a184
LP
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");
2131 return -ENODEV;
2132 }
2133
2134 data = of_device_get_match_data(dev);
2135 smmu->version = data->version;
2136 smmu->model = data->model;
2137
2138 parse_driver_options(smmu);
2139
021bb842
RM
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;
2147 } else {
2148 dev_err(dev, "not probing due to mismatched DT properties\n");
2149 return -ENODEV;
2150 }
45ae7cff 2151
bbb8a184
LP
2152 if (of_dma_is_coherent(dev->of_node))
2153 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
2154
2155 return 0;
2156}
2157
f6810c15
RM
2158static void arm_smmu_bus_init(void)
2159{
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);
2166#endif
2167#ifdef CONFIG_PCI
2168 if (!iommu_present(&pci_bus_type)) {
2169 pci_request_acs();
2170 bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
2171 }
2172#endif
eab03e2a
NG
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);
2176#endif
f6810c15
RM
2177}
2178
bbb8a184
LP
2179static int arm_smmu_device_probe(struct platform_device *pdev)
2180{
2181 struct resource *res;
9648cbc9 2182 resource_size_t ioaddr;
bbb8a184
LP
2183 struct arm_smmu_device *smmu;
2184 struct device *dev = &pdev->dev;
2185 int num_irqs, i, err;
2186
45ae7cff
WD
2187 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
2188 if (!smmu) {
2189 dev_err(dev, "failed to allocate arm_smmu_device\n");
2190 return -ENOMEM;
2191 }
2192 smmu->dev = dev;
2193
d6fcd3b1
LP
2194 if (dev->of_node)
2195 err = arm_smmu_device_dt_probe(pdev, smmu);
2196 else
2197 err = arm_smmu_device_acpi_probe(pdev, smmu);
2198
bbb8a184
LP
2199 if (err)
2200 return err;
09360403 2201
45ae7cff 2202 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
9648cbc9 2203 ioaddr = res->start;
8a7f4312
JL
2204 smmu->base = devm_ioremap_resource(dev, res);
2205 if (IS_ERR(smmu->base))
2206 return PTR_ERR(smmu->base);
452107c7 2207 smmu->cb_base = smmu->base + resource_size(res) / 2;
45ae7cff 2208
45ae7cff
WD
2209 num_irqs = 0;
2210 while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
2211 num_irqs++;
2212 if (num_irqs > smmu->num_global_irqs)
2213 smmu->num_context_irqs++;
2214 }
2215
44a08de2
AH
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);
2219 return -ENODEV;
45ae7cff 2220 }
45ae7cff 2221
a86854d0 2222 smmu->irqs = devm_kcalloc(dev, num_irqs, sizeof(*smmu->irqs),
45ae7cff
WD
2223 GFP_KERNEL);
2224 if (!smmu->irqs) {
2225 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
2226 return -ENOMEM;
2227 }
2228
2229 for (i = 0; i < num_irqs; ++i) {
2230 int irq = platform_get_irq(pdev, i);
2907320d 2231
45ae7cff
WD
2232 if (irq < 0) {
2233 dev_err(dev, "failed to get irq index %d\n", i);
2234 return -ENODEV;
2235 }
2236 smmu->irqs[i] = irq;
2237 }
2238
96a299d2
S
2239 err = devm_clk_bulk_get_all(dev, &smmu->clks);
2240 if (err < 0) {
2241 dev_err(dev, "failed to get clocks %d\n", err);
2242 return err;
2243 }
2244 smmu->num_clks = err;
2245
2246 err = clk_bulk_prepare_enable(smmu->num_clks, smmu->clks);
2247 if (err)
2248 return err;
2249
3c8766d0
OH
2250 err = arm_smmu_device_cfg_probe(smmu);
2251 if (err)
2252 return err;
2253
d1e20222
VG
2254 if (smmu->version == ARM_SMMU_V2) {
2255 if (smmu->num_context_banks > smmu->num_context_irqs) {
2256 dev_err(dev,
2257 "found only %d context irq(s) but %d required\n",
2258 smmu->num_context_irqs, smmu->num_context_banks);
2259 return -ENODEV;
2260 }
2261
2262 /* Ignore superfluous interrupts */
2263 smmu->num_context_irqs = smmu->num_context_banks;
45ae7cff
WD
2264 }
2265
45ae7cff 2266 for (i = 0; i < smmu->num_global_irqs; ++i) {
bee14004
PF
2267 err = devm_request_irq(smmu->dev, smmu->irqs[i],
2268 arm_smmu_global_fault,
2269 IRQF_SHARED,
2270 "arm-smmu global fault",
2271 smmu);
45ae7cff
WD
2272 if (err) {
2273 dev_err(dev, "failed to request global IRQ %d (%u)\n",
2274 i, smmu->irqs[i]);
f80cd885 2275 return err;
45ae7cff
WD
2276 }
2277 }
2278
9648cbc9
JR
2279 err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL,
2280 "smmu.%pa", &ioaddr);
2281 if (err) {
2282 dev_err(dev, "Failed to register iommu in sysfs\n");
2283 return err;
2284 }
2285
2286 iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
2287 iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);
2288
2289 err = iommu_device_register(&smmu->iommu);
2290 if (err) {
2291 dev_err(dev, "Failed to register iommu\n");
2292 return err;
2293 }
2294
d6fc5d97 2295 platform_set_drvdata(pdev, smmu);
fd90cecb 2296 arm_smmu_device_reset(smmu);
dc0eaa4e 2297 arm_smmu_test_smr_masks(smmu);
021bb842 2298
d4a44f07
S
2299 /*
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.
2304 */
2305 if (dev->pm_domain) {
2306 pm_runtime_set_active(dev);
2307 pm_runtime_enable(dev);
2308 }
2309
f6810c15
RM
2310 /*
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.
2314 */
2315 if (!using_legacy_binding)
2316 arm_smmu_bus_init();
2317
45ae7cff 2318 return 0;
45ae7cff
WD
2319}
2320
f6810c15
RM
2321/*
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.
2326 */
2327static int arm_smmu_legacy_bus_init(void)
2328{
2329 if (using_legacy_binding)
2330 arm_smmu_bus_init();
45ae7cff 2331 return 0;
45ae7cff 2332}
f6810c15 2333device_initcall_sync(arm_smmu_legacy_bus_init);
45ae7cff 2334
addb672f 2335static void arm_smmu_device_shutdown(struct platform_device *pdev)
45ae7cff 2336{
d6fc5d97 2337 struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
45ae7cff
WD
2338
2339 if (!smmu)
addb672f 2340 return;
45ae7cff 2341
ecfadb6e 2342 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
d6fc5d97 2343 dev_err(&pdev->dev, "removing device with active domains!\n");
45ae7cff 2344
d4a44f07 2345 arm_smmu_rpm_get(smmu);
45ae7cff 2346 /* Turn the thing off */
2907320d 2347 writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
d4a44f07
S
2348 arm_smmu_rpm_put(smmu);
2349
2350 if (pm_runtime_enabled(smmu->dev))
2351 pm_runtime_force_suspend(smmu->dev);
2352 else
2353 clk_bulk_disable(smmu->num_clks, smmu->clks);
96a299d2 2354
d4a44f07 2355 clk_bulk_unprepare(smmu->num_clks, smmu->clks);
45ae7cff
WD
2356}
2357
96a299d2 2358static int __maybe_unused arm_smmu_runtime_resume(struct device *dev)
7aa8619a 2359{
a2d866f7 2360 struct arm_smmu_device *smmu = dev_get_drvdata(dev);
96a299d2
S
2361 int ret;
2362
2363 ret = clk_bulk_enable(smmu->num_clks, smmu->clks);
2364 if (ret)
2365 return ret;
a2d866f7
RM
2366
2367 arm_smmu_device_reset(smmu);
96a299d2 2368
a2d866f7 2369 return 0;
7aa8619a
NW
2370}
2371
96a299d2 2372static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev)
a2d866f7
RM
2373{
2374 struct arm_smmu_device *smmu = dev_get_drvdata(dev);
2375
96a299d2
S
2376 clk_bulk_disable(smmu->num_clks, smmu->clks);
2377
a2d866f7
RM
2378 return 0;
2379}
2380
96a299d2
S
2381static int __maybe_unused arm_smmu_pm_resume(struct device *dev)
2382{
2383 if (pm_runtime_suspended(dev))
2384 return 0;
2385
2386 return arm_smmu_runtime_resume(dev);
2387}
2388
2389static int __maybe_unused arm_smmu_pm_suspend(struct device *dev)
2390{
2391 if (pm_runtime_suspended(dev))
2392 return 0;
2393
2394 return arm_smmu_runtime_suspend(dev);
2395}
2396
2397static 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)
2401};
a2d866f7 2402
45ae7cff
WD
2403static struct platform_driver arm_smmu_driver = {
2404 .driver = {
addb672f
PG
2405 .name = "arm-smmu",
2406 .of_match_table = of_match_ptr(arm_smmu_of_match),
2407 .pm = &arm_smmu_pm_ops,
2408 .suppress_bind_attrs = true,
45ae7cff 2409 },
bbb8a184 2410 .probe = arm_smmu_device_probe,
7aa8619a 2411 .shutdown = arm_smmu_device_shutdown,
45ae7cff 2412};
addb672f 2413builtin_platform_driver(arm_smmu_driver);