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