iommu/arm-smmu: Add support for 16 bit VMID
[deliverable/linux.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
WD
26 * - Context fault reporting
27 */
28
29#define pr_fmt(fmt) "arm-smmu: " fmt
30
31#include <linux/delay.h>
9adb9594 32#include <linux/dma-iommu.h>
45ae7cff
WD
33#include <linux/dma-mapping.h>
34#include <linux/err.h>
35#include <linux/interrupt.h>
36#include <linux/io.h>
37#include <linux/iommu.h>
859a732e 38#include <linux/iopoll.h>
45ae7cff
WD
39#include <linux/module.h>
40#include <linux/of.h>
bae2c2d4 41#include <linux/of_address.h>
a9a1b0b5 42#include <linux/pci.h>
45ae7cff
WD
43#include <linux/platform_device.h>
44#include <linux/slab.h>
45#include <linux/spinlock.h>
46
47#include <linux/amba/bus.h>
48
518f7136 49#include "io-pgtable.h"
45ae7cff
WD
50
51/* Maximum number of stream IDs assigned to a single device */
636e97b0 52#define MAX_MASTER_STREAMIDS MAX_PHANDLE_ARGS
45ae7cff
WD
53
54/* Maximum number of context banks per SMMU */
55#define ARM_SMMU_MAX_CBS 128
56
57/* Maximum number of mapping groups per SMMU */
58#define ARM_SMMU_MAX_SMRS 128
59
45ae7cff
WD
60/* SMMU global address space */
61#define ARM_SMMU_GR0(smmu) ((smmu)->base)
c757e852 62#define ARM_SMMU_GR1(smmu) ((smmu)->base + (1 << (smmu)->pgshift))
45ae7cff 63
3a5df8ff
AH
64/*
65 * SMMU global address space with conditional offset to access secure
66 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
67 * nsGFSYNR0: 0x450)
68 */
69#define ARM_SMMU_GR0_NS(smmu) \
70 ((smmu)->base + \
71 ((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS) \
72 ? 0x400 : 0))
73
668b4ada
TC
74#ifdef CONFIG_64BIT
75#define smmu_writeq writeq_relaxed
76#else
77#define smmu_writeq(reg64, addr) \
78 do { \
79 u64 __val = (reg64); \
80 void __iomem *__addr = (addr); \
81 writel_relaxed(__val >> 32, __addr + 4); \
82 writel_relaxed(__val, __addr); \
83 } while (0)
84#endif
85
45ae7cff
WD
86/* Configuration registers */
87#define ARM_SMMU_GR0_sCR0 0x0
88#define sCR0_CLIENTPD (1 << 0)
89#define sCR0_GFRE (1 << 1)
90#define sCR0_GFIE (1 << 2)
91#define sCR0_GCFGFRE (1 << 4)
92#define sCR0_GCFGFIE (1 << 5)
93#define sCR0_USFCFG (1 << 10)
94#define sCR0_VMIDPNE (1 << 11)
95#define sCR0_PTM (1 << 12)
96#define sCR0_FB (1 << 13)
4e3e9b69 97#define sCR0_VMID16EN (1 << 31)
45ae7cff
WD
98#define sCR0_BSU_SHIFT 14
99#define sCR0_BSU_MASK 0x3
100
101/* Identification registers */
102#define ARM_SMMU_GR0_ID0 0x20
103#define ARM_SMMU_GR0_ID1 0x24
104#define ARM_SMMU_GR0_ID2 0x28
105#define ARM_SMMU_GR0_ID3 0x2c
106#define ARM_SMMU_GR0_ID4 0x30
107#define ARM_SMMU_GR0_ID5 0x34
108#define ARM_SMMU_GR0_ID6 0x38
109#define ARM_SMMU_GR0_ID7 0x3c
110#define ARM_SMMU_GR0_sGFSR 0x48
111#define ARM_SMMU_GR0_sGFSYNR0 0x50
112#define ARM_SMMU_GR0_sGFSYNR1 0x54
113#define ARM_SMMU_GR0_sGFSYNR2 0x58
45ae7cff
WD
114
115#define ID0_S1TS (1 << 30)
116#define ID0_S2TS (1 << 29)
117#define ID0_NTS (1 << 28)
118#define ID0_SMS (1 << 27)
859a732e 119#define ID0_ATOSNS (1 << 26)
45ae7cff
WD
120#define ID0_CTTW (1 << 14)
121#define ID0_NUMIRPT_SHIFT 16
122#define ID0_NUMIRPT_MASK 0xff
3c8766d0
OH
123#define ID0_NUMSIDB_SHIFT 9
124#define ID0_NUMSIDB_MASK 0xf
45ae7cff
WD
125#define ID0_NUMSMRG_SHIFT 0
126#define ID0_NUMSMRG_MASK 0xff
127
128#define ID1_PAGESIZE (1 << 31)
129#define ID1_NUMPAGENDXB_SHIFT 28
130#define ID1_NUMPAGENDXB_MASK 7
131#define ID1_NUMS2CB_SHIFT 16
132#define ID1_NUMS2CB_MASK 0xff
133#define ID1_NUMCB_SHIFT 0
134#define ID1_NUMCB_MASK 0xff
135
136#define ID2_OAS_SHIFT 4
137#define ID2_OAS_MASK 0xf
138#define ID2_IAS_SHIFT 0
139#define ID2_IAS_MASK 0xf
140#define ID2_UBS_SHIFT 8
141#define ID2_UBS_MASK 0xf
142#define ID2_PTFS_4K (1 << 12)
143#define ID2_PTFS_16K (1 << 13)
144#define ID2_PTFS_64K (1 << 14)
4e3e9b69 145#define ID2_VMID16 (1 << 15)
45ae7cff 146
45ae7cff 147/* Global TLB invalidation */
45ae7cff
WD
148#define ARM_SMMU_GR0_TLBIVMID 0x64
149#define ARM_SMMU_GR0_TLBIALLNSNH 0x68
150#define ARM_SMMU_GR0_TLBIALLH 0x6c
151#define ARM_SMMU_GR0_sTLBGSYNC 0x70
152#define ARM_SMMU_GR0_sTLBGSTATUS 0x74
153#define sTLBGSTATUS_GSACTIVE (1 << 0)
154#define TLB_LOOP_TIMEOUT 1000000 /* 1s! */
155
156/* Stream mapping registers */
157#define ARM_SMMU_GR0_SMR(n) (0x800 + ((n) << 2))
158#define SMR_VALID (1 << 31)
159#define SMR_MASK_SHIFT 16
160#define SMR_MASK_MASK 0x7fff
161#define SMR_ID_SHIFT 0
162#define SMR_ID_MASK 0x7fff
163
164#define ARM_SMMU_GR0_S2CR(n) (0xc00 + ((n) << 2))
165#define S2CR_CBNDX_SHIFT 0
166#define S2CR_CBNDX_MASK 0xff
167#define S2CR_TYPE_SHIFT 16
168#define S2CR_TYPE_MASK 0x3
169#define S2CR_TYPE_TRANS (0 << S2CR_TYPE_SHIFT)
170#define S2CR_TYPE_BYPASS (1 << S2CR_TYPE_SHIFT)
171#define S2CR_TYPE_FAULT (2 << S2CR_TYPE_SHIFT)
172
d346180e
RM
173#define S2CR_PRIVCFG_SHIFT 24
174#define S2CR_PRIVCFG_UNPRIV (2 << S2CR_PRIVCFG_SHIFT)
175
45ae7cff
WD
176/* Context bank attribute registers */
177#define ARM_SMMU_GR1_CBAR(n) (0x0 + ((n) << 2))
178#define CBAR_VMID_SHIFT 0
179#define CBAR_VMID_MASK 0xff
57ca90f6
WD
180#define CBAR_S1_BPSHCFG_SHIFT 8
181#define CBAR_S1_BPSHCFG_MASK 3
182#define CBAR_S1_BPSHCFG_NSH 3
45ae7cff
WD
183#define CBAR_S1_MEMATTR_SHIFT 12
184#define CBAR_S1_MEMATTR_MASK 0xf
185#define CBAR_S1_MEMATTR_WB 0xf
186#define CBAR_TYPE_SHIFT 16
187#define CBAR_TYPE_MASK 0x3
188#define CBAR_TYPE_S2_TRANS (0 << CBAR_TYPE_SHIFT)
189#define CBAR_TYPE_S1_TRANS_S2_BYPASS (1 << CBAR_TYPE_SHIFT)
190#define CBAR_TYPE_S1_TRANS_S2_FAULT (2 << CBAR_TYPE_SHIFT)
191#define CBAR_TYPE_S1_TRANS_S2_TRANS (3 << CBAR_TYPE_SHIFT)
192#define CBAR_IRPTNDX_SHIFT 24
193#define CBAR_IRPTNDX_MASK 0xff
194
195#define ARM_SMMU_GR1_CBA2R(n) (0x800 + ((n) << 2))
196#define CBA2R_RW64_32BIT (0 << 0)
197#define CBA2R_RW64_64BIT (1 << 0)
4e3e9b69
TC
198#define CBA2R_VMID_SHIFT 16
199#define CBA2R_VMID_MASK 0xffff
45ae7cff
WD
200
201/* Translation context bank */
202#define ARM_SMMU_CB_BASE(smmu) ((smmu)->base + ((smmu)->size >> 1))
c757e852 203#define ARM_SMMU_CB(smmu, n) ((n) * (1 << (smmu)->pgshift))
45ae7cff
WD
204
205#define ARM_SMMU_CB_SCTLR 0x0
206#define ARM_SMMU_CB_RESUME 0x8
207#define ARM_SMMU_CB_TTBCR2 0x10
668b4ada
TC
208#define ARM_SMMU_CB_TTBR0 0x20
209#define ARM_SMMU_CB_TTBR1 0x28
45ae7cff
WD
210#define ARM_SMMU_CB_TTBCR 0x30
211#define ARM_SMMU_CB_S1_MAIR0 0x38
518f7136 212#define ARM_SMMU_CB_S1_MAIR1 0x3c
859a732e
MH
213#define ARM_SMMU_CB_PAR_LO 0x50
214#define ARM_SMMU_CB_PAR_HI 0x54
45ae7cff
WD
215#define ARM_SMMU_CB_FSR 0x58
216#define ARM_SMMU_CB_FAR_LO 0x60
217#define ARM_SMMU_CB_FAR_HI 0x64
218#define ARM_SMMU_CB_FSYNR0 0x68
518f7136 219#define ARM_SMMU_CB_S1_TLBIVA 0x600
1463fe44 220#define ARM_SMMU_CB_S1_TLBIASID 0x610
518f7136
WD
221#define ARM_SMMU_CB_S1_TLBIVAL 0x620
222#define ARM_SMMU_CB_S2_TLBIIPAS2 0x630
223#define ARM_SMMU_CB_S2_TLBIIPAS2L 0x638
661d962f 224#define ARM_SMMU_CB_ATS1PR 0x800
859a732e 225#define ARM_SMMU_CB_ATSR 0x8f0
45ae7cff
WD
226
227#define SCTLR_S1_ASIDPNE (1 << 12)
228#define SCTLR_CFCFG (1 << 7)
229#define SCTLR_CFIE (1 << 6)
230#define SCTLR_CFRE (1 << 5)
231#define SCTLR_E (1 << 4)
232#define SCTLR_AFE (1 << 2)
233#define SCTLR_TRE (1 << 1)
234#define SCTLR_M (1 << 0)
235#define SCTLR_EAE_SBOP (SCTLR_AFE | SCTLR_TRE)
236
859a732e
MH
237#define CB_PAR_F (1 << 0)
238
239#define ATSR_ACTIVE (1 << 0)
240
45ae7cff
WD
241#define RESUME_RETRY (0 << 0)
242#define RESUME_TERMINATE (1 << 0)
243
45ae7cff 244#define TTBCR2_SEP_SHIFT 15
5dc5616e 245#define TTBCR2_SEP_UPSTREAM (0x7 << TTBCR2_SEP_SHIFT)
45ae7cff 246
668b4ada 247#define TTBRn_ASID_SHIFT 48
45ae7cff
WD
248
249#define FSR_MULTI (1 << 31)
250#define FSR_SS (1 << 30)
251#define FSR_UUT (1 << 8)
252#define FSR_ASF (1 << 7)
253#define FSR_TLBLKF (1 << 6)
254#define FSR_TLBMCF (1 << 5)
255#define FSR_EF (1 << 4)
256#define FSR_PF (1 << 3)
257#define FSR_AFF (1 << 2)
258#define FSR_TF (1 << 1)
259
2907320d
MH
260#define FSR_IGN (FSR_AFF | FSR_ASF | \
261 FSR_TLBMCF | FSR_TLBLKF)
262#define FSR_FAULT (FSR_MULTI | FSR_SS | FSR_UUT | \
adaba320 263 FSR_EF | FSR_PF | FSR_TF | FSR_IGN)
45ae7cff
WD
264
265#define FSYNR0_WNR (1 << 4)
266
4cf740b0 267static int force_stage;
25a1c96c 268module_param(force_stage, int, S_IRUGO);
4cf740b0
WD
269MODULE_PARM_DESC(force_stage,
270 "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.");
25a1c96c
RM
271static bool disable_bypass;
272module_param(disable_bypass, bool, S_IRUGO);
273MODULE_PARM_DESC(disable_bypass,
274 "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 275
09360403
RM
276enum arm_smmu_arch_version {
277 ARM_SMMU_V1 = 1,
278 ARM_SMMU_V2,
279};
280
45ae7cff
WD
281struct arm_smmu_smr {
282 u8 idx;
283 u16 mask;
284 u16 id;
285};
286
a9a1b0b5 287struct arm_smmu_master_cfg {
45ae7cff
WD
288 int num_streamids;
289 u16 streamids[MAX_MASTER_STREAMIDS];
45ae7cff
WD
290 struct arm_smmu_smr *smrs;
291};
292
a9a1b0b5
WD
293struct arm_smmu_master {
294 struct device_node *of_node;
a9a1b0b5
WD
295 struct rb_node node;
296 struct arm_smmu_master_cfg cfg;
297};
298
45ae7cff
WD
299struct arm_smmu_device {
300 struct device *dev;
45ae7cff
WD
301
302 void __iomem *base;
303 unsigned long size;
c757e852 304 unsigned long pgshift;
45ae7cff
WD
305
306#define ARM_SMMU_FEAT_COHERENT_WALK (1 << 0)
307#define ARM_SMMU_FEAT_STREAM_MATCH (1 << 1)
308#define ARM_SMMU_FEAT_TRANS_S1 (1 << 2)
309#define ARM_SMMU_FEAT_TRANS_S2 (1 << 3)
310#define ARM_SMMU_FEAT_TRANS_NESTED (1 << 4)
859a732e 311#define ARM_SMMU_FEAT_TRANS_OPS (1 << 5)
4e3e9b69 312#define ARM_SMMU_FEAT_VMID16 (1 << 6)
45ae7cff 313 u32 features;
3a5df8ff
AH
314
315#define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
316 u32 options;
09360403 317 enum arm_smmu_arch_version version;
45ae7cff
WD
318
319 u32 num_context_banks;
320 u32 num_s2_context_banks;
321 DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
322 atomic_t irptndx;
323
324 u32 num_mapping_groups;
325 DECLARE_BITMAP(smr_map, ARM_SMMU_MAX_SMRS);
326
518f7136
WD
327 unsigned long va_size;
328 unsigned long ipa_size;
329 unsigned long pa_size;
45ae7cff
WD
330
331 u32 num_global_irqs;
332 u32 num_context_irqs;
333 unsigned int *irqs;
334
45ae7cff
WD
335 struct list_head list;
336 struct rb_root masters;
337};
338
339struct arm_smmu_cfg {
45ae7cff
WD
340 u8 cbndx;
341 u8 irptndx;
342 u32 cbar;
45ae7cff 343};
faea13b7 344#define INVALID_IRPTNDX 0xff
45ae7cff 345
ecfadb6e
WD
346#define ARM_SMMU_CB_ASID(cfg) ((cfg)->cbndx)
347#define ARM_SMMU_CB_VMID(cfg) ((cfg)->cbndx + 1)
348
c752ce45
WD
349enum arm_smmu_domain_stage {
350 ARM_SMMU_DOMAIN_S1 = 0,
351 ARM_SMMU_DOMAIN_S2,
352 ARM_SMMU_DOMAIN_NESTED,
353};
354
45ae7cff 355struct arm_smmu_domain {
44680eed 356 struct arm_smmu_device *smmu;
518f7136
WD
357 struct io_pgtable_ops *pgtbl_ops;
358 spinlock_t pgtbl_lock;
44680eed 359 struct arm_smmu_cfg cfg;
c752ce45 360 enum arm_smmu_domain_stage stage;
518f7136 361 struct mutex init_mutex; /* Protects smmu pointer */
1d672638 362 struct iommu_domain domain;
45ae7cff
WD
363};
364
518f7136
WD
365static struct iommu_ops arm_smmu_ops;
366
45ae7cff
WD
367static DEFINE_SPINLOCK(arm_smmu_devices_lock);
368static LIST_HEAD(arm_smmu_devices);
369
3a5df8ff
AH
370struct arm_smmu_option_prop {
371 u32 opt;
372 const char *prop;
373};
374
2907320d 375static struct arm_smmu_option_prop arm_smmu_options[] = {
3a5df8ff
AH
376 { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
377 { 0, NULL},
378};
379
1d672638
JR
380static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
381{
382 return container_of(dom, struct arm_smmu_domain, domain);
383}
384
3a5df8ff
AH
385static void parse_driver_options(struct arm_smmu_device *smmu)
386{
387 int i = 0;
2907320d 388
3a5df8ff
AH
389 do {
390 if (of_property_read_bool(smmu->dev->of_node,
391 arm_smmu_options[i].prop)) {
392 smmu->options |= arm_smmu_options[i].opt;
393 dev_notice(smmu->dev, "option %s\n",
394 arm_smmu_options[i].prop);
395 }
396 } while (arm_smmu_options[++i].opt);
397}
398
8f68f8e2 399static struct device_node *dev_get_dev_node(struct device *dev)
a9a1b0b5
WD
400{
401 if (dev_is_pci(dev)) {
402 struct pci_bus *bus = to_pci_dev(dev)->bus;
2907320d 403
a9a1b0b5
WD
404 while (!pci_is_root_bus(bus))
405 bus = bus->parent;
8f68f8e2 406 return bus->bridge->parent->of_node;
a9a1b0b5
WD
407 }
408
8f68f8e2 409 return dev->of_node;
a9a1b0b5
WD
410}
411
45ae7cff
WD
412static struct arm_smmu_master *find_smmu_master(struct arm_smmu_device *smmu,
413 struct device_node *dev_node)
414{
415 struct rb_node *node = smmu->masters.rb_node;
416
417 while (node) {
418 struct arm_smmu_master *master;
2907320d 419
45ae7cff
WD
420 master = container_of(node, struct arm_smmu_master, node);
421
422 if (dev_node < master->of_node)
423 node = node->rb_left;
424 else if (dev_node > master->of_node)
425 node = node->rb_right;
426 else
427 return master;
428 }
429
430 return NULL;
431}
432
a9a1b0b5 433static struct arm_smmu_master_cfg *
8f68f8e2 434find_smmu_master_cfg(struct device *dev)
a9a1b0b5 435{
8f68f8e2
WD
436 struct arm_smmu_master_cfg *cfg = NULL;
437 struct iommu_group *group = iommu_group_get(dev);
a9a1b0b5 438
8f68f8e2
WD
439 if (group) {
440 cfg = iommu_group_get_iommudata(group);
441 iommu_group_put(group);
442 }
a9a1b0b5 443
8f68f8e2 444 return cfg;
a9a1b0b5
WD
445}
446
45ae7cff
WD
447static int insert_smmu_master(struct arm_smmu_device *smmu,
448 struct arm_smmu_master *master)
449{
450 struct rb_node **new, *parent;
451
452 new = &smmu->masters.rb_node;
453 parent = NULL;
454 while (*new) {
2907320d
MH
455 struct arm_smmu_master *this
456 = container_of(*new, struct arm_smmu_master, node);
45ae7cff
WD
457
458 parent = *new;
459 if (master->of_node < this->of_node)
460 new = &((*new)->rb_left);
461 else if (master->of_node > this->of_node)
462 new = &((*new)->rb_right);
463 else
464 return -EEXIST;
465 }
466
467 rb_link_node(&master->node, parent, new);
468 rb_insert_color(&master->node, &smmu->masters);
469 return 0;
470}
471
472static int register_smmu_master(struct arm_smmu_device *smmu,
473 struct device *dev,
474 struct of_phandle_args *masterspec)
475{
476 int i;
477 struct arm_smmu_master *master;
478
479 master = find_smmu_master(smmu, masterspec->np);
480 if (master) {
481 dev_err(dev,
482 "rejecting multiple registrations for master device %s\n",
483 masterspec->np->name);
484 return -EBUSY;
485 }
486
487 if (masterspec->args_count > MAX_MASTER_STREAMIDS) {
488 dev_err(dev,
489 "reached maximum number (%d) of stream IDs for master device %s\n",
490 MAX_MASTER_STREAMIDS, masterspec->np->name);
491 return -ENOSPC;
492 }
493
494 master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
495 if (!master)
496 return -ENOMEM;
497
a9a1b0b5
WD
498 master->of_node = masterspec->np;
499 master->cfg.num_streamids = masterspec->args_count;
45ae7cff 500
3c8766d0
OH
501 for (i = 0; i < master->cfg.num_streamids; ++i) {
502 u16 streamid = masterspec->args[i];
45ae7cff 503
3c8766d0
OH
504 if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) &&
505 (streamid >= smmu->num_mapping_groups)) {
506 dev_err(dev,
507 "stream ID for master device %s greater than maximum allowed (%d)\n",
508 masterspec->np->name, smmu->num_mapping_groups);
509 return -ERANGE;
510 }
511 master->cfg.streamids[i] = streamid;
512 }
45ae7cff
WD
513 return insert_smmu_master(smmu, master);
514}
515
44680eed 516static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
45ae7cff 517{
44680eed 518 struct arm_smmu_device *smmu;
a9a1b0b5 519 struct arm_smmu_master *master = NULL;
8f68f8e2 520 struct device_node *dev_node = dev_get_dev_node(dev);
45ae7cff
WD
521
522 spin_lock(&arm_smmu_devices_lock);
44680eed 523 list_for_each_entry(smmu, &arm_smmu_devices, list) {
a9a1b0b5
WD
524 master = find_smmu_master(smmu, dev_node);
525 if (master)
526 break;
527 }
45ae7cff 528 spin_unlock(&arm_smmu_devices_lock);
44680eed 529
a9a1b0b5 530 return master ? smmu : NULL;
45ae7cff
WD
531}
532
533static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
534{
535 int idx;
536
537 do {
538 idx = find_next_zero_bit(map, end, start);
539 if (idx == end)
540 return -ENOSPC;
541 } while (test_and_set_bit(idx, map));
542
543 return idx;
544}
545
546static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
547{
548 clear_bit(idx, map);
549}
550
551/* Wait for any pending TLB invalidations to complete */
518f7136 552static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu)
45ae7cff
WD
553{
554 int count = 0;
555 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
556
557 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_sTLBGSYNC);
558 while (readl_relaxed(gr0_base + ARM_SMMU_GR0_sTLBGSTATUS)
559 & sTLBGSTATUS_GSACTIVE) {
560 cpu_relax();
561 if (++count == TLB_LOOP_TIMEOUT) {
562 dev_err_ratelimited(smmu->dev,
563 "TLB sync timed out -- SMMU may be deadlocked\n");
564 return;
565 }
566 udelay(1);
567 }
568}
569
518f7136
WD
570static void arm_smmu_tlb_sync(void *cookie)
571{
572 struct arm_smmu_domain *smmu_domain = cookie;
573 __arm_smmu_tlb_sync(smmu_domain->smmu);
574}
575
576static void arm_smmu_tlb_inv_context(void *cookie)
1463fe44 577{
518f7136 578 struct arm_smmu_domain *smmu_domain = cookie;
44680eed
WD
579 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
580 struct arm_smmu_device *smmu = smmu_domain->smmu;
1463fe44 581 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
518f7136 582 void __iomem *base;
1463fe44
WD
583
584 if (stage1) {
585 base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
ecfadb6e
WD
586 writel_relaxed(ARM_SMMU_CB_ASID(cfg),
587 base + ARM_SMMU_CB_S1_TLBIASID);
1463fe44
WD
588 } else {
589 base = ARM_SMMU_GR0(smmu);
ecfadb6e
WD
590 writel_relaxed(ARM_SMMU_CB_VMID(cfg),
591 base + ARM_SMMU_GR0_TLBIVMID);
1463fe44
WD
592 }
593
518f7136
WD
594 __arm_smmu_tlb_sync(smmu);
595}
596
597static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
06c610e8 598 size_t granule, bool leaf, void *cookie)
518f7136
WD
599{
600 struct arm_smmu_domain *smmu_domain = cookie;
601 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
602 struct arm_smmu_device *smmu = smmu_domain->smmu;
603 bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
604 void __iomem *reg;
605
606 if (stage1) {
607 reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
608 reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
609
610 if (!IS_ENABLED(CONFIG_64BIT) || smmu->version == ARM_SMMU_V1) {
611 iova &= ~12UL;
612 iova |= ARM_SMMU_CB_ASID(cfg);
75df1386
RM
613 do {
614 writel_relaxed(iova, reg);
615 iova += granule;
616 } while (size -= granule);
518f7136
WD
617#ifdef CONFIG_64BIT
618 } else {
619 iova >>= 12;
620 iova |= (u64)ARM_SMMU_CB_ASID(cfg) << 48;
75df1386
RM
621 do {
622 writeq_relaxed(iova, reg);
623 iova += granule >> 12;
624 } while (size -= granule);
518f7136
WD
625#endif
626 }
627#ifdef CONFIG_64BIT
628 } else if (smmu->version == ARM_SMMU_V2) {
629 reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
630 reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
631 ARM_SMMU_CB_S2_TLBIIPAS2;
75df1386
RM
632 iova >>= 12;
633 do {
634 writeq_relaxed(iova, reg);
635 iova += granule >> 12;
636 } while (size -= granule);
518f7136
WD
637#endif
638 } else {
639 reg = ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_TLBIVMID;
640 writel_relaxed(ARM_SMMU_CB_VMID(cfg), reg);
641 }
642}
643
518f7136
WD
644static struct iommu_gather_ops arm_smmu_gather_ops = {
645 .tlb_flush_all = arm_smmu_tlb_inv_context,
646 .tlb_add_flush = arm_smmu_tlb_inv_range_nosync,
647 .tlb_sync = arm_smmu_tlb_sync,
518f7136
WD
648};
649
45ae7cff
WD
650static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
651{
652 int flags, ret;
653 u32 fsr, far, fsynr, resume;
654 unsigned long iova;
655 struct iommu_domain *domain = dev;
1d672638 656 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed
WD
657 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
658 struct arm_smmu_device *smmu = smmu_domain->smmu;
45ae7cff
WD
659 void __iomem *cb_base;
660
44680eed 661 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
45ae7cff
WD
662 fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);
663
664 if (!(fsr & FSR_FAULT))
665 return IRQ_NONE;
666
667 if (fsr & FSR_IGN)
668 dev_err_ratelimited(smmu->dev,
70c9a7db 669 "Unexpected context fault (fsr 0x%x)\n",
45ae7cff
WD
670 fsr);
671
672 fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
673 flags = fsynr & FSYNR0_WNR ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ;
674
675 far = readl_relaxed(cb_base + ARM_SMMU_CB_FAR_LO);
676 iova = far;
677#ifdef CONFIG_64BIT
678 far = readl_relaxed(cb_base + ARM_SMMU_CB_FAR_HI);
679 iova |= ((unsigned long)far << 32);
680#endif
681
682 if (!report_iommu_fault(domain, smmu->dev, iova, flags)) {
683 ret = IRQ_HANDLED;
684 resume = RESUME_RETRY;
685 } else {
2ef0f031
AH
686 dev_err_ratelimited(smmu->dev,
687 "Unhandled context fault: iova=0x%08lx, fsynr=0x%x, cb=%d\n",
44680eed 688 iova, fsynr, cfg->cbndx);
45ae7cff
WD
689 ret = IRQ_NONE;
690 resume = RESUME_TERMINATE;
691 }
692
693 /* Clear the faulting FSR */
694 writel(fsr, cb_base + ARM_SMMU_CB_FSR);
695
696 /* Retry or terminate any stalled transactions */
697 if (fsr & FSR_SS)
698 writel_relaxed(resume, cb_base + ARM_SMMU_CB_RESUME);
699
700 return ret;
701}
702
703static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
704{
705 u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
706 struct arm_smmu_device *smmu = dev;
3a5df8ff 707 void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
45ae7cff
WD
708
709 gfsr = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSR);
710 gfsynr0 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR0);
711 gfsynr1 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR1);
712 gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2);
713
3a5df8ff
AH
714 if (!gfsr)
715 return IRQ_NONE;
716
45ae7cff
WD
717 dev_err_ratelimited(smmu->dev,
718 "Unexpected global fault, this could be serious\n");
719 dev_err_ratelimited(smmu->dev,
720 "\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
721 gfsr, gfsynr0, gfsynr1, gfsynr2);
722
723 writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
adaba320 724 return IRQ_HANDLED;
45ae7cff
WD
725}
726
518f7136
WD
727static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
728 struct io_pgtable_cfg *pgtbl_cfg)
45ae7cff
WD
729{
730 u32 reg;
668b4ada 731 u64 reg64;
45ae7cff 732 bool stage1;
44680eed
WD
733 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
734 struct arm_smmu_device *smmu = smmu_domain->smmu;
c88ae5de 735 void __iomem *cb_base, *gr1_base;
45ae7cff 736
45ae7cff 737 gr1_base = ARM_SMMU_GR1(smmu);
44680eed
WD
738 stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
739 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
45ae7cff 740
4a1c93cb 741 if (smmu->version > ARM_SMMU_V1) {
4a1c93cb
WD
742#ifdef CONFIG_64BIT
743 reg = CBA2R_RW64_64BIT;
744#else
745 reg = CBA2R_RW64_32BIT;
746#endif
4e3e9b69
TC
747 /* 16-bit VMIDs live in CBA2R */
748 if (smmu->features & ARM_SMMU_FEAT_VMID16)
749 reg |= ARM_SMMU_CB_VMID(cfg) << CBA2R_VMID_SHIFT;
750
4a1c93cb
WD
751 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(cfg->cbndx));
752 }
753
45ae7cff 754 /* CBAR */
44680eed 755 reg = cfg->cbar;
09360403 756 if (smmu->version == ARM_SMMU_V1)
2907320d 757 reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
45ae7cff 758
57ca90f6
WD
759 /*
760 * Use the weakest shareability/memory types, so they are
761 * overridden by the ttbcr/pte.
762 */
763 if (stage1) {
764 reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
765 (CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
4e3e9b69
TC
766 } else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
767 /* 8-bit VMIDs live in CBAR */
44680eed 768 reg |= ARM_SMMU_CB_VMID(cfg) << CBAR_VMID_SHIFT;
57ca90f6 769 }
44680eed 770 writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(cfg->cbndx));
45ae7cff 771
518f7136
WD
772 /* TTBRs */
773 if (stage1) {
668b4ada
TC
774 reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
775
776 reg64 |= ((u64)ARM_SMMU_CB_ASID(cfg)) << TTBRn_ASID_SHIFT;
777 smmu_writeq(reg64, cb_base + ARM_SMMU_CB_TTBR0);
778
779 reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[1];
780 reg64 |= ((u64)ARM_SMMU_CB_ASID(cfg)) << TTBRn_ASID_SHIFT;
781 smmu_writeq(reg64, cb_base + ARM_SMMU_CB_TTBR1);
518f7136 782 } else {
668b4ada
TC
783 reg64 = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
784 smmu_writeq(reg64, cb_base + ARM_SMMU_CB_TTBR0);
518f7136 785 }
a65217a4 786
518f7136
WD
787 /* TTBCR */
788 if (stage1) {
789 reg = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
790 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
791 if (smmu->version > ARM_SMMU_V1) {
792 reg = pgtbl_cfg->arm_lpae_s1_cfg.tcr >> 32;
5dc5616e 793 reg |= TTBCR2_SEP_UPSTREAM;
518f7136 794 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR2);
45ae7cff
WD
795 }
796 } else {
518f7136
WD
797 reg = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
798 writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
45ae7cff
WD
799 }
800
518f7136 801 /* MAIRs (stage-1 only) */
45ae7cff 802 if (stage1) {
518f7136 803 reg = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
45ae7cff 804 writel_relaxed(reg, cb_base + ARM_SMMU_CB_S1_MAIR0);
518f7136
WD
805 reg = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
806 writel_relaxed(reg, cb_base + ARM_SMMU_CB_S1_MAIR1);
45ae7cff
WD
807 }
808
45ae7cff
WD
809 /* SCTLR */
810 reg = SCTLR_CFCFG | SCTLR_CFIE | SCTLR_CFRE | SCTLR_M | SCTLR_EAE_SBOP;
811 if (stage1)
812 reg |= SCTLR_S1_ASIDPNE;
813#ifdef __BIG_ENDIAN
814 reg |= SCTLR_E;
815#endif
25724841 816 writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
45ae7cff
WD
817}
818
819static int arm_smmu_init_domain_context(struct iommu_domain *domain,
44680eed 820 struct arm_smmu_device *smmu)
45ae7cff 821{
a18037b2 822 int irq, start, ret = 0;
518f7136
WD
823 unsigned long ias, oas;
824 struct io_pgtable_ops *pgtbl_ops;
825 struct io_pgtable_cfg pgtbl_cfg;
826 enum io_pgtable_fmt fmt;
1d672638 827 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed 828 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
45ae7cff 829
518f7136 830 mutex_lock(&smmu_domain->init_mutex);
a18037b2
MH
831 if (smmu_domain->smmu)
832 goto out_unlock;
833
c752ce45
WD
834 /*
835 * Mapping the requested stage onto what we support is surprisingly
836 * complicated, mainly because the spec allows S1+S2 SMMUs without
837 * support for nested translation. That means we end up with the
838 * following table:
839 *
840 * Requested Supported Actual
841 * S1 N S1
842 * S1 S1+S2 S1
843 * S1 S2 S2
844 * S1 S1 S1
845 * N N N
846 * N S1+S2 S2
847 * N S2 S2
848 * N S1 S1
849 *
850 * Note that you can't actually request stage-2 mappings.
851 */
852 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
853 smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
854 if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
855 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
856
857 switch (smmu_domain->stage) {
858 case ARM_SMMU_DOMAIN_S1:
859 cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
860 start = smmu->num_s2_context_banks;
518f7136
WD
861 ias = smmu->va_size;
862 oas = smmu->ipa_size;
863 if (IS_ENABLED(CONFIG_64BIT))
864 fmt = ARM_64_LPAE_S1;
865 else
866 fmt = ARM_32_LPAE_S1;
c752ce45
WD
867 break;
868 case ARM_SMMU_DOMAIN_NESTED:
45ae7cff
WD
869 /*
870 * We will likely want to change this if/when KVM gets
871 * involved.
872 */
c752ce45 873 case ARM_SMMU_DOMAIN_S2:
9c5c92e3
WD
874 cfg->cbar = CBAR_TYPE_S2_TRANS;
875 start = 0;
518f7136
WD
876 ias = smmu->ipa_size;
877 oas = smmu->pa_size;
878 if (IS_ENABLED(CONFIG_64BIT))
879 fmt = ARM_64_LPAE_S2;
880 else
881 fmt = ARM_32_LPAE_S2;
c752ce45
WD
882 break;
883 default:
884 ret = -EINVAL;
885 goto out_unlock;
45ae7cff
WD
886 }
887
888 ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
889 smmu->num_context_banks);
890 if (IS_ERR_VALUE(ret))
a18037b2 891 goto out_unlock;
45ae7cff 892
44680eed 893 cfg->cbndx = ret;
09360403 894 if (smmu->version == ARM_SMMU_V1) {
44680eed
WD
895 cfg->irptndx = atomic_inc_return(&smmu->irptndx);
896 cfg->irptndx %= smmu->num_context_irqs;
45ae7cff 897 } else {
44680eed 898 cfg->irptndx = cfg->cbndx;
45ae7cff
WD
899 }
900
518f7136
WD
901 pgtbl_cfg = (struct io_pgtable_cfg) {
902 .pgsize_bitmap = arm_smmu_ops.pgsize_bitmap,
903 .ias = ias,
904 .oas = oas,
905 .tlb = &arm_smmu_gather_ops,
2df7a25c 906 .iommu_dev = smmu->dev,
518f7136
WD
907 };
908
909 smmu_domain->smmu = smmu;
910 pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
911 if (!pgtbl_ops) {
912 ret = -ENOMEM;
913 goto out_clear_smmu;
914 }
915
916 /* Update our support page sizes to reflect the page table format */
917 arm_smmu_ops.pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
a18037b2 918
518f7136
WD
919 /* Initialise the context bank with our page table cfg */
920 arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);
921
922 /*
923 * Request context fault interrupt. Do this last to avoid the
924 * handler seeing a half-initialised domain state.
925 */
44680eed 926 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
45ae7cff
WD
927 ret = request_irq(irq, arm_smmu_context_fault, IRQF_SHARED,
928 "arm-smmu-context-fault", domain);
929 if (IS_ERR_VALUE(ret)) {
930 dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
44680eed
WD
931 cfg->irptndx, irq);
932 cfg->irptndx = INVALID_IRPTNDX;
45ae7cff
WD
933 }
934
518f7136
WD
935 mutex_unlock(&smmu_domain->init_mutex);
936
937 /* Publish page table ops for map/unmap */
938 smmu_domain->pgtbl_ops = pgtbl_ops;
a9a1b0b5 939 return 0;
45ae7cff 940
518f7136
WD
941out_clear_smmu:
942 smmu_domain->smmu = NULL;
a18037b2 943out_unlock:
518f7136 944 mutex_unlock(&smmu_domain->init_mutex);
45ae7cff
WD
945 return ret;
946}
947
948static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
949{
1d672638 950 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
44680eed
WD
951 struct arm_smmu_device *smmu = smmu_domain->smmu;
952 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1463fe44 953 void __iomem *cb_base;
45ae7cff
WD
954 int irq;
955
956 if (!smmu)
957 return;
958
518f7136
WD
959 /*
960 * Disable the context bank and free the page tables before freeing
961 * it.
962 */
44680eed 963 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
1463fe44 964 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
1463fe44 965
44680eed
WD
966 if (cfg->irptndx != INVALID_IRPTNDX) {
967 irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
45ae7cff
WD
968 free_irq(irq, domain);
969 }
970
44830b0c 971 free_io_pgtable_ops(smmu_domain->pgtbl_ops);
44680eed 972 __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
45ae7cff
WD
973}
974
1d672638 975static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
45ae7cff
WD
976{
977 struct arm_smmu_domain *smmu_domain;
45ae7cff 978
9adb9594 979 if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1d672638 980 return NULL;
45ae7cff
WD
981 /*
982 * Allocate the domain and initialise some of its data structures.
983 * We can't really do anything meaningful until we've added a
984 * master.
985 */
986 smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
987 if (!smmu_domain)
1d672638 988 return NULL;
45ae7cff 989
9adb9594
RM
990 if (type == IOMMU_DOMAIN_DMA &&
991 iommu_get_dma_cookie(&smmu_domain->domain)) {
992 kfree(smmu_domain);
993 return NULL;
994 }
995
518f7136
WD
996 mutex_init(&smmu_domain->init_mutex);
997 spin_lock_init(&smmu_domain->pgtbl_lock);
1d672638
JR
998
999 return &smmu_domain->domain;
45ae7cff
WD
1000}
1001
1d672638 1002static void arm_smmu_domain_free(struct iommu_domain *domain)
45ae7cff 1003{
1d672638 1004 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1463fe44
WD
1005
1006 /*
1007 * Free the domain resources. We assume that all devices have
1008 * already been detached.
1009 */
9adb9594 1010 iommu_put_dma_cookie(domain);
45ae7cff 1011 arm_smmu_destroy_domain_context(domain);
45ae7cff
WD
1012 kfree(smmu_domain);
1013}
1014
1015static int arm_smmu_master_configure_smrs(struct arm_smmu_device *smmu,
a9a1b0b5 1016 struct arm_smmu_master_cfg *cfg)
45ae7cff
WD
1017{
1018 int i;
1019 struct arm_smmu_smr *smrs;
1020 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1021
1022 if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH))
1023 return 0;
1024
a9a1b0b5 1025 if (cfg->smrs)
45ae7cff
WD
1026 return -EEXIST;
1027
2907320d 1028 smrs = kmalloc_array(cfg->num_streamids, sizeof(*smrs), GFP_KERNEL);
45ae7cff 1029 if (!smrs) {
a9a1b0b5
WD
1030 dev_err(smmu->dev, "failed to allocate %d SMRs\n",
1031 cfg->num_streamids);
45ae7cff
WD
1032 return -ENOMEM;
1033 }
1034
44680eed 1035 /* Allocate the SMRs on the SMMU */
a9a1b0b5 1036 for (i = 0; i < cfg->num_streamids; ++i) {
45ae7cff
WD
1037 int idx = __arm_smmu_alloc_bitmap(smmu->smr_map, 0,
1038 smmu->num_mapping_groups);
1039 if (IS_ERR_VALUE(idx)) {
1040 dev_err(smmu->dev, "failed to allocate free SMR\n");
1041 goto err_free_smrs;
1042 }
1043
1044 smrs[i] = (struct arm_smmu_smr) {
1045 .idx = idx,
1046 .mask = 0, /* We don't currently share SMRs */
a9a1b0b5 1047 .id = cfg->streamids[i],
45ae7cff
WD
1048 };
1049 }
1050
1051 /* It worked! Now, poke the actual hardware */
a9a1b0b5 1052 for (i = 0; i < cfg->num_streamids; ++i) {
45ae7cff
WD
1053 u32 reg = SMR_VALID | smrs[i].id << SMR_ID_SHIFT |
1054 smrs[i].mask << SMR_MASK_SHIFT;
1055 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_SMR(smrs[i].idx));
1056 }
1057
a9a1b0b5 1058 cfg->smrs = smrs;
45ae7cff
WD
1059 return 0;
1060
1061err_free_smrs:
1062 while (--i >= 0)
1063 __arm_smmu_free_bitmap(smmu->smr_map, smrs[i].idx);
1064 kfree(smrs);
1065 return -ENOSPC;
1066}
1067
1068static void arm_smmu_master_free_smrs(struct arm_smmu_device *smmu,
a9a1b0b5 1069 struct arm_smmu_master_cfg *cfg)
45ae7cff
WD
1070{
1071 int i;
1072 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
a9a1b0b5 1073 struct arm_smmu_smr *smrs = cfg->smrs;
45ae7cff 1074
43b412be
WD
1075 if (!smrs)
1076 return;
1077
45ae7cff 1078 /* Invalidate the SMRs before freeing back to the allocator */
a9a1b0b5 1079 for (i = 0; i < cfg->num_streamids; ++i) {
45ae7cff 1080 u8 idx = smrs[i].idx;
2907320d 1081
45ae7cff
WD
1082 writel_relaxed(~SMR_VALID, gr0_base + ARM_SMMU_GR0_SMR(idx));
1083 __arm_smmu_free_bitmap(smmu->smr_map, idx);
1084 }
1085
a9a1b0b5 1086 cfg->smrs = NULL;
45ae7cff
WD
1087 kfree(smrs);
1088}
1089
45ae7cff 1090static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
a9a1b0b5 1091 struct arm_smmu_master_cfg *cfg)
45ae7cff
WD
1092{
1093 int i, ret;
44680eed 1094 struct arm_smmu_device *smmu = smmu_domain->smmu;
45ae7cff
WD
1095 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1096
8f68f8e2 1097 /* Devices in an IOMMU group may already be configured */
a9a1b0b5 1098 ret = arm_smmu_master_configure_smrs(smmu, cfg);
45ae7cff 1099 if (ret)
8f68f8e2 1100 return ret == -EEXIST ? 0 : ret;
45ae7cff 1101
cbf8277e
WD
1102 /*
1103 * FIXME: This won't be needed once we have IOMMU-backed DMA ops
1104 * for all devices behind the SMMU.
1105 */
1106 if (smmu_domain->domain.type == IOMMU_DOMAIN_DMA)
1107 return 0;
1108
a9a1b0b5 1109 for (i = 0; i < cfg->num_streamids; ++i) {
45ae7cff 1110 u32 idx, s2cr;
2907320d 1111
a9a1b0b5 1112 idx = cfg->smrs ? cfg->smrs[i].idx : cfg->streamids[i];
d346180e 1113 s2cr = S2CR_TYPE_TRANS | S2CR_PRIVCFG_UNPRIV |
44680eed 1114 (smmu_domain->cfg.cbndx << S2CR_CBNDX_SHIFT);
45ae7cff
WD
1115 writel_relaxed(s2cr, gr0_base + ARM_SMMU_GR0_S2CR(idx));
1116 }
1117
1118 return 0;
1119}
1120
1121static void arm_smmu_domain_remove_master(struct arm_smmu_domain *smmu_domain,
a9a1b0b5 1122 struct arm_smmu_master_cfg *cfg)
45ae7cff 1123{
43b412be 1124 int i;
44680eed 1125 struct arm_smmu_device *smmu = smmu_domain->smmu;
43b412be 1126 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
45ae7cff 1127
8f68f8e2
WD
1128 /* An IOMMU group is torn down by the first device to be removed */
1129 if ((smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) && !cfg->smrs)
1130 return;
45ae7cff
WD
1131
1132 /*
1133 * We *must* clear the S2CR first, because freeing the SMR means
1134 * that it can be re-allocated immediately.
1135 */
43b412be
WD
1136 for (i = 0; i < cfg->num_streamids; ++i) {
1137 u32 idx = cfg->smrs ? cfg->smrs[i].idx : cfg->streamids[i];
25a1c96c 1138 u32 reg = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS;
43b412be 1139
25a1c96c 1140 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_S2CR(idx));
43b412be
WD
1141 }
1142
a9a1b0b5 1143 arm_smmu_master_free_smrs(smmu, cfg);
45ae7cff
WD
1144}
1145
bc7f2ce0
WD
1146static void arm_smmu_detach_dev(struct device *dev,
1147 struct arm_smmu_master_cfg *cfg)
1148{
1149 struct iommu_domain *domain = dev->archdata.iommu;
1150 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1151
1152 dev->archdata.iommu = NULL;
1153 arm_smmu_domain_remove_master(smmu_domain, cfg);
1154}
1155
45ae7cff
WD
1156static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
1157{
a18037b2 1158 int ret;
1d672638 1159 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
518f7136 1160 struct arm_smmu_device *smmu;
a9a1b0b5 1161 struct arm_smmu_master_cfg *cfg;
45ae7cff 1162
8f68f8e2 1163 smmu = find_smmu_for_device(dev);
44680eed 1164 if (!smmu) {
45ae7cff
WD
1165 dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
1166 return -ENXIO;
1167 }
1168
518f7136
WD
1169 /* Ensure that the domain is finalised */
1170 ret = arm_smmu_init_domain_context(domain, smmu);
1171 if (IS_ERR_VALUE(ret))
1172 return ret;
1173
45ae7cff 1174 /*
44680eed
WD
1175 * Sanity check the domain. We don't support domains across
1176 * different SMMUs.
45ae7cff 1177 */
518f7136 1178 if (smmu_domain->smmu != smmu) {
45ae7cff
WD
1179 dev_err(dev,
1180 "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
a18037b2
MH
1181 dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1182 return -EINVAL;
45ae7cff 1183 }
45ae7cff
WD
1184
1185 /* Looks ok, so add the device to the domain */
8f68f8e2 1186 cfg = find_smmu_master_cfg(dev);
a9a1b0b5 1187 if (!cfg)
45ae7cff
WD
1188 return -ENODEV;
1189
bc7f2ce0
WD
1190 /* Detach the dev from its current domain */
1191 if (dev->archdata.iommu)
1192 arm_smmu_detach_dev(dev, cfg);
1193
844e35bd
WD
1194 ret = arm_smmu_domain_add_master(smmu_domain, cfg);
1195 if (!ret)
1196 dev->archdata.iommu = domain;
45ae7cff
WD
1197 return ret;
1198}
1199
45ae7cff 1200static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
b410aed9 1201 phys_addr_t paddr, size_t size, int prot)
45ae7cff 1202{
518f7136
WD
1203 int ret;
1204 unsigned long flags;
1d672638 1205 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
518f7136 1206 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
45ae7cff 1207
518f7136 1208 if (!ops)
45ae7cff
WD
1209 return -ENODEV;
1210
518f7136
WD
1211 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1212 ret = ops->map(ops, iova, paddr, size, prot);
1213 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1214 return ret;
45ae7cff
WD
1215}
1216
1217static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
1218 size_t size)
1219{
518f7136
WD
1220 size_t ret;
1221 unsigned long flags;
1d672638 1222 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
518f7136 1223 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
45ae7cff 1224
518f7136
WD
1225 if (!ops)
1226 return 0;
1227
1228 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1229 ret = ops->unmap(ops, iova, size);
1230 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1231 return ret;
45ae7cff
WD
1232}
1233
859a732e
MH
1234static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
1235 dma_addr_t iova)
1236{
1d672638 1237 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
859a732e
MH
1238 struct arm_smmu_device *smmu = smmu_domain->smmu;
1239 struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1240 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1241 struct device *dev = smmu->dev;
1242 void __iomem *cb_base;
1243 u32 tmp;
1244 u64 phys;
661d962f 1245 unsigned long va;
859a732e
MH
1246
1247 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
1248
661d962f
RM
1249 /* ATS1 registers can only be written atomically */
1250 va = iova & ~0xfffUL;
661d962f 1251 if (smmu->version == ARM_SMMU_V2)
668b4ada 1252 smmu_writeq(va, cb_base + ARM_SMMU_CB_ATS1PR);
661d962f 1253 else
661d962f 1254 writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
859a732e
MH
1255
1256 if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
1257 !(tmp & ATSR_ACTIVE), 5, 50)) {
1258 dev_err(dev,
077124c9 1259 "iova to phys timed out on %pad. Falling back to software table walk.\n",
859a732e
MH
1260 &iova);
1261 return ops->iova_to_phys(ops, iova);
1262 }
1263
1264 phys = readl_relaxed(cb_base + ARM_SMMU_CB_PAR_LO);
1265 phys |= ((u64)readl_relaxed(cb_base + ARM_SMMU_CB_PAR_HI)) << 32;
1266
1267 if (phys & CB_PAR_F) {
1268 dev_err(dev, "translation fault!\n");
1269 dev_err(dev, "PAR = 0x%llx\n", phys);
1270 return 0;
1271 }
1272
1273 return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
1274}
1275
45ae7cff 1276static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
859a732e 1277 dma_addr_t iova)
45ae7cff 1278{
518f7136
WD
1279 phys_addr_t ret;
1280 unsigned long flags;
1d672638 1281 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
518f7136 1282 struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
45ae7cff 1283
518f7136 1284 if (!ops)
a44a9791 1285 return 0;
45ae7cff 1286
518f7136 1287 spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
83a60ed8
BR
1288 if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
1289 smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
859a732e 1290 ret = arm_smmu_iova_to_phys_hard(domain, iova);
83a60ed8 1291 } else {
859a732e 1292 ret = ops->iova_to_phys(ops, iova);
83a60ed8
BR
1293 }
1294
518f7136 1295 spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
859a732e 1296
518f7136 1297 return ret;
45ae7cff
WD
1298}
1299
1fd0c775 1300static bool arm_smmu_capable(enum iommu_cap cap)
45ae7cff 1301{
d0948945
WD
1302 switch (cap) {
1303 case IOMMU_CAP_CACHE_COHERENCY:
1fd0c775
JR
1304 /*
1305 * Return true here as the SMMU can always send out coherent
1306 * requests.
1307 */
1308 return true;
d0948945 1309 case IOMMU_CAP_INTR_REMAP:
1fd0c775 1310 return true; /* MSIs are just memory writes */
0029a8dd
AM
1311 case IOMMU_CAP_NOEXEC:
1312 return true;
d0948945 1313 default:
1fd0c775 1314 return false;
d0948945 1315 }
45ae7cff 1316}
45ae7cff 1317
a9a1b0b5
WD
1318static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
1319{
1320 *((u16 *)data) = alias;
1321 return 0; /* Continue walking */
45ae7cff
WD
1322}
1323
8f68f8e2
WD
1324static void __arm_smmu_release_pci_iommudata(void *data)
1325{
1326 kfree(data);
1327}
1328
af659932
JR
1329static int arm_smmu_init_pci_device(struct pci_dev *pdev,
1330 struct iommu_group *group)
45ae7cff 1331{
03edb226 1332 struct arm_smmu_master_cfg *cfg;
af659932
JR
1333 u16 sid;
1334 int i;
a9a1b0b5 1335
03edb226
WD
1336 cfg = iommu_group_get_iommudata(group);
1337 if (!cfg) {
a9a1b0b5 1338 cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
af659932
JR
1339 if (!cfg)
1340 return -ENOMEM;
a9a1b0b5 1341
03edb226
WD
1342 iommu_group_set_iommudata(group, cfg,
1343 __arm_smmu_release_pci_iommudata);
1344 }
8f68f8e2 1345
af659932
JR
1346 if (cfg->num_streamids >= MAX_MASTER_STREAMIDS)
1347 return -ENOSPC;
a9a1b0b5 1348
03edb226
WD
1349 /*
1350 * Assume Stream ID == Requester ID for now.
1351 * We need a way to describe the ID mappings in FDT.
1352 */
1353 pci_for_each_dma_alias(pdev, __arm_smmu_get_pci_sid, &sid);
1354 for (i = 0; i < cfg->num_streamids; ++i)
1355 if (cfg->streamids[i] == sid)
1356 break;
1357
1358 /* Avoid duplicate SIDs, as this can lead to SMR conflicts */
1359 if (i == cfg->num_streamids)
1360 cfg->streamids[cfg->num_streamids++] = sid;
5fc63a7c 1361
03edb226 1362 return 0;
45ae7cff
WD
1363}
1364
af659932
JR
1365static int arm_smmu_init_platform_device(struct device *dev,
1366 struct iommu_group *group)
03edb226 1367{
03edb226 1368 struct arm_smmu_device *smmu = find_smmu_for_device(dev);
af659932 1369 struct arm_smmu_master *master;
03edb226
WD
1370
1371 if (!smmu)
1372 return -ENODEV;
1373
1374 master = find_smmu_master(smmu, dev->of_node);
1375 if (!master)
1376 return -ENODEV;
1377
03edb226 1378 iommu_group_set_iommudata(group, &master->cfg, NULL);
af659932
JR
1379
1380 return 0;
03edb226
WD
1381}
1382
1383static int arm_smmu_add_device(struct device *dev)
1384{
af659932 1385 struct iommu_group *group;
03edb226 1386
af659932
JR
1387 group = iommu_group_get_for_dev(dev);
1388 if (IS_ERR(group))
1389 return PTR_ERR(group);
03edb226 1390
9a4a9d8c 1391 iommu_group_put(group);
af659932 1392 return 0;
03edb226
WD
1393}
1394
45ae7cff
WD
1395static void arm_smmu_remove_device(struct device *dev)
1396{
5fc63a7c 1397 iommu_group_remove_device(dev);
45ae7cff
WD
1398}
1399
af659932
JR
1400static struct iommu_group *arm_smmu_device_group(struct device *dev)
1401{
1402 struct iommu_group *group;
1403 int ret;
1404
1405 if (dev_is_pci(dev))
1406 group = pci_device_group(dev);
1407 else
1408 group = generic_device_group(dev);
1409
1410 if (IS_ERR(group))
1411 return group;
1412
1413 if (dev_is_pci(dev))
1414 ret = arm_smmu_init_pci_device(to_pci_dev(dev), group);
1415 else
1416 ret = arm_smmu_init_platform_device(dev, group);
1417
1418 if (ret) {
1419 iommu_group_put(group);
1420 group = ERR_PTR(ret);
1421 }
1422
1423 return group;
1424}
1425
c752ce45
WD
1426static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
1427 enum iommu_attr attr, void *data)
1428{
1d672638 1429 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
c752ce45
WD
1430
1431 switch (attr) {
1432 case DOMAIN_ATTR_NESTING:
1433 *(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
1434 return 0;
1435 default:
1436 return -ENODEV;
1437 }
1438}
1439
1440static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
1441 enum iommu_attr attr, void *data)
1442{
518f7136 1443 int ret = 0;
1d672638 1444 struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
c752ce45 1445
518f7136
WD
1446 mutex_lock(&smmu_domain->init_mutex);
1447
c752ce45
WD
1448 switch (attr) {
1449 case DOMAIN_ATTR_NESTING:
518f7136
WD
1450 if (smmu_domain->smmu) {
1451 ret = -EPERM;
1452 goto out_unlock;
1453 }
1454
c752ce45
WD
1455 if (*(int *)data)
1456 smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
1457 else
1458 smmu_domain->stage = ARM_SMMU_DOMAIN_S1;
1459
518f7136 1460 break;
c752ce45 1461 default:
518f7136 1462 ret = -ENODEV;
c752ce45 1463 }
518f7136
WD
1464
1465out_unlock:
1466 mutex_unlock(&smmu_domain->init_mutex);
1467 return ret;
c752ce45
WD
1468}
1469
518f7136 1470static struct iommu_ops arm_smmu_ops = {
c752ce45 1471 .capable = arm_smmu_capable,
1d672638
JR
1472 .domain_alloc = arm_smmu_domain_alloc,
1473 .domain_free = arm_smmu_domain_free,
c752ce45 1474 .attach_dev = arm_smmu_attach_dev,
c752ce45
WD
1475 .map = arm_smmu_map,
1476 .unmap = arm_smmu_unmap,
76771c93 1477 .map_sg = default_iommu_map_sg,
c752ce45
WD
1478 .iova_to_phys = arm_smmu_iova_to_phys,
1479 .add_device = arm_smmu_add_device,
1480 .remove_device = arm_smmu_remove_device,
af659932 1481 .device_group = arm_smmu_device_group,
c752ce45
WD
1482 .domain_get_attr = arm_smmu_domain_get_attr,
1483 .domain_set_attr = arm_smmu_domain_set_attr,
518f7136 1484 .pgsize_bitmap = -1UL, /* Restricted during device attach */
45ae7cff
WD
1485};
1486
1487static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
1488{
1489 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
659db6f6 1490 void __iomem *cb_base;
45ae7cff 1491 int i = 0;
659db6f6
AH
1492 u32 reg;
1493
3a5df8ff
AH
1494 /* clear global FSR */
1495 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1496 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
45ae7cff 1497
25a1c96c
RM
1498 /* Mark all SMRn as invalid and all S2CRn as bypass unless overridden */
1499 reg = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS;
45ae7cff 1500 for (i = 0; i < smmu->num_mapping_groups; ++i) {
3c8766d0 1501 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_SMR(i));
25a1c96c 1502 writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_S2CR(i));
45ae7cff
WD
1503 }
1504
659db6f6
AH
1505 /* Make sure all context banks are disabled and clear CB_FSR */
1506 for (i = 0; i < smmu->num_context_banks; ++i) {
1507 cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
1508 writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
1509 writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
1510 }
1463fe44 1511
45ae7cff 1512 /* Invalidate the TLB, just in case */
45ae7cff
WD
1513 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
1514 writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);
1515
3a5df8ff 1516 reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
659db6f6 1517
45ae7cff 1518 /* Enable fault reporting */
659db6f6 1519 reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
45ae7cff
WD
1520
1521 /* Disable TLB broadcasting. */
659db6f6 1522 reg |= (sCR0_VMIDPNE | sCR0_PTM);
45ae7cff 1523
25a1c96c
RM
1524 /* Enable client access, handling unmatched streams as appropriate */
1525 reg &= ~sCR0_CLIENTPD;
1526 if (disable_bypass)
1527 reg |= sCR0_USFCFG;
1528 else
1529 reg &= ~sCR0_USFCFG;
45ae7cff
WD
1530
1531 /* Disable forced broadcasting */
659db6f6 1532 reg &= ~sCR0_FB;
45ae7cff
WD
1533
1534 /* Don't upgrade barriers */
659db6f6 1535 reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
45ae7cff 1536
4e3e9b69
TC
1537 if (smmu->features & ARM_SMMU_FEAT_VMID16)
1538 reg |= sCR0_VMID16EN;
1539
45ae7cff 1540 /* Push the button */
518f7136 1541 __arm_smmu_tlb_sync(smmu);
3a5df8ff 1542 writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
45ae7cff
WD
1543}
1544
1545static int arm_smmu_id_size_to_bits(int size)
1546{
1547 switch (size) {
1548 case 0:
1549 return 32;
1550 case 1:
1551 return 36;
1552 case 2:
1553 return 40;
1554 case 3:
1555 return 42;
1556 case 4:
1557 return 44;
1558 case 5:
1559 default:
1560 return 48;
1561 }
1562}
1563
1564static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
1565{
1566 unsigned long size;
1567 void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1568 u32 id;
bae2c2d4 1569 bool cttw_dt, cttw_reg;
45ae7cff
WD
1570
1571 dev_notice(smmu->dev, "probing hardware configuration...\n");
45ae7cff
WD
1572 dev_notice(smmu->dev, "SMMUv%d with:\n", smmu->version);
1573
1574 /* ID0 */
1575 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
4cf740b0
WD
1576
1577 /* Restrict available stages based on module parameter */
1578 if (force_stage == 1)
1579 id &= ~(ID0_S2TS | ID0_NTS);
1580 else if (force_stage == 2)
1581 id &= ~(ID0_S1TS | ID0_NTS);
1582
45ae7cff
WD
1583 if (id & ID0_S1TS) {
1584 smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
1585 dev_notice(smmu->dev, "\tstage 1 translation\n");
1586 }
1587
1588 if (id & ID0_S2TS) {
1589 smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
1590 dev_notice(smmu->dev, "\tstage 2 translation\n");
1591 }
1592
1593 if (id & ID0_NTS) {
1594 smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
1595 dev_notice(smmu->dev, "\tnested translation\n");
1596 }
1597
1598 if (!(smmu->features &
4cf740b0 1599 (ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
45ae7cff
WD
1600 dev_err(smmu->dev, "\tno translation support!\n");
1601 return -ENODEV;
1602 }
1603
d38f0ff9 1604 if ((id & ID0_S1TS) && ((smmu->version == 1) || !(id & ID0_ATOSNS))) {
859a732e
MH
1605 smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
1606 dev_notice(smmu->dev, "\taddress translation ops\n");
1607 }
1608
bae2c2d4
RM
1609 /*
1610 * In order for DMA API calls to work properly, we must defer to what
1611 * the DT says about coherency, regardless of what the hardware claims.
1612 * Fortunately, this also opens up a workaround for systems where the
1613 * ID register value has ended up configured incorrectly.
1614 */
1615 cttw_dt = of_dma_is_coherent(smmu->dev->of_node);
1616 cttw_reg = !!(id & ID0_CTTW);
1617 if (cttw_dt)
45ae7cff 1618 smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;
bae2c2d4
RM
1619 if (cttw_dt || cttw_reg)
1620 dev_notice(smmu->dev, "\t%scoherent table walk\n",
1621 cttw_dt ? "" : "non-");
1622 if (cttw_dt != cttw_reg)
1623 dev_notice(smmu->dev,
1624 "\t(IDR0.CTTW overridden by dma-coherent property)\n");
45ae7cff
WD
1625
1626 if (id & ID0_SMS) {
1627 u32 smr, sid, mask;
1628
1629 smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1630 smmu->num_mapping_groups = (id >> ID0_NUMSMRG_SHIFT) &
1631 ID0_NUMSMRG_MASK;
1632 if (smmu->num_mapping_groups == 0) {
1633 dev_err(smmu->dev,
1634 "stream-matching supported, but no SMRs present!\n");
1635 return -ENODEV;
1636 }
1637
1638 smr = SMR_MASK_MASK << SMR_MASK_SHIFT;
1639 smr |= (SMR_ID_MASK << SMR_ID_SHIFT);
1640 writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
1641 smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
1642
1643 mask = (smr >> SMR_MASK_SHIFT) & SMR_MASK_MASK;
1644 sid = (smr >> SMR_ID_SHIFT) & SMR_ID_MASK;
1645 if ((mask & sid) != sid) {
1646 dev_err(smmu->dev,
1647 "SMR mask bits (0x%x) insufficient for ID field (0x%x)\n",
1648 mask, sid);
1649 return -ENODEV;
1650 }
1651
1652 dev_notice(smmu->dev,
1653 "\tstream matching with %u register groups, mask 0x%x",
1654 smmu->num_mapping_groups, mask);
3c8766d0
OH
1655 } else {
1656 smmu->num_mapping_groups = (id >> ID0_NUMSIDB_SHIFT) &
1657 ID0_NUMSIDB_MASK;
45ae7cff
WD
1658 }
1659
1660 /* ID1 */
1661 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
c757e852 1662 smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
45ae7cff 1663
c55af7f7 1664 /* Check for size mismatch of SMMU address space from mapped region */
518f7136 1665 size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
c757e852 1666 size *= 2 << smmu->pgshift;
c55af7f7 1667 if (smmu->size != size)
2907320d
MH
1668 dev_warn(smmu->dev,
1669 "SMMU address space size (0x%lx) differs from mapped region size (0x%lx)!\n",
1670 size, smmu->size);
45ae7cff 1671
518f7136 1672 smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
45ae7cff
WD
1673 smmu->num_context_banks = (id >> ID1_NUMCB_SHIFT) & ID1_NUMCB_MASK;
1674 if (smmu->num_s2_context_banks > smmu->num_context_banks) {
1675 dev_err(smmu->dev, "impossible number of S2 context banks!\n");
1676 return -ENODEV;
1677 }
1678 dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
1679 smmu->num_context_banks, smmu->num_s2_context_banks);
1680
1681 /* ID2 */
1682 id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID2);
1683 size = arm_smmu_id_size_to_bits((id >> ID2_IAS_SHIFT) & ID2_IAS_MASK);
518f7136 1684 smmu->ipa_size = size;
45ae7cff 1685
518f7136 1686 /* The output mask is also applied for bypass */
45ae7cff 1687 size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
518f7136 1688 smmu->pa_size = size;
45ae7cff 1689
4e3e9b69
TC
1690 if (id & ID2_VMID16)
1691 smmu->features |= ARM_SMMU_FEAT_VMID16;
1692
f1d84548
RM
1693 /*
1694 * What the page table walker can address actually depends on which
1695 * descriptor format is in use, but since a) we don't know that yet,
1696 * and b) it can vary per context bank, this will have to do...
1697 */
1698 if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
1699 dev_warn(smmu->dev,
1700 "failed to set DMA mask for table walker\n");
1701
09360403 1702 if (smmu->version == ARM_SMMU_V1) {
518f7136
WD
1703 smmu->va_size = smmu->ipa_size;
1704 size = SZ_4K | SZ_2M | SZ_1G;
45ae7cff 1705 } else {
45ae7cff 1706 size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
518f7136
WD
1707 smmu->va_size = arm_smmu_id_size_to_bits(size);
1708#ifndef CONFIG_64BIT
1709 smmu->va_size = min(32UL, smmu->va_size);
45ae7cff 1710#endif
518f7136
WD
1711 size = 0;
1712 if (id & ID2_PTFS_4K)
1713 size |= SZ_4K | SZ_2M | SZ_1G;
1714 if (id & ID2_PTFS_16K)
1715 size |= SZ_16K | SZ_32M;
1716 if (id & ID2_PTFS_64K)
1717 size |= SZ_64K | SZ_512M;
45ae7cff
WD
1718 }
1719
518f7136
WD
1720 arm_smmu_ops.pgsize_bitmap &= size;
1721 dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n", size);
1722
28d6007b
WD
1723 if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
1724 dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
518f7136 1725 smmu->va_size, smmu->ipa_size);
28d6007b
WD
1726
1727 if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
1728 dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
518f7136 1729 smmu->ipa_size, smmu->pa_size);
28d6007b 1730
45ae7cff
WD
1731 return 0;
1732}
1733
09b5269a 1734static const struct of_device_id arm_smmu_of_match[] = {
09360403
RM
1735 { .compatible = "arm,smmu-v1", .data = (void *)ARM_SMMU_V1 },
1736 { .compatible = "arm,smmu-v2", .data = (void *)ARM_SMMU_V2 },
1737 { .compatible = "arm,mmu-400", .data = (void *)ARM_SMMU_V1 },
d3aba046 1738 { .compatible = "arm,mmu-401", .data = (void *)ARM_SMMU_V1 },
09360403
RM
1739 { .compatible = "arm,mmu-500", .data = (void *)ARM_SMMU_V2 },
1740 { },
1741};
1742MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
1743
45ae7cff
WD
1744static int arm_smmu_device_dt_probe(struct platform_device *pdev)
1745{
09360403 1746 const struct of_device_id *of_id;
45ae7cff
WD
1747 struct resource *res;
1748 struct arm_smmu_device *smmu;
45ae7cff
WD
1749 struct device *dev = &pdev->dev;
1750 struct rb_node *node;
1751 struct of_phandle_args masterspec;
1752 int num_irqs, i, err;
1753
1754 smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
1755 if (!smmu) {
1756 dev_err(dev, "failed to allocate arm_smmu_device\n");
1757 return -ENOMEM;
1758 }
1759 smmu->dev = dev;
1760
09360403
RM
1761 of_id = of_match_node(arm_smmu_of_match, dev->of_node);
1762 smmu->version = (enum arm_smmu_arch_version)of_id->data;
1763
45ae7cff 1764 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
8a7f4312
JL
1765 smmu->base = devm_ioremap_resource(dev, res);
1766 if (IS_ERR(smmu->base))
1767 return PTR_ERR(smmu->base);
45ae7cff 1768 smmu->size = resource_size(res);
45ae7cff
WD
1769
1770 if (of_property_read_u32(dev->of_node, "#global-interrupts",
1771 &smmu->num_global_irqs)) {
1772 dev_err(dev, "missing #global-interrupts property\n");
1773 return -ENODEV;
1774 }
1775
1776 num_irqs = 0;
1777 while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
1778 num_irqs++;
1779 if (num_irqs > smmu->num_global_irqs)
1780 smmu->num_context_irqs++;
1781 }
1782
44a08de2
AH
1783 if (!smmu->num_context_irqs) {
1784 dev_err(dev, "found %d interrupts but expected at least %d\n",
1785 num_irqs, smmu->num_global_irqs + 1);
1786 return -ENODEV;
45ae7cff 1787 }
45ae7cff
WD
1788
1789 smmu->irqs = devm_kzalloc(dev, sizeof(*smmu->irqs) * num_irqs,
1790 GFP_KERNEL);
1791 if (!smmu->irqs) {
1792 dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
1793 return -ENOMEM;
1794 }
1795
1796 for (i = 0; i < num_irqs; ++i) {
1797 int irq = platform_get_irq(pdev, i);
2907320d 1798
45ae7cff
WD
1799 if (irq < 0) {
1800 dev_err(dev, "failed to get irq index %d\n", i);
1801 return -ENODEV;
1802 }
1803 smmu->irqs[i] = irq;
1804 }
1805
3c8766d0
OH
1806 err = arm_smmu_device_cfg_probe(smmu);
1807 if (err)
1808 return err;
1809
45ae7cff
WD
1810 i = 0;
1811 smmu->masters = RB_ROOT;
1812 while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters",
1813 "#stream-id-cells", i,
1814 &masterspec)) {
1815 err = register_smmu_master(smmu, dev, &masterspec);
1816 if (err) {
1817 dev_err(dev, "failed to add master %s\n",
1818 masterspec.np->name);
1819 goto out_put_masters;
1820 }
1821
1822 i++;
1823 }
1824 dev_notice(dev, "registered %d master devices\n", i);
1825
3a5df8ff
AH
1826 parse_driver_options(smmu);
1827
09360403 1828 if (smmu->version > ARM_SMMU_V1 &&
45ae7cff
WD
1829 smmu->num_context_banks != smmu->num_context_irqs) {
1830 dev_err(dev,
1831 "found only %d context interrupt(s) but %d required\n",
1832 smmu->num_context_irqs, smmu->num_context_banks);
89a23cde 1833 err = -ENODEV;
44680eed 1834 goto out_put_masters;
45ae7cff
WD
1835 }
1836
45ae7cff
WD
1837 for (i = 0; i < smmu->num_global_irqs; ++i) {
1838 err = request_irq(smmu->irqs[i],
1839 arm_smmu_global_fault,
1840 IRQF_SHARED,
1841 "arm-smmu global fault",
1842 smmu);
1843 if (err) {
1844 dev_err(dev, "failed to request global IRQ %d (%u)\n",
1845 i, smmu->irqs[i]);
1846 goto out_free_irqs;
1847 }
1848 }
1849
1850 INIT_LIST_HEAD(&smmu->list);
1851 spin_lock(&arm_smmu_devices_lock);
1852 list_add(&smmu->list, &arm_smmu_devices);
1853 spin_unlock(&arm_smmu_devices_lock);
fd90cecb
WD
1854
1855 arm_smmu_device_reset(smmu);
45ae7cff
WD
1856 return 0;
1857
1858out_free_irqs:
1859 while (i--)
1860 free_irq(smmu->irqs[i], smmu);
1861
45ae7cff
WD
1862out_put_masters:
1863 for (node = rb_first(&smmu->masters); node; node = rb_next(node)) {
2907320d
MH
1864 struct arm_smmu_master *master
1865 = container_of(node, struct arm_smmu_master, node);
45ae7cff
WD
1866 of_node_put(master->of_node);
1867 }
1868
1869 return err;
1870}
1871
1872static int arm_smmu_device_remove(struct platform_device *pdev)
1873{
1874 int i;
1875 struct device *dev = &pdev->dev;
1876 struct arm_smmu_device *curr, *smmu = NULL;
1877 struct rb_node *node;
1878
1879 spin_lock(&arm_smmu_devices_lock);
1880 list_for_each_entry(curr, &arm_smmu_devices, list) {
1881 if (curr->dev == dev) {
1882 smmu = curr;
1883 list_del(&smmu->list);
1884 break;
1885 }
1886 }
1887 spin_unlock(&arm_smmu_devices_lock);
1888
1889 if (!smmu)
1890 return -ENODEV;
1891
45ae7cff 1892 for (node = rb_first(&smmu->masters); node; node = rb_next(node)) {
2907320d
MH
1893 struct arm_smmu_master *master
1894 = container_of(node, struct arm_smmu_master, node);
45ae7cff
WD
1895 of_node_put(master->of_node);
1896 }
1897
ecfadb6e 1898 if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
45ae7cff
WD
1899 dev_err(dev, "removing device with active domains!\n");
1900
1901 for (i = 0; i < smmu->num_global_irqs; ++i)
1902 free_irq(smmu->irqs[i], smmu);
1903
1904 /* Turn the thing off */
2907320d 1905 writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
45ae7cff
WD
1906 return 0;
1907}
1908
45ae7cff
WD
1909static struct platform_driver arm_smmu_driver = {
1910 .driver = {
45ae7cff
WD
1911 .name = "arm-smmu",
1912 .of_match_table = of_match_ptr(arm_smmu_of_match),
1913 },
1914 .probe = arm_smmu_device_dt_probe,
1915 .remove = arm_smmu_device_remove,
1916};
1917
1918static int __init arm_smmu_init(void)
1919{
0e7d37ad 1920 struct device_node *np;
45ae7cff
WD
1921 int ret;
1922
0e7d37ad
TR
1923 /*
1924 * Play nice with systems that don't have an ARM SMMU by checking that
1925 * an ARM SMMU exists in the system before proceeding with the driver
1926 * and IOMMU bus operation registration.
1927 */
1928 np = of_find_matching_node(NULL, arm_smmu_of_match);
1929 if (!np)
1930 return 0;
1931
1932 of_node_put(np);
1933
45ae7cff
WD
1934 ret = platform_driver_register(&arm_smmu_driver);
1935 if (ret)
1936 return ret;
1937
1938 /* Oh, for a proper bus abstraction */
6614ee77 1939 if (!iommu_present(&platform_bus_type))
45ae7cff
WD
1940 bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
1941
d123cf82 1942#ifdef CONFIG_ARM_AMBA
6614ee77 1943 if (!iommu_present(&amba_bustype))
45ae7cff 1944 bus_set_iommu(&amba_bustype, &arm_smmu_ops);
d123cf82 1945#endif
45ae7cff 1946
a9a1b0b5
WD
1947#ifdef CONFIG_PCI
1948 if (!iommu_present(&pci_bus_type))
1949 bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
1950#endif
1951
45ae7cff
WD
1952 return 0;
1953}
1954
1955static void __exit arm_smmu_exit(void)
1956{
1957 return platform_driver_unregister(&arm_smmu_driver);
1958}
1959
b1950b27 1960subsys_initcall(arm_smmu_init);
45ae7cff
WD
1961module_exit(arm_smmu_exit);
1962
1963MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
1964MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
1965MODULE_LICENSE("GPL v2");
This page took 0.316193 seconds and 5 git commands to generate.