arm-smmu.c 60.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/*
 * IOMMU API for ARM architected SMMU implementations.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 * Copyright (C) 2013 ARM Limited
 *
 * Author: Will Deacon <will.deacon@arm.com>
 *
 * This driver currently supports:
 *	- SMMUv1 and v2 implementations
 *	- Stream-matching and stream-indexing
 *	- v7/v8 long-descriptor format
 *	- Non-secure access to the SMMU
 *	- Context fault reporting
27
 *	- Extended Stream ID (16 bit)
28 29 30 31
 */

#define pr_fmt(fmt) "arm-smmu: " fmt

32 33
#include <linux/acpi.h>
#include <linux/acpi_iort.h>
34
#include <linux/atomic.h>
35
#include <linux/delay.h>
36
#include <linux/dma-iommu.h>
37 38 39 40
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/io.h>
41
#include <linux/io-64-nonatomic-hi-lo.h>
42
#include <linux/iommu.h>
43
#include <linux/iopoll.h>
44 45
#include <linux/module.h>
#include <linux/of.h>
46
#include <linux/of_address.h>
47
#include <linux/of_device.h>
48
#include <linux/of_iommu.h>
49
#include <linux/pci.h>
50 51 52 53 54 55
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/spinlock.h>

#include <linux/amba/bus.h>

56
#include "io-pgtable.h"
57 58 59 60 61 62

/* Maximum number of context banks per SMMU */
#define ARM_SMMU_MAX_CBS		128

/* SMMU global address space */
#define ARM_SMMU_GR0(smmu)		((smmu)->base)
63
#define ARM_SMMU_GR1(smmu)		((smmu)->base + (1 << (smmu)->pgshift))
64

65 66 67 68 69 70 71 72 73 74
/*
 * SMMU global address space with conditional offset to access secure
 * aliases of non-secure registers (e.g. nsCR0: 0x400, nsGFSR: 0x448,
 * nsGFSYNR0: 0x450)
 */
#define ARM_SMMU_GR0_NS(smmu)						\
	((smmu)->base +							\
		((smmu->options & ARM_SMMU_OPT_SECURE_CFG_ACCESS)	\
			? 0x400 : 0))

75 76 77 78 79
/*
 * Some 64-bit registers only make sense to write atomically, but in such
 * cases all the data relevant to AArch32 formats lies within the lower word,
 * therefore this actually makes more sense than it might first appear.
 */
80
#ifdef CONFIG_64BIT
81
#define smmu_write_atomic_lq		writeq_relaxed
82
#else
83
#define smmu_write_atomic_lq		writel_relaxed
84 85
#endif

86 87 88 89 90
/* Configuration registers */
#define ARM_SMMU_GR0_sCR0		0x0
#define sCR0_CLIENTPD			(1 << 0)
#define sCR0_GFRE			(1 << 1)
#define sCR0_GFIE			(1 << 2)
91
#define sCR0_EXIDENABLE			(1 << 3)
92 93 94 95 96 97
#define sCR0_GCFGFRE			(1 << 4)
#define sCR0_GCFGFIE			(1 << 5)
#define sCR0_USFCFG			(1 << 10)
#define sCR0_VMIDPNE			(1 << 11)
#define sCR0_PTM			(1 << 12)
#define sCR0_FB				(1 << 13)
98
#define sCR0_VMID16EN			(1 << 31)
99 100 101
#define sCR0_BSU_SHIFT			14
#define sCR0_BSU_MASK			0x3

102 103 104
/* Auxiliary Configuration register */
#define ARM_SMMU_GR0_sACR		0x10

105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
/* Identification registers */
#define ARM_SMMU_GR0_ID0		0x20
#define ARM_SMMU_GR0_ID1		0x24
#define ARM_SMMU_GR0_ID2		0x28
#define ARM_SMMU_GR0_ID3		0x2c
#define ARM_SMMU_GR0_ID4		0x30
#define ARM_SMMU_GR0_ID5		0x34
#define ARM_SMMU_GR0_ID6		0x38
#define ARM_SMMU_GR0_ID7		0x3c
#define ARM_SMMU_GR0_sGFSR		0x48
#define ARM_SMMU_GR0_sGFSYNR0		0x50
#define ARM_SMMU_GR0_sGFSYNR1		0x54
#define ARM_SMMU_GR0_sGFSYNR2		0x58

#define ID0_S1TS			(1 << 30)
#define ID0_S2TS			(1 << 29)
#define ID0_NTS				(1 << 28)
#define ID0_SMS				(1 << 27)
123
#define ID0_ATOSNS			(1 << 26)
124 125
#define ID0_PTFS_NO_AARCH32		(1 << 25)
#define ID0_PTFS_NO_AARCH32S		(1 << 24)
126 127 128
#define ID0_CTTW			(1 << 14)
#define ID0_NUMIRPT_SHIFT		16
#define ID0_NUMIRPT_MASK		0xff
129 130
#define ID0_NUMSIDB_SHIFT		9
#define ID0_NUMSIDB_MASK		0xf
131
#define ID0_EXIDS			(1 << 8)
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
#define ID0_NUMSMRG_SHIFT		0
#define ID0_NUMSMRG_MASK		0xff

#define ID1_PAGESIZE			(1 << 31)
#define ID1_NUMPAGENDXB_SHIFT		28
#define ID1_NUMPAGENDXB_MASK		7
#define ID1_NUMS2CB_SHIFT		16
#define ID1_NUMS2CB_MASK		0xff
#define ID1_NUMCB_SHIFT			0
#define ID1_NUMCB_MASK			0xff

#define ID2_OAS_SHIFT			4
#define ID2_OAS_MASK			0xf
#define ID2_IAS_SHIFT			0
#define ID2_IAS_MASK			0xf
#define ID2_UBS_SHIFT			8
#define ID2_UBS_MASK			0xf
#define ID2_PTFS_4K			(1 << 12)
#define ID2_PTFS_16K			(1 << 13)
#define ID2_PTFS_64K			(1 << 14)
152
#define ID2_VMID16			(1 << 15)
153

154 155
#define ID7_MAJOR_SHIFT			4
#define ID7_MAJOR_MASK			0xf
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174

/* Global TLB invalidation */
#define ARM_SMMU_GR0_TLBIVMID		0x64
#define ARM_SMMU_GR0_TLBIALLNSNH	0x68
#define ARM_SMMU_GR0_TLBIALLH		0x6c
#define ARM_SMMU_GR0_sTLBGSYNC		0x70
#define ARM_SMMU_GR0_sTLBGSTATUS	0x74
#define sTLBGSTATUS_GSACTIVE		(1 << 0)
#define TLB_LOOP_TIMEOUT		1000000	/* 1s! */

/* Stream mapping registers */
#define ARM_SMMU_GR0_SMR(n)		(0x800 + ((n) << 2))
#define SMR_VALID			(1 << 31)
#define SMR_MASK_SHIFT			16
#define SMR_ID_SHIFT			0

#define ARM_SMMU_GR0_S2CR(n)		(0xc00 + ((n) << 2))
#define S2CR_CBNDX_SHIFT		0
#define S2CR_CBNDX_MASK			0xff
175
#define S2CR_EXIDVALID			(1 << 10)
176 177
#define S2CR_TYPE_SHIFT			16
#define S2CR_TYPE_MASK			0x3
178 179 180 181 182
enum arm_smmu_s2cr_type {
	S2CR_TYPE_TRANS,
	S2CR_TYPE_BYPASS,
	S2CR_TYPE_FAULT,
};
183

184
#define S2CR_PRIVCFG_SHIFT		24
185 186 187 188 189 190 191
#define S2CR_PRIVCFG_MASK		0x3
enum arm_smmu_s2cr_privcfg {
	S2CR_PRIVCFG_DEFAULT,
	S2CR_PRIVCFG_DIPAN,
	S2CR_PRIVCFG_UNPRIV,
	S2CR_PRIVCFG_PRIV,
};
192

193 194 195 196
/* Context bank attribute registers */
#define ARM_SMMU_GR1_CBAR(n)		(0x0 + ((n) << 2))
#define CBAR_VMID_SHIFT			0
#define CBAR_VMID_MASK			0xff
197 198 199
#define CBAR_S1_BPSHCFG_SHIFT		8
#define CBAR_S1_BPSHCFG_MASK		3
#define CBAR_S1_BPSHCFG_NSH		3
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
#define CBAR_S1_MEMATTR_SHIFT		12
#define CBAR_S1_MEMATTR_MASK		0xf
#define CBAR_S1_MEMATTR_WB		0xf
#define CBAR_TYPE_SHIFT			16
#define CBAR_TYPE_MASK			0x3
#define CBAR_TYPE_S2_TRANS		(0 << CBAR_TYPE_SHIFT)
#define CBAR_TYPE_S1_TRANS_S2_BYPASS	(1 << CBAR_TYPE_SHIFT)
#define CBAR_TYPE_S1_TRANS_S2_FAULT	(2 << CBAR_TYPE_SHIFT)
#define CBAR_TYPE_S1_TRANS_S2_TRANS	(3 << CBAR_TYPE_SHIFT)
#define CBAR_IRPTNDX_SHIFT		24
#define CBAR_IRPTNDX_MASK		0xff

#define ARM_SMMU_GR1_CBA2R(n)		(0x800 + ((n) << 2))
#define CBA2R_RW64_32BIT		(0 << 0)
#define CBA2R_RW64_64BIT		(1 << 0)
215 216
#define CBA2R_VMID_SHIFT		16
#define CBA2R_VMID_MASK			0xffff
217 218 219

/* Translation context bank */
#define ARM_SMMU_CB_BASE(smmu)		((smmu)->base + ((smmu)->size >> 1))
220
#define ARM_SMMU_CB(smmu, n)		((n) * (1 << (smmu)->pgshift))
221 222

#define ARM_SMMU_CB_SCTLR		0x0
223
#define ARM_SMMU_CB_ACTLR		0x4
224 225
#define ARM_SMMU_CB_RESUME		0x8
#define ARM_SMMU_CB_TTBCR2		0x10
226 227
#define ARM_SMMU_CB_TTBR0		0x20
#define ARM_SMMU_CB_TTBR1		0x28
228
#define ARM_SMMU_CB_TTBCR		0x30
229
#define ARM_SMMU_CB_CONTEXTIDR		0x34
230
#define ARM_SMMU_CB_S1_MAIR0		0x38
231
#define ARM_SMMU_CB_S1_MAIR1		0x3c
232
#define ARM_SMMU_CB_PAR			0x50
233
#define ARM_SMMU_CB_FSR			0x58
234
#define ARM_SMMU_CB_FAR			0x60
235
#define ARM_SMMU_CB_FSYNR0		0x68
236
#define ARM_SMMU_CB_S1_TLBIVA		0x600
237
#define ARM_SMMU_CB_S1_TLBIASID		0x610
238 239 240
#define ARM_SMMU_CB_S1_TLBIVAL		0x620
#define ARM_SMMU_CB_S2_TLBIIPAS2	0x630
#define ARM_SMMU_CB_S2_TLBIIPAS2L	0x638
241
#define ARM_SMMU_CB_ATS1PR		0x800
242
#define ARM_SMMU_CB_ATSR		0x8f0
243 244 245 246 247 248 249 250 251 252

#define SCTLR_S1_ASIDPNE		(1 << 12)
#define SCTLR_CFCFG			(1 << 7)
#define SCTLR_CFIE			(1 << 6)
#define SCTLR_CFRE			(1 << 5)
#define SCTLR_E				(1 << 4)
#define SCTLR_AFE			(1 << 2)
#define SCTLR_TRE			(1 << 1)
#define SCTLR_M				(1 << 0)

253 254
#define ARM_MMU500_ACTLR_CPRE		(1 << 1)

255
#define ARM_MMU500_ACR_CACHE_LOCK	(1 << 26)
256
#define ARM_MMU500_ACR_SMTNMB_TLBEN	(1 << 8)
257

258 259 260 261
#define CB_PAR_F			(1 << 0)

#define ATSR_ACTIVE			(1 << 0)

262 263 264 265
#define RESUME_RETRY			(0 << 0)
#define RESUME_TERMINATE		(1 << 0)

#define TTBCR2_SEP_SHIFT		15
266
#define TTBCR2_SEP_UPSTREAM		(0x7 << TTBCR2_SEP_SHIFT)
267
#define TTBCR2_AS			(1 << 4)
268

269
#define TTBRn_ASID_SHIFT		48
270 271 272 273 274 275 276 277 278 279 280 281

#define FSR_MULTI			(1 << 31)
#define FSR_SS				(1 << 30)
#define FSR_UUT				(1 << 8)
#define FSR_ASF				(1 << 7)
#define FSR_TLBLKF			(1 << 6)
#define FSR_TLBMCF			(1 << 5)
#define FSR_EF				(1 << 4)
#define FSR_PF				(1 << 3)
#define FSR_AFF				(1 << 2)
#define FSR_TF				(1 << 1)

282 283 284
#define FSR_IGN				(FSR_AFF | FSR_ASF | \
					 FSR_TLBMCF | FSR_TLBLKF)
#define FSR_FAULT			(FSR_MULTI | FSR_SS | FSR_UUT | \
285
					 FSR_EF | FSR_PF | FSR_TF | FSR_IGN)
286 287 288

#define FSYNR0_WNR			(1 << 4)

289
static int force_stage;
290
module_param(force_stage, int, S_IRUGO);
291 292
MODULE_PARM_DESC(force_stage,
	"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.");
293 294 295 296
static bool disable_bypass;
module_param(disable_bypass, bool, S_IRUGO);
MODULE_PARM_DESC(disable_bypass,
	"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.");
297

298
enum arm_smmu_arch_version {
299 300
	ARM_SMMU_V1,
	ARM_SMMU_V1_64K,
301 302 303
	ARM_SMMU_V2,
};

304 305
enum arm_smmu_implementation {
	GENERIC_SMMU,
306
	ARM_MMU500,
307
	CAVIUM_SMMUV2,
308 309
};

310
struct arm_smmu_s2cr {
311 312
	struct iommu_group		*group;
	int				count;
313 314 315 316 317 318 319 320 321
	enum arm_smmu_s2cr_type		type;
	enum arm_smmu_s2cr_privcfg	privcfg;
	u8				cbndx;
};

#define s2cr_init_val (struct arm_smmu_s2cr){				\
	.type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS,	\
}

322 323 324
struct arm_smmu_smr {
	u16				mask;
	u16				id;
325
	bool				valid;
326 327
};

328
struct arm_smmu_master_cfg {
329
	struct arm_smmu_device		*smmu;
330
	s16				smendx[];
331
};
332
#define INVALID_SMENDX			-1
333 334
#define __fwspec_cfg(fw) ((struct arm_smmu_master_cfg *)fw->iommu_priv)
#define fwspec_smmu(fw)  (__fwspec_cfg(fw)->smmu)
335 336
#define fwspec_smendx(fw, i) \
	(i >= fw->num_ids ? INVALID_SMENDX : __fwspec_cfg(fw)->smendx[i])
337
#define for_each_cfg_sme(fw, i, idx) \
338
	for (i = 0; idx = fwspec_smendx(fw, i), i < fw->num_ids; ++i)
339 340 341 342 343 344

struct arm_smmu_device {
	struct device			*dev;

	void __iomem			*base;
	unsigned long			size;
345
	unsigned long			pgshift;
346 347 348 349 350 351

#define ARM_SMMU_FEAT_COHERENT_WALK	(1 << 0)
#define ARM_SMMU_FEAT_STREAM_MATCH	(1 << 1)
#define ARM_SMMU_FEAT_TRANS_S1		(1 << 2)
#define ARM_SMMU_FEAT_TRANS_S2		(1 << 3)
#define ARM_SMMU_FEAT_TRANS_NESTED	(1 << 4)
352
#define ARM_SMMU_FEAT_TRANS_OPS		(1 << 5)
353
#define ARM_SMMU_FEAT_VMID16		(1 << 6)
354 355 356 357 358
#define ARM_SMMU_FEAT_FMT_AARCH64_4K	(1 << 7)
#define ARM_SMMU_FEAT_FMT_AARCH64_16K	(1 << 8)
#define ARM_SMMU_FEAT_FMT_AARCH64_64K	(1 << 9)
#define ARM_SMMU_FEAT_FMT_AARCH32_L	(1 << 10)
#define ARM_SMMU_FEAT_FMT_AARCH32_S	(1 << 11)
359
#define ARM_SMMU_FEAT_EXIDS		(1 << 12)
360
	u32				features;
361 362 363

#define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
	u32				options;
364
	enum arm_smmu_arch_version	version;
365
	enum arm_smmu_implementation	model;
366 367 368 369 370 371 372

	u32				num_context_banks;
	u32				num_s2_context_banks;
	DECLARE_BITMAP(context_map, ARM_SMMU_MAX_CBS);
	atomic_t			irptndx;

	u32				num_mapping_groups;
373 374
	u16				streamid_mask;
	u16				smr_mask_mask;
375
	struct arm_smmu_smr		*smrs;
376
	struct arm_smmu_s2cr		*s2crs;
377
	struct mutex			stream_map_mutex;
378

379 380 381
	unsigned long			va_size;
	unsigned long			ipa_size;
	unsigned long			pa_size;
382
	unsigned long			pgsize_bitmap;
383 384 385 386 387

	u32				num_global_irqs;
	u32				num_context_irqs;
	unsigned int			*irqs;

388
	u32				cavium_id_base; /* Specific to Cavium */
389 390
};

391 392 393 394 395
enum arm_smmu_context_fmt {
	ARM_SMMU_CTX_FMT_NONE,
	ARM_SMMU_CTX_FMT_AARCH64,
	ARM_SMMU_CTX_FMT_AARCH32_L,
	ARM_SMMU_CTX_FMT_AARCH32_S,
396 397 398 399 400 401
};

struct arm_smmu_cfg {
	u8				cbndx;
	u8				irptndx;
	u32				cbar;
402
	enum arm_smmu_context_fmt	fmt;
403
};
404
#define INVALID_IRPTNDX			0xff
405

406 407
#define ARM_SMMU_CB_ASID(smmu, cfg) ((u16)(smmu)->cavium_id_base + (cfg)->cbndx)
#define ARM_SMMU_CB_VMID(smmu, cfg) ((u16)(smmu)->cavium_id_base + (cfg)->cbndx + 1)
408

409 410 411 412 413 414
enum arm_smmu_domain_stage {
	ARM_SMMU_DOMAIN_S1 = 0,
	ARM_SMMU_DOMAIN_S2,
	ARM_SMMU_DOMAIN_NESTED,
};

415
struct arm_smmu_domain {
416
	struct arm_smmu_device		*smmu;
417 418
	struct io_pgtable_ops		*pgtbl_ops;
	spinlock_t			pgtbl_lock;
419
	struct arm_smmu_cfg		cfg;
420
	enum arm_smmu_domain_stage	stage;
421
	struct mutex			init_mutex; /* Protects smmu pointer */
422
	struct iommu_domain		domain;
423 424
};

425 426 427 428 429
struct arm_smmu_option_prop {
	u32 opt;
	const char *prop;
};

430 431
static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);

432 433
static bool using_legacy_binding, using_generic_binding;

434
static struct arm_smmu_option_prop arm_smmu_options[] = {
435 436 437 438
	{ ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
	{ 0, NULL},
};

439 440 441 442 443
static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
{
	return container_of(dom, struct arm_smmu_domain, domain);
}

444 445 446
static void parse_driver_options(struct arm_smmu_device *smmu)
{
	int i = 0;
447

448 449 450 451 452 453 454 455 456 457
	do {
		if (of_property_read_bool(smmu->dev->of_node,
						arm_smmu_options[i].prop)) {
			smmu->options |= arm_smmu_options[i].opt;
			dev_notice(smmu->dev, "option %s\n",
				arm_smmu_options[i].prop);
		}
	} while (arm_smmu_options[++i].opt);
}

458
static struct device_node *dev_get_dev_node(struct device *dev)
459 460 461
{
	if (dev_is_pci(dev)) {
		struct pci_bus *bus = to_pci_dev(dev)->bus;
462

463 464
		while (!pci_is_root_bus(bus))
			bus = bus->parent;
465
		return of_node_get(bus->bridge->parent->of_node);
466 467
	}

468
	return of_node_get(dev->of_node);
469 470
}

471
static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
472
{
473 474
	*((__be32 *)data) = cpu_to_be32(alias);
	return 0; /* Continue walking */
475 476
}

477
static int __find_legacy_master_phandle(struct device *dev, void *data)
478
{
479 480 481 482 483 484 485 486 487 488 489 490
	struct of_phandle_iterator *it = *(void **)data;
	struct device_node *np = it->node;
	int err;

	of_for_each_phandle(it, err, dev->of_node, "mmu-masters",
			    "#stream-id-cells", 0)
		if (it->node == np) {
			*(void **)data = dev;
			return 1;
		}
	it->node = np;
	return err == -ENOENT ? 0 : err;
491 492
}

493
static struct platform_driver arm_smmu_driver;
494
static struct iommu_ops arm_smmu_ops;
495

496 497
static int arm_smmu_register_legacy_master(struct device *dev,
					   struct arm_smmu_device **smmu)
498
{
499
	struct device *smmu_dev;
500 501 502
	struct device_node *np;
	struct of_phandle_iterator it;
	void *data = &it;
503
	u32 *sids;
504 505
	__be32 pci_sid;
	int err;
506

507 508 509 510 511
	np = dev_get_dev_node(dev);
	if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
		of_node_put(np);
		return -ENODEV;
	}
512

513
	it.node = np;
514 515
	err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
				     __find_legacy_master_phandle);
516
	smmu_dev = data;
517 518 519 520 521
	of_node_put(np);
	if (err == 0)
		return -ENODEV;
	if (err < 0)
		return err;
522

523 524 525 526 527 528 529
	if (dev_is_pci(dev)) {
		/* "mmu-masters" assumes Stream ID == Requester ID */
		pci_for_each_dma_alias(to_pci_dev(dev), __arm_smmu_get_pci_sid,
				       &pci_sid);
		it.cur = &pci_sid;
		it.cur_count = 1;
	}
530

531 532 533 534
	err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
				&arm_smmu_ops);
	if (err)
		return err;
535

536 537 538
	sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
	if (!sids)
		return -ENOMEM;
539

540 541 542 543 544
	*smmu = dev_get_drvdata(smmu_dev);
	of_phandle_iterator_args(&it, sids, it.cur_count);
	err = iommu_fwspec_add_ids(dev, sids, it.cur_count);
	kfree(sids);
	return err;
545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565
}

static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
{
	int idx;

	do {
		idx = find_next_zero_bit(map, end, start);
		if (idx == end)
			return -ENOSPC;
	} while (test_and_set_bit(idx, map));

	return idx;
}

static void __arm_smmu_free_bitmap(unsigned long *map, int idx)
{
	clear_bit(idx, map);
}

/* Wait for any pending TLB invalidations to complete */
566
static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu)
567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583
{
	int count = 0;
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);

	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_sTLBGSYNC);
	while (readl_relaxed(gr0_base + ARM_SMMU_GR0_sTLBGSTATUS)
	       & sTLBGSTATUS_GSACTIVE) {
		cpu_relax();
		if (++count == TLB_LOOP_TIMEOUT) {
			dev_err_ratelimited(smmu->dev,
			"TLB sync timed out -- SMMU may be deadlocked\n");
			return;
		}
		udelay(1);
	}
}

584 585 586 587 588 589 590
static void arm_smmu_tlb_sync(void *cookie)
{
	struct arm_smmu_domain *smmu_domain = cookie;
	__arm_smmu_tlb_sync(smmu_domain->smmu);
}

static void arm_smmu_tlb_inv_context(void *cookie)
591
{
592
	struct arm_smmu_domain *smmu_domain = cookie;
593 594
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
595
	bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
596
	void __iomem *base;
597 598 599

	if (stage1) {
		base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
600
		writel_relaxed(ARM_SMMU_CB_ASID(smmu, cfg),
601
			       base + ARM_SMMU_CB_S1_TLBIASID);
602 603
	} else {
		base = ARM_SMMU_GR0(smmu);
604
		writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg),
605
			       base + ARM_SMMU_GR0_TLBIVMID);
606 607
	}

608 609 610 611
	__arm_smmu_tlb_sync(smmu);
}

static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
612
					  size_t granule, bool leaf, void *cookie)
613 614 615 616 617 618 619 620 621 622 623
{
	struct arm_smmu_domain *smmu_domain = cookie;
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
	bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
	void __iomem *reg;

	if (stage1) {
		reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
		reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;

624
		if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
625
			iova &= ~12UL;
626
			iova |= ARM_SMMU_CB_ASID(smmu, cfg);
627 628 629 630
			do {
				writel_relaxed(iova, reg);
				iova += granule;
			} while (size -= granule);
631 632
		} else {
			iova >>= 12;
633
			iova |= (u64)ARM_SMMU_CB_ASID(smmu, cfg) << 48;
634 635 636 637
			do {
				writeq_relaxed(iova, reg);
				iova += granule >> 12;
			} while (size -= granule);
638 639 640 641 642
		}
	} else if (smmu->version == ARM_SMMU_V2) {
		reg = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
		reg += leaf ? ARM_SMMU_CB_S2_TLBIIPAS2L :
			      ARM_SMMU_CB_S2_TLBIIPAS2;
643 644
		iova >>= 12;
		do {
645
			smmu_write_atomic_lq(iova, reg);
646 647
			iova += granule >> 12;
		} while (size -= granule);
648 649
	} else {
		reg = ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_TLBIVMID;
650
		writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg), reg);
651 652 653
	}
}

654
static const struct iommu_gather_ops arm_smmu_gather_ops = {
655 656 657 658 659
	.tlb_flush_all	= arm_smmu_tlb_inv_context,
	.tlb_add_flush	= arm_smmu_tlb_inv_range_nosync,
	.tlb_sync	= arm_smmu_tlb_sync,
};

660 661
static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
{
662
	u32 fsr, fsynr;
663 664
	unsigned long iova;
	struct iommu_domain *domain = dev;
665
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
666 667
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
668 669
	void __iomem *cb_base;

670
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
671 672 673 674 675 676
	fsr = readl_relaxed(cb_base + ARM_SMMU_CB_FSR);

	if (!(fsr & FSR_FAULT))
		return IRQ_NONE;

	fsynr = readl_relaxed(cb_base + ARM_SMMU_CB_FSYNR0);
677
	iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
678

679 680 681
	dev_err_ratelimited(smmu->dev,
	"Unhandled context fault: fsr=0x%x, iova=0x%08lx, fsynr=0x%x, cb=%d\n",
			    fsr, iova, fsynr, cfg->cbndx);
682

683 684
	writel(fsr, cb_base + ARM_SMMU_CB_FSR);
	return IRQ_HANDLED;
685 686 687 688 689 690
}

static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
{
	u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
	struct arm_smmu_device *smmu = dev;
691
	void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
692 693 694 695 696 697

	gfsr = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSR);
	gfsynr0 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR0);
	gfsynr1 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR1);
	gfsynr2 = readl_relaxed(gr0_base + ARM_SMMU_GR0_sGFSYNR2);

698 699 700
	if (!gfsr)
		return IRQ_NONE;

701 702 703 704 705 706 707
	dev_err_ratelimited(smmu->dev,
		"Unexpected global fault, this could be serious\n");
	dev_err_ratelimited(smmu->dev,
		"\tGFSR 0x%08x, GFSYNR0 0x%08x, GFSYNR1 0x%08x, GFSYNR2 0x%08x\n",
		gfsr, gfsynr0, gfsynr1, gfsynr2);

	writel(gfsr, gr0_base + ARM_SMMU_GR0_sGFSR);
708
	return IRQ_HANDLED;
709 710
}

711 712
static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
				       struct io_pgtable_cfg *pgtbl_cfg)
713
{
714
	u32 reg, reg2;
715
	u64 reg64;
716
	bool stage1;
717 718
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
719
	void __iomem *cb_base, *gr1_base;
720 721

	gr1_base = ARM_SMMU_GR1(smmu);
722 723
	stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
724

725
	if (smmu->version > ARM_SMMU_V1) {
726 727 728 729
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
			reg = CBA2R_RW64_64BIT;
		else
			reg = CBA2R_RW64_32BIT;
730 731
		/* 16-bit VMIDs live in CBA2R */
		if (smmu->features & ARM_SMMU_FEAT_VMID16)
732
			reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBA2R_VMID_SHIFT;
733

734 735 736
		writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(cfg->cbndx));
	}

737
	/* CBAR */
738
	reg = cfg->cbar;
739
	if (smmu->version < ARM_SMMU_V2)
740
		reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
741

742 743 744 745 746 747 748
	/*
	 * Use the weakest shareability/memory types, so they are
	 * overridden by the ttbcr/pte.
	 */
	if (stage1) {
		reg |= (CBAR_S1_BPSHCFG_NSH << CBAR_S1_BPSHCFG_SHIFT) |
			(CBAR_S1_MEMATTR_WB << CBAR_S1_MEMATTR_SHIFT);
749 750
	} else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
		/* 8-bit VMIDs live in CBAR */
751
		reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBAR_VMID_SHIFT;
752
	}
753
	writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(cfg->cbndx));
754

755 756
	/* TTBRs */
	if (stage1) {
757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772
		u16 asid = ARM_SMMU_CB_ASID(smmu, cfg);

		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
			reg = pgtbl_cfg->arm_v7s_cfg.ttbr[0];
			writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBR0);
			reg = pgtbl_cfg->arm_v7s_cfg.ttbr[1];
			writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBR1);
			writel_relaxed(asid, cb_base + ARM_SMMU_CB_CONTEXTIDR);
		} else {
			reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[0];
			reg64 |= (u64)asid << TTBRn_ASID_SHIFT;
			writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
			reg64 = pgtbl_cfg->arm_lpae_s1_cfg.ttbr[1];
			reg64 |= (u64)asid << TTBRn_ASID_SHIFT;
			writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR1);
		}
773
	} else {
774
		reg64 = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
775
		writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
776
	}
777

778 779
	/* TTBCR */
	if (stage1) {
780 781 782 783 784 785 786
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
			reg = pgtbl_cfg->arm_v7s_cfg.tcr;
			reg2 = 0;
		} else {
			reg = pgtbl_cfg->arm_lpae_s1_cfg.tcr;
			reg2 = pgtbl_cfg->arm_lpae_s1_cfg.tcr >> 32;
			reg2 |= TTBCR2_SEP_UPSTREAM;
787 788
			if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
				reg2 |= TTBCR2_AS;
789
		}
790 791
		if (smmu->version > ARM_SMMU_V1)
			writel_relaxed(reg2, cb_base + ARM_SMMU_CB_TTBCR2);
792
	} else {
793
		reg = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
794
	}
795
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
796

797
	/* MAIRs (stage-1 only) */
798
	if (stage1) {
799 800 801 802 803 804 805
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_S) {
			reg = pgtbl_cfg->arm_v7s_cfg.prrr;
			reg2 = pgtbl_cfg->arm_v7s_cfg.nmrr;
		} else {
			reg = pgtbl_cfg->arm_lpae_s1_cfg.mair[0];
			reg2 = pgtbl_cfg->arm_lpae_s1_cfg.mair[1];
		}
806
		writel_relaxed(reg, cb_base + ARM_SMMU_CB_S1_MAIR0);
807
		writel_relaxed(reg2, cb_base + ARM_SMMU_CB_S1_MAIR1);
808 809 810
	}

	/* SCTLR */
811
	reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
812 813 814 815 816
	if (stage1)
		reg |= SCTLR_S1_ASIDPNE;
#ifdef __BIG_ENDIAN
	reg |= SCTLR_E;
#endif
817
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
818 819 820
}

static int arm_smmu_init_domain_context(struct iommu_domain *domain,
821
					struct arm_smmu_device *smmu)
822
{
823
	int irq, start, ret = 0;
824 825 826 827
	unsigned long ias, oas;
	struct io_pgtable_ops *pgtbl_ops;
	struct io_pgtable_cfg pgtbl_cfg;
	enum io_pgtable_fmt fmt;
828
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
829
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
830

831
	mutex_lock(&smmu_domain->init_mutex);
832 833 834
	if (smmu_domain->smmu)
		goto out_unlock;

835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857
	/*
	 * Mapping the requested stage onto what we support is surprisingly
	 * complicated, mainly because the spec allows S1+S2 SMMUs without
	 * support for nested translation. That means we end up with the
	 * following table:
	 *
	 * Requested        Supported        Actual
	 *     S1               N              S1
	 *     S1             S1+S2            S1
	 *     S1               S2             S2
	 *     S1               S1             S1
	 *     N                N              N
	 *     N              S1+S2            S2
	 *     N                S2             S2
	 *     N                S1             S1
	 *
	 * Note that you can't actually request stage-2 mappings.
	 */
	if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S1))
		smmu_domain->stage = ARM_SMMU_DOMAIN_S2;
	if (!(smmu->features & ARM_SMMU_FEAT_TRANS_S2))
		smmu_domain->stage = ARM_SMMU_DOMAIN_S1;

858 859 860 861 862 863 864 865 866 867
	/*
	 * Choosing a suitable context format is even more fiddly. Until we
	 * grow some way for the caller to express a preference, and/or move
	 * the decision into the io-pgtable code where it arguably belongs,
	 * just aim for the closest thing to the rest of the system, and hope
	 * that the hardware isn't esoteric enough that we can't assume AArch64
	 * support to be a superset of AArch32 support...
	 */
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_L)
		cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_L;
868 869 870 871 872
	if (IS_ENABLED(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) &&
	    !IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_ARM_LPAE) &&
	    (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S) &&
	    (smmu_domain->stage == ARM_SMMU_DOMAIN_S1))
		cfg->fmt = ARM_SMMU_CTX_FMT_AARCH32_S;
873 874 875 876 877 878 879 880 881 882 883
	if ((IS_ENABLED(CONFIG_64BIT) || cfg->fmt == ARM_SMMU_CTX_FMT_NONE) &&
	    (smmu->features & (ARM_SMMU_FEAT_FMT_AARCH64_64K |
			       ARM_SMMU_FEAT_FMT_AARCH64_16K |
			       ARM_SMMU_FEAT_FMT_AARCH64_4K)))
		cfg->fmt = ARM_SMMU_CTX_FMT_AARCH64;

	if (cfg->fmt == ARM_SMMU_CTX_FMT_NONE) {
		ret = -EINVAL;
		goto out_unlock;
	}

884 885 886 887
	switch (smmu_domain->stage) {
	case ARM_SMMU_DOMAIN_S1:
		cfg->cbar = CBAR_TYPE_S1_TRANS_S2_BYPASS;
		start = smmu->num_s2_context_banks;
888 889
		ias = smmu->va_size;
		oas = smmu->ipa_size;
890
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
891
			fmt = ARM_64_LPAE_S1;
892
		} else if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH32_L) {
893
			fmt = ARM_32_LPAE_S1;
894 895
			ias = min(ias, 32UL);
			oas = min(oas, 40UL);
896 897 898 899
		} else {
			fmt = ARM_V7S;
			ias = min(ias, 32UL);
			oas = min(oas, 32UL);
900
		}
901 902
		break;
	case ARM_SMMU_DOMAIN_NESTED:
903 904 905 906
		/*
		 * We will likely want to change this if/when KVM gets
		 * involved.
		 */
907
	case ARM_SMMU_DOMAIN_S2:
908 909
		cfg->cbar = CBAR_TYPE_S2_TRANS;
		start = 0;
910 911
		ias = smmu->ipa_size;
		oas = smmu->pa_size;
912
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64) {
913
			fmt = ARM_64_LPAE_S2;
914
		} else {
915
			fmt = ARM_32_LPAE_S2;
916 917 918
			ias = min(ias, 40UL);
			oas = min(oas, 40UL);
		}
919 920 921 922
		break;
	default:
		ret = -EINVAL;
		goto out_unlock;
923 924 925 926
	}

	ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
				      smmu->num_context_banks);
927
	if (ret < 0)
928
		goto out_unlock;
929

930
	cfg->cbndx = ret;
931
	if (smmu->version < ARM_SMMU_V2) {
932 933
		cfg->irptndx = atomic_inc_return(&smmu->irptndx);
		cfg->irptndx %= smmu->num_context_irqs;
934
	} else {
935
		cfg->irptndx = cfg->cbndx;
936 937
	}

938
	pgtbl_cfg = (struct io_pgtable_cfg) {
939
		.pgsize_bitmap	= smmu->pgsize_bitmap,
940 941 942
		.ias		= ias,
		.oas		= oas,
		.tlb		= &arm_smmu_gather_ops,
943
		.iommu_dev	= smmu->dev,
944 945 946 947 948 949 950 951 952
	};

	smmu_domain->smmu = smmu;
	pgtbl_ops = alloc_io_pgtable_ops(fmt, &pgtbl_cfg, smmu_domain);
	if (!pgtbl_ops) {
		ret = -ENOMEM;
		goto out_clear_smmu;
	}

953 954
	/* Update the domain's page sizes to reflect the page table format */
	domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
955 956
	domain->geometry.aperture_end = (1UL << ias) - 1;
	domain->geometry.force_aperture = true;
957

958 959 960 961 962 963 964
	/* Initialise the context bank with our page table cfg */
	arm_smmu_init_context_bank(smmu_domain, &pgtbl_cfg);

	/*
	 * Request context fault interrupt. Do this last to avoid the
	 * handler seeing a half-initialised domain state.
	 */
965
	irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
966 967
	ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
			       IRQF_SHARED, "arm-smmu-context-fault", domain);
968
	if (ret < 0) {
969
		dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
970 971
			cfg->irptndx, irq);
		cfg->irptndx = INVALID_IRPTNDX;
972 973
	}

974 975 976 977
	mutex_unlock(&smmu_domain->init_mutex);

	/* Publish page table ops for map/unmap */
	smmu_domain->pgtbl_ops = pgtbl_ops;
978
	return 0;
979

980 981
out_clear_smmu:
	smmu_domain->smmu = NULL;
982
out_unlock:
983
	mutex_unlock(&smmu_domain->init_mutex);
984 985 986 987 988
	return ret;
}

static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
{
989
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
990 991
	struct arm_smmu_device *smmu = smmu_domain->smmu;
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
992
	void __iomem *cb_base;
993 994
	int irq;

995
	if (!smmu)
996 997
		return;

998 999 1000 1001
	/*
	 * Disable the context bank and free the page tables before freeing
	 * it.
	 */
1002
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
1003 1004
	writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);

1005 1006
	if (cfg->irptndx != INVALID_IRPTNDX) {
		irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
1007
		devm_free_irq(smmu->dev, irq, domain);
1008 1009
	}

1010
	free_io_pgtable_ops(smmu_domain->pgtbl_ops);
1011
	__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
1012 1013
}

1014
static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
1015 1016 1017
{
	struct arm_smmu_domain *smmu_domain;

1018
	if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1019
		return NULL;
1020 1021 1022 1023 1024 1025 1026
	/*
	 * Allocate the domain and initialise some of its data structures.
	 * We can't really do anything meaningful until we've added a
	 * master.
	 */
	smmu_domain = kzalloc(sizeof(*smmu_domain), GFP_KERNEL);
	if (!smmu_domain)
1027
		return NULL;
1028

1029 1030
	if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
	    iommu_get_dma_cookie(&smmu_domain->domain))) {
1031 1032 1033 1034
		kfree(smmu_domain);
		return NULL;
	}

1035 1036
	mutex_init(&smmu_domain->init_mutex);
	spin_lock_init(&smmu_domain->pgtbl_lock);
1037 1038

	return &smmu_domain->domain;
1039 1040
}

1041
static void arm_smmu_domain_free(struct iommu_domain *domain)
1042
{
1043
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1044 1045 1046 1047 1048

	/*
	 * Free the domain resources. We assume that all devices have
	 * already been detached.
	 */
1049
	iommu_put_dma_cookie(domain);
1050 1051 1052 1053
	arm_smmu_destroy_domain_context(domain);
	kfree(smmu_domain);
}

1054 1055 1056
static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
{
	struct arm_smmu_smr *smr = smmu->smrs + idx;
1057
	u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1058

1059
	if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
1060 1061 1062 1063
		reg |= SMR_VALID;
	writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
}

1064 1065 1066 1067 1068 1069 1070
static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
{
	struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
	u32 reg = (s2cr->type & S2CR_TYPE_MASK) << S2CR_TYPE_SHIFT |
		  (s2cr->cbndx & S2CR_CBNDX_MASK) << S2CR_CBNDX_SHIFT |
		  (s2cr->privcfg & S2CR_PRIVCFG_MASK) << S2CR_PRIVCFG_SHIFT;

1071 1072 1073
	if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
	    smmu->smrs[idx].valid)
		reg |= S2CR_EXIDVALID;
1074 1075 1076 1077 1078 1079 1080 1081 1082 1083
	writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_S2CR(idx));
}

static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
{
	arm_smmu_write_s2cr(smmu, idx);
	if (smmu->smrs)
		arm_smmu_write_smr(smmu, idx);
}

1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111
/*
 * The width of SMR's mask field depends on sCR0_EXIDENABLE, so this function
 * should be called after sCR0 is written.
 */
static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
{
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
	u32 smr;

	if (!smmu->smrs)
		return;

	/*
	 * SMR.ID bits may not be preserved if the corresponding MASK
	 * bits are set, so check each one separately. We can reject
	 * masters later if they try to claim IDs outside these masks.
	 */
	smr = smmu->streamid_mask << SMR_ID_SHIFT;
	writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
	smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
	smmu->streamid_mask = smr >> SMR_ID_SHIFT;

	smr = smmu->streamid_mask << SMR_MASK_SHIFT;
	writel_relaxed(smr, gr0_base + ARM_SMMU_GR0_SMR(0));
	smr = readl_relaxed(gr0_base + ARM_SMMU_GR0_SMR(0));
	smmu->smr_mask_mask = smr >> SMR_MASK_SHIFT;
}

1112
static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1113 1114
{
	struct arm_smmu_smr *smrs = smmu->smrs;
1115
	int i, free_idx = -ENOSPC;
1116

1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129
	/* Stream indexing is blissfully easy */
	if (!smrs)
		return id;

	/* Validating SMRs is... less so */
	for (i = 0; i < smmu->num_mapping_groups; ++i) {
		if (!smrs[i].valid) {
			/*
			 * Note the first free entry we come across, which
			 * we'll claim in the end if nothing else matches.
			 */
			if (free_idx < 0)
				free_idx = i;
1130 1131
			continue;
		}
1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149
		/*
		 * If the new entry is _entirely_ matched by an existing entry,
		 * then reuse that, with the guarantee that there also cannot
		 * be any subsequent conflicting entries. In normal use we'd
		 * expect simply identical entries for this case, but there's
		 * no harm in accommodating the generalisation.
		 */
		if ((mask & smrs[i].mask) == mask &&
		    !((id ^ smrs[i].id) & ~smrs[i].mask))
			return i;
		/*
		 * If the new entry has any other overlap with an existing one,
		 * though, then there always exists at least one stream ID
		 * which would cause a conflict, and we can't allow that risk.
		 */
		if (!((id ^ smrs[i].id) & ~(smrs[i].mask | mask)))
			return -EINVAL;
	}
1150

1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167
	return free_idx;
}

static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
{
	if (--smmu->s2crs[idx].count)
		return false;

	smmu->s2crs[idx] = s2cr_init_val;
	if (smmu->smrs)
		smmu->smrs[idx].valid = false;

	return true;
}

static int arm_smmu_master_alloc_smes(struct device *dev)
{
1168 1169
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1170 1171 1172 1173 1174 1175 1176
	struct arm_smmu_device *smmu = cfg->smmu;
	struct arm_smmu_smr *smrs = smmu->smrs;
	struct iommu_group *group;
	int i, idx, ret;

	mutex_lock(&smmu->stream_map_mutex);
	/* Figure out a viable stream map entry allocation */
1177
	for_each_cfg_sme(fwspec, i, idx) {
1178 1179 1180
		u16 sid = fwspec->ids[i];
		u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;

1181 1182 1183
		if (idx != INVALID_SMENDX) {
			ret = -EEXIST;
			goto out_err;
1184 1185
		}

1186
		ret = arm_smmu_find_sme(smmu, sid, mask);
1187 1188 1189 1190 1191
		if (ret < 0)
			goto out_err;

		idx = ret;
		if (smrs && smmu->s2crs[idx].count == 0) {
1192 1193
			smrs[idx].id = sid;
			smrs[idx].mask = mask;
1194 1195 1196 1197
			smrs[idx].valid = true;
		}
		smmu->s2crs[idx].count++;
		cfg->smendx[i] = (s16)idx;
1198 1199
	}

1200 1201 1202 1203 1204 1205 1206 1207
	group = iommu_group_get_for_dev(dev);
	if (!group)
		group = ERR_PTR(-ENOMEM);
	if (IS_ERR(group)) {
		ret = PTR_ERR(group);
		goto out_err;
	}
	iommu_group_put(group);
1208

1209
	/* It worked! Now, poke the actual hardware */
1210
	for_each_cfg_sme(fwspec, i, idx) {
1211 1212 1213
		arm_smmu_write_sme(smmu, idx);
		smmu->s2crs[idx].group = group;
	}
1214

1215
	mutex_unlock(&smmu->stream_map_mutex);
1216 1217
	return 0;

1218
out_err:
1219
	while (i--) {
1220
		arm_smmu_free_sme(smmu, cfg->smendx[i]);
1221 1222
		cfg->smendx[i] = INVALID_SMENDX;
	}
1223 1224
	mutex_unlock(&smmu->stream_map_mutex);
	return ret;
1225 1226
}

1227
static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1228
{
1229 1230
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
	struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1231
	int i, idx;
1232

1233
	mutex_lock(&smmu->stream_map_mutex);
1234
	for_each_cfg_sme(fwspec, i, idx) {
1235 1236
		if (arm_smmu_free_sme(smmu, idx))
			arm_smmu_write_sme(smmu, idx);
1237
		cfg->smendx[i] = INVALID_SMENDX;
1238
	}
1239
	mutex_unlock(&smmu->stream_map_mutex);
1240 1241 1242
}

static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1243
				      struct iommu_fwspec *fwspec)
1244
{
1245
	struct arm_smmu_device *smmu = smmu_domain->smmu;
1246 1247 1248
	struct arm_smmu_s2cr *s2cr = smmu->s2crs;
	enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
	u8 cbndx = smmu_domain->cfg.cbndx;
1249
	int i, idx;
1250

1251
	for_each_cfg_sme(fwspec, i, idx) {
1252
		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1253
			continue;
1254

1255 1256 1257 1258
		s2cr[idx].type = type;
		s2cr[idx].privcfg = S2CR_PRIVCFG_UNPRIV;
		s2cr[idx].cbndx = cbndx;
		arm_smmu_write_s2cr(smmu, idx);
1259
	}
1260
	return 0;
1261 1262
}

1263 1264
static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
{
1265
	int ret;
1266 1267
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu;
1268
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1269

1270
	if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1271 1272 1273 1274
		dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
		return -ENXIO;
	}

1275 1276 1277 1278 1279 1280 1281 1282 1283 1284
	/*
	 * FIXME: The arch/arm DMA API code tries to attach devices to its own
	 * domains between of_xlate() and add_device() - we have no way to cope
	 * with that, so until ARM gets converted to rely on groups and default
	 * domains, just say no (but more politely than by dereferencing NULL).
	 * This should be at least a WARN_ON once that's sorted.
	 */
	if (!fwspec->iommu_priv)
		return -ENODEV;

1285
	smmu = fwspec_smmu(fwspec);
1286
	/* Ensure that the domain is finalised */
1287
	ret = arm_smmu_init_domain_context(domain, smmu);
1288
	if (ret < 0)
1289 1290
		return ret;

1291
	/*
1292 1293
	 * Sanity check the domain. We don't support domains across
	 * different SMMUs.
1294
	 */
1295
	if (smmu_domain->smmu != smmu) {
1296 1297
		dev_err(dev,
			"cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n",
1298
			dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev));
1299
		return -EINVAL;
1300 1301 1302
	}

	/* Looks ok, so add the device to the domain */
1303
	return arm_smmu_domain_add_master(smmu_domain, fwspec);
1304 1305 1306
}

static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1307
			phys_addr_t paddr, size_t size, int prot)
1308
{
1309 1310
	int ret;
	unsigned long flags;
1311
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1312
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1313

1314
	if (!ops)
1315 1316
		return -ENODEV;

1317 1318 1319 1320
	spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
	ret = ops->map(ops, iova, paddr, size, prot);
	spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
	return ret;
1321 1322 1323 1324 1325
}

static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
			     size_t size)
{
1326 1327
	size_t ret;
	unsigned long flags;
1328
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1329
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1330

1331 1332 1333 1334 1335 1336 1337
	if (!ops)
		return 0;

	spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
	ret = ops->unmap(ops, iova, size);
	spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
	return ret;
1338 1339
}

1340 1341 1342
static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
					      dma_addr_t iova)
{
1343
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1344 1345 1346 1347 1348 1349 1350
	struct arm_smmu_device *smmu = smmu_domain->smmu;
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
	struct device *dev = smmu->dev;
	void __iomem *cb_base;
	u32 tmp;
	u64 phys;
1351
	unsigned long va;
1352 1353 1354

	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);

1355 1356 1357
	/* ATS1 registers can only be written atomically */
	va = iova & ~0xfffUL;
	if (smmu->version == ARM_SMMU_V2)
1358 1359
		smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
	else /* Register is only 32-bit in v1 */
1360
		writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
1361 1362 1363 1364

	if (readl_poll_timeout_atomic(cb_base + ARM_SMMU_CB_ATSR, tmp,
				      !(tmp & ATSR_ACTIVE), 5, 50)) {
		dev_err(dev,
1365
			"iova to phys timed out on %pad. Falling back to software table walk.\n",
1366 1367 1368 1369
			&iova);
		return ops->iova_to_phys(ops, iova);
	}

1370
	phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1371 1372 1373 1374 1375 1376 1377 1378 1379
	if (phys & CB_PAR_F) {
		dev_err(dev, "translation fault!\n");
		dev_err(dev, "PAR = 0x%llx\n", phys);
		return 0;
	}

	return (phys & GENMASK_ULL(39, 12)) | (iova & 0xfff);
}

1380
static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1381
					dma_addr_t iova)
1382
{
1383 1384
	phys_addr_t ret;
	unsigned long flags;
1385
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1386
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1387

1388
	if (!ops)
1389
		return 0;
1390

1391
	spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1392 1393
	if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
			smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1394
		ret = arm_smmu_iova_to_phys_hard(domain, iova);
1395
	} else {
1396
		ret = ops->iova_to_phys(ops, iova);
1397 1398
	}

1399
	spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1400

1401
	return ret;
1402 1403
}

1404
static bool arm_smmu_capable(enum iommu_cap cap)
1405
{
1406 1407
	switch (cap) {
	case IOMMU_CAP_CACHE_COHERENCY:
1408 1409 1410 1411 1412
		/*
		 * Return true here as the SMMU can always send out coherent
		 * requests.
		 */
		return true;
1413
	case IOMMU_CAP_INTR_REMAP:
1414
		return true; /* MSIs are just memory writes */
1415 1416
	case IOMMU_CAP_NOEXEC:
		return true;
1417
	default:
1418
		return false;
1419
	}
1420 1421
}

1422 1423
static int arm_smmu_match_node(struct device *dev, void *data)
{
1424
	return dev->fwnode == data;
1425 1426
}

1427 1428
static
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
1429 1430
{
	struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
1431
						fwnode, arm_smmu_match_node);
1432 1433 1434 1435
	put_device(dev);
	return dev ? dev_get_drvdata(dev) : NULL;
}

1436
static int arm_smmu_add_device(struct device *dev)
1437
{
1438
	struct arm_smmu_device *smmu;
1439
	struct arm_smmu_master_cfg *cfg;
1440
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1441
	int i, ret;
1442

1443 1444 1445 1446 1447
	if (using_legacy_binding) {
		ret = arm_smmu_register_legacy_master(dev, &smmu);
		fwspec = dev->iommu_fwspec;
		if (ret)
			goto out_free;
1448
	} else if (fwspec && fwspec->ops == &arm_smmu_ops) {
1449
		smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
1450 1451 1452
	} else {
		return -ENODEV;
	}
1453

1454
	ret = -EINVAL;
1455 1456
	for (i = 0; i < fwspec->num_ids; i++) {
		u16 sid = fwspec->ids[i];
1457
		u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1458

1459
		if (sid & ~smmu->streamid_mask) {
1460
			dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1461 1462 1463 1464 1465 1466
				sid, smmu->streamid_mask);
			goto out_free;
		}
		if (mask & ~smmu->smr_mask_mask) {
			dev_err(dev, "SMR mask 0x%x out of range for SMMU (0x%x)\n",
				sid, smmu->smr_mask_mask);
1467 1468
			goto out_free;
		}
1469
	}
1470

1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481
	ret = -ENOMEM;
	cfg = kzalloc(offsetof(struct arm_smmu_master_cfg, smendx[i]),
		      GFP_KERNEL);
	if (!cfg)
		goto out_free;

	cfg->smmu = smmu;
	fwspec->iommu_priv = cfg;
	while (i--)
		cfg->smendx[i] = INVALID_SMENDX;

1482
	ret = arm_smmu_master_alloc_smes(dev);
1483 1484 1485 1486
	if (ret)
		goto out_free;

	return 0;
1487 1488

out_free:
1489 1490 1491
	if (fwspec)
		kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1492
	return ret;
1493 1494
}

1495 1496
static void arm_smmu_remove_device(struct device *dev)
{
1497
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1498

1499
	if (!fwspec || fwspec->ops != &arm_smmu_ops)
1500
		return;
1501

1502
	arm_smmu_master_free_smes(fwspec);
1503
	iommu_group_remove_device(dev);
1504 1505
	kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1506 1507
}

1508 1509
static struct iommu_group *arm_smmu_device_group(struct device *dev)
{
1510 1511
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1512 1513 1514
	struct iommu_group *group = NULL;
	int i, idx;

1515
	for_each_cfg_sme(fwspec, i, idx) {
1516 1517 1518 1519 1520 1521 1522 1523
		if (group && smmu->s2crs[idx].group &&
		    group != smmu->s2crs[idx].group)
			return ERR_PTR(-EINVAL);

		group = smmu->s2crs[idx].group;
	}

	if (group)
1524
		return iommu_group_ref_get(group);
1525 1526 1527 1528 1529 1530 1531 1532 1533

	if (dev_is_pci(dev))
		group = pci_device_group(dev);
	else
		group = generic_device_group(dev);

	return group;
}

1534 1535 1536
static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
				    enum iommu_attr attr, void *data)
{
1537
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550

	switch (attr) {
	case DOMAIN_ATTR_NESTING:
		*(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
		return 0;
	default:
		return -ENODEV;
	}
}

static int arm_smmu_domain_set_attr(struct iommu_domain *domain,
				    enum iommu_attr attr, void *data)
{
1551
	int ret = 0;
1552
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1553

1554 1555
	mutex_lock(&smmu_domain->init_mutex);

1556 1557
	switch (attr) {
	case DOMAIN_ATTR_NESTING:
1558 1559 1560 1561 1562
		if (smmu_domain->smmu) {
			ret = -EPERM;
			goto out_unlock;
		}

1563 1564 1565 1566 1567
		if (*(int *)data)
			smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
		else
			smmu_domain->stage = ARM_SMMU_DOMAIN_S1;

1568
		break;
1569
	default:
1570
		ret = -ENODEV;
1571
	}
1572 1573 1574 1575

out_unlock:
	mutex_unlock(&smmu_domain->init_mutex);
	return ret;
1576 1577
}

1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590
static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
{
	u32 fwid = 0;

	if (args->args_count > 0)
		fwid |= (u16)args->args[0];

	if (args->args_count > 1)
		fwid |= (u16)args->args[1] << SMR_MASK_SHIFT;

	return iommu_fwspec_add_ids(dev, &fwid, 1);
}

1591
static struct iommu_ops arm_smmu_ops = {
1592
	.capable		= arm_smmu_capable,
1593 1594
	.domain_alloc		= arm_smmu_domain_alloc,
	.domain_free		= arm_smmu_domain_free,
1595 1596 1597
	.attach_dev		= arm_smmu_attach_dev,
	.map			= arm_smmu_map,
	.unmap			= arm_smmu_unmap,
1598
	.map_sg			= default_iommu_map_sg,
1599 1600 1601
	.iova_to_phys		= arm_smmu_iova_to_phys,
	.add_device		= arm_smmu_add_device,
	.remove_device		= arm_smmu_remove_device,
1602
	.device_group		= arm_smmu_device_group,
1603 1604
	.domain_get_attr	= arm_smmu_domain_get_attr,
	.domain_set_attr	= arm_smmu_domain_set_attr,
1605
	.of_xlate		= arm_smmu_of_xlate,
1606
	.pgsize_bitmap		= -1UL, /* Restricted during device attach */
1607 1608 1609 1610 1611
};

static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
{
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1612
	void __iomem *cb_base;
1613
	int i;
1614
	u32 reg, major;
1615

1616 1617 1618
	/* clear global FSR */
	reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
	writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sGFSR);
1619

1620 1621 1622 1623
	/*
	 * Reset stream mapping groups: Initial values mark all SMRn as
	 * invalid and all S2CRn as bypass unless overridden.
	 */
1624 1625
	for (i = 0; i < smmu->num_mapping_groups; ++i)
		arm_smmu_write_sme(smmu, i);
1626

1627 1628 1629 1630 1631 1632 1633 1634
	if (smmu->model == ARM_MMU500) {
		/*
		 * Before clearing ARM_MMU500_ACTLR_CPRE, need to
		 * clear CACHE_LOCK bit of ACR first. And, CACHE_LOCK
		 * bit is only present in MMU-500r2 onwards.
		 */
		reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID7);
		major = (reg >> ID7_MAJOR_SHIFT) & ID7_MAJOR_MASK;
1635
		reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
1636 1637 1638 1639 1640 1641 1642
		if (major >= 2)
			reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
		/*
		 * Allow unmatched Stream IDs to allocate bypass
		 * TLB entries for reduced latency.
		 */
		reg |= ARM_MMU500_ACR_SMTNMB_TLBEN;
1643 1644 1645
		writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
	}

1646 1647 1648 1649 1650
	/* Make sure all context banks are disabled and clear CB_FSR  */
	for (i = 0; i < smmu->num_context_banks; ++i) {
		cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
		writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);
		writel_relaxed(FSR_FAULT, cb_base + ARM_SMMU_CB_FSR);
1651 1652 1653 1654 1655 1656 1657 1658 1659
		/*
		 * Disable MMU-500's not-particularly-beneficial next-page
		 * prefetcher for the sake of errata #841119 and #826419.
		 */
		if (smmu->model == ARM_MMU500) {
			reg = readl_relaxed(cb_base + ARM_SMMU_CB_ACTLR);
			reg &= ~ARM_MMU500_ACTLR_CPRE;
			writel_relaxed(reg, cb_base + ARM_SMMU_CB_ACTLR);
		}
1660
	}
1661

1662 1663 1664 1665
	/* Invalidate the TLB, just in case */
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);

1666
	reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1667

1668
	/* Enable fault reporting */
1669
	reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1670 1671

	/* Disable TLB broadcasting. */
1672
	reg |= (sCR0_VMIDPNE | sCR0_PTM);
1673

1674 1675 1676 1677 1678 1679
	/* Enable client access, handling unmatched streams as appropriate */
	reg &= ~sCR0_CLIENTPD;
	if (disable_bypass)
		reg |= sCR0_USFCFG;
	else
		reg &= ~sCR0_USFCFG;
1680 1681

	/* Disable forced broadcasting */
1682
	reg &= ~sCR0_FB;
1683 1684

	/* Don't upgrade barriers */
1685
	reg &= ~(sCR0_BSU_MASK << sCR0_BSU_SHIFT);
1686

1687 1688 1689
	if (smmu->features & ARM_SMMU_FEAT_VMID16)
		reg |= sCR0_VMID16EN;

1690 1691 1692
	if (smmu->features & ARM_SMMU_FEAT_EXIDS)
		reg |= sCR0_EXIDENABLE;

1693
	/* Push the button */
1694
	__arm_smmu_tlb_sync(smmu);
1695
	writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721
}

static int arm_smmu_id_size_to_bits(int size)
{
	switch (size) {
	case 0:
		return 32;
	case 1:
		return 36;
	case 2:
		return 40;
	case 3:
		return 42;
	case 4:
		return 44;
	case 5:
	default:
		return 48;
	}
}

static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu)
{
	unsigned long size;
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
	u32 id;
1722
	bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1723
	int i;
1724 1725

	dev_notice(smmu->dev, "probing hardware configuration...\n");
1726 1727
	dev_notice(smmu->dev, "SMMUv%d with:\n",
			smmu->version == ARM_SMMU_V2 ? 2 : 1);
1728 1729 1730

	/* ID0 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1731 1732 1733 1734 1735 1736 1737

	/* Restrict available stages based on module parameter */
	if (force_stage == 1)
		id &= ~(ID0_S2TS | ID0_NTS);
	else if (force_stage == 2)
		id &= ~(ID0_S1TS | ID0_NTS);

1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753
	if (id & ID0_S1TS) {
		smmu->features |= ARM_SMMU_FEAT_TRANS_S1;
		dev_notice(smmu->dev, "\tstage 1 translation\n");
	}

	if (id & ID0_S2TS) {
		smmu->features |= ARM_SMMU_FEAT_TRANS_S2;
		dev_notice(smmu->dev, "\tstage 2 translation\n");
	}

	if (id & ID0_NTS) {
		smmu->features |= ARM_SMMU_FEAT_TRANS_NESTED;
		dev_notice(smmu->dev, "\tnested translation\n");
	}

	if (!(smmu->features &
1754
		(ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1755 1756 1757 1758
		dev_err(smmu->dev, "\tno translation support!\n");
		return -ENODEV;
	}

1759 1760
	if ((id & ID0_S1TS) &&
		((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
1761 1762 1763 1764
		smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
		dev_notice(smmu->dev, "\taddress translation ops\n");
	}

1765 1766
	/*
	 * In order for DMA API calls to work properly, we must defer to what
1767
	 * the FW says about coherency, regardless of what the hardware claims.
1768 1769 1770 1771
	 * Fortunately, this also opens up a workaround for systems where the
	 * ID register value has ended up configured incorrectly.
	 */
	cttw_reg = !!(id & ID0_CTTW);
1772
	if (cttw_fw || cttw_reg)
1773
		dev_notice(smmu->dev, "\t%scoherent table walk\n",
1774 1775
			   cttw_fw ? "" : "non-");
	if (cttw_fw != cttw_reg)
1776
		dev_notice(smmu->dev,
1777
			   "\t(IDR0.CTTW overridden by FW configuration)\n");
1778

1779
	/* Max. number of entries we have for stream matching/indexing */
1780 1781 1782 1783 1784 1785
	if (smmu->version == ARM_SMMU_V2 && id & ID0_EXIDS) {
		smmu->features |= ARM_SMMU_FEAT_EXIDS;
		size = 1 << 16;
	} else {
		size = 1 << ((id >> ID0_NUMSIDB_SHIFT) & ID0_NUMSIDB_MASK);
	}
1786
	smmu->streamid_mask = size - 1;
1787 1788
	if (id & ID0_SMS) {
		smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1789 1790
		size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
		if (size == 0) {
1791 1792 1793 1794 1795
			dev_err(smmu->dev,
				"stream-matching supported, but no SMRs present!\n");
			return -ENODEV;
		}

1796 1797 1798 1799 1800 1801
		/* Zero-initialised to mark as invalid */
		smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
					  GFP_KERNEL);
		if (!smmu->smrs)
			return -ENOMEM;

1802
		dev_notice(smmu->dev,
1803
			   "\tstream matching with %lu register groups", size);
1804
	}
1805 1806 1807 1808 1809 1810 1811 1812
	/* s2cr->type == 0 means translation, so initialise explicitly */
	smmu->s2crs = devm_kmalloc_array(smmu->dev, size, sizeof(*smmu->s2crs),
					 GFP_KERNEL);
	if (!smmu->s2crs)
		return -ENOMEM;
	for (i = 0; i < size; i++)
		smmu->s2crs[i] = s2cr_init_val;

1813
	smmu->num_mapping_groups = size;
1814
	mutex_init(&smmu->stream_map_mutex);
1815

1816 1817 1818 1819 1820 1821
	if (smmu->version < ARM_SMMU_V2 || !(id & ID0_PTFS_NO_AARCH32)) {
		smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_L;
		if (!(id & ID0_PTFS_NO_AARCH32S))
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH32_S;
	}

1822 1823
	/* ID1 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1824
	smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1825

1826
	/* Check for size mismatch of SMMU address space from mapped region */
1827
	size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
1828
	size *= 2 << smmu->pgshift;
1829
	if (smmu->size != size)
1830 1831 1832
		dev_warn(smmu->dev,
			"SMMU address space size (0x%lx) differs from mapped region size (0x%lx)!\n",
			size, smmu->size);
1833

1834
	smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1835 1836 1837 1838 1839 1840 1841
	smmu->num_context_banks = (id >> ID1_NUMCB_SHIFT) & ID1_NUMCB_MASK;
	if (smmu->num_s2_context_banks > smmu->num_context_banks) {
		dev_err(smmu->dev, "impossible number of S2 context banks!\n");
		return -ENODEV;
	}
	dev_notice(smmu->dev, "\t%u context banks (%u stage-2 only)\n",
		   smmu->num_context_banks, smmu->num_s2_context_banks);
1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852
	/*
	 * Cavium CN88xx erratum #27704.
	 * Ensure ASID and VMID allocation is unique across all SMMUs in
	 * the system.
	 */
	if (smmu->model == CAVIUM_SMMUV2) {
		smmu->cavium_id_base =
			atomic_add_return(smmu->num_context_banks,
					  &cavium_smmu_context_count);
		smmu->cavium_id_base -= smmu->num_context_banks;
	}
1853 1854 1855 1856

	/* ID2 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID2);
	size = arm_smmu_id_size_to_bits((id >> ID2_IAS_SHIFT) & ID2_IAS_MASK);
1857
	smmu->ipa_size = size;
1858

1859
	/* The output mask is also applied for bypass */
1860
	size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1861
	smmu->pa_size = size;
1862

1863 1864 1865
	if (id & ID2_VMID16)
		smmu->features |= ARM_SMMU_FEAT_VMID16;

1866 1867 1868 1869 1870 1871 1872 1873 1874
	/*
	 * What the page table walker can address actually depends on which
	 * descriptor format is in use, but since a) we don't know that yet,
	 * and b) it can vary per context bank, this will have to do...
	 */
	if (dma_set_mask_and_coherent(smmu->dev, DMA_BIT_MASK(size)))
		dev_warn(smmu->dev,
			 "failed to set DMA mask for table walker\n");

1875
	if (smmu->version < ARM_SMMU_V2) {
1876
		smmu->va_size = smmu->ipa_size;
1877 1878
		if (smmu->version == ARM_SMMU_V1_64K)
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1879 1880
	} else {
		size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
1881 1882
		smmu->va_size = arm_smmu_id_size_to_bits(size);
		if (id & ID2_PTFS_4K)
1883
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1884
		if (id & ID2_PTFS_16K)
1885
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1886
		if (id & ID2_PTFS_64K)
1887
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1888 1889
	}

1890 1891
	/* Now we've corralled the various formats, what'll it do? */
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
1892
		smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
1893 1894
	if (smmu->features &
	    (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
1895
		smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
1896
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
1897
		smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
1898
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
1899 1900 1901 1902 1903 1904 1905 1906
		smmu->pgsize_bitmap |= SZ_64K | SZ_512M;

	if (arm_smmu_ops.pgsize_bitmap == -1UL)
		arm_smmu_ops.pgsize_bitmap = smmu->pgsize_bitmap;
	else
		arm_smmu_ops.pgsize_bitmap |= smmu->pgsize_bitmap;
	dev_notice(smmu->dev, "\tSupported page sizes: 0x%08lx\n",
		   smmu->pgsize_bitmap);
1907

1908

1909 1910
	if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
		dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1911
			   smmu->va_size, smmu->ipa_size);
1912 1913 1914

	if (smmu->features & ARM_SMMU_FEAT_TRANS_S2)
		dev_notice(smmu->dev, "\tStage-2: %lu-bit IPA -> %lu-bit PA\n",
1915
			   smmu->ipa_size, smmu->pa_size);
1916

1917 1918 1919
	return 0;
}

1920 1921 1922 1923 1924 1925 1926 1927 1928 1929
struct arm_smmu_match_data {
	enum arm_smmu_arch_version version;
	enum arm_smmu_implementation model;
};

#define ARM_SMMU_MATCH_DATA(name, ver, imp)	\
static struct arm_smmu_match_data name = { .version = ver, .model = imp }

ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU);
ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
1930
ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1931
ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1932
ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1933

1934
static const struct of_device_id arm_smmu_of_match[] = {
1935 1936 1937
	{ .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
	{ .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
	{ .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
1938
	{ .compatible = "arm,mmu-401", .data = &arm_mmu401 },
1939
	{ .compatible = "arm,mmu-500", .data = &arm_mmu500 },
1940
	{ .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
1941 1942 1943 1944
	{ },
};
MODULE_DEVICE_TABLE(of, arm_smmu_of_match);

1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002
#ifdef CONFIG_ACPI
static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
{
	int ret = 0;

	switch (model) {
	case ACPI_IORT_SMMU_V1:
	case ACPI_IORT_SMMU_CORELINK_MMU400:
		smmu->version = ARM_SMMU_V1;
		smmu->model = GENERIC_SMMU;
		break;
	case ACPI_IORT_SMMU_V2:
		smmu->version = ARM_SMMU_V2;
		smmu->model = GENERIC_SMMU;
		break;
	case ACPI_IORT_SMMU_CORELINK_MMU500:
		smmu->version = ARM_SMMU_V2;
		smmu->model = ARM_MMU500;
		break;
	default:
		ret = -ENODEV;
	}

	return ret;
}

static int arm_smmu_device_acpi_probe(struct platform_device *pdev,
				      struct arm_smmu_device *smmu)
{
	struct device *dev = smmu->dev;
	struct acpi_iort_node *node =
		*(struct acpi_iort_node **)dev_get_platdata(dev);
	struct acpi_iort_smmu *iort_smmu;
	int ret;

	/* Retrieve SMMU1/2 specific data */
	iort_smmu = (struct acpi_iort_smmu *)node->node_data;

	ret = acpi_smmu_get_data(iort_smmu->model, smmu);
	if (ret < 0)
		return ret;

	/* Ignore the configuration access interrupt */
	smmu->num_global_irqs = 1;

	if (iort_smmu->flags & ACPI_IORT_SMMU_COHERENT_WALK)
		smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;

	return 0;
}
#else
static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev,
					     struct arm_smmu_device *smmu)
{
	return -ENODEV;
}
#endif

2003 2004
static int arm_smmu_device_dt_probe(struct platform_device *pdev,
				    struct arm_smmu_device *smmu)
2005
{
2006
	const struct arm_smmu_match_data *data;
2007
	struct device *dev = &pdev->dev;
2008 2009
	bool legacy_binding;

2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021
	if (of_property_read_u32(dev->of_node, "#global-interrupts",
				 &smmu->num_global_irqs)) {
		dev_err(dev, "missing #global-interrupts property\n");
		return -ENODEV;
	}

	data = of_device_get_match_data(dev);
	smmu->version = data->version;
	smmu->model = data->model;

	parse_driver_options(smmu);

2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032
	legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
	if (legacy_binding && !using_generic_binding) {
		if (!using_legacy_binding)
			pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
		using_legacy_binding = true;
	} else if (!legacy_binding && !using_legacy_binding) {
		using_generic_binding = true;
	} else {
		dev_err(dev, "not probing due to mismatched DT properties\n");
		return -ENODEV;
	}
2033

2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046
	if (of_dma_is_coherent(dev->of_node))
		smmu->features |= ARM_SMMU_FEAT_COHERENT_WALK;

	return 0;
}

static int arm_smmu_device_probe(struct platform_device *pdev)
{
	struct resource *res;
	struct arm_smmu_device *smmu;
	struct device *dev = &pdev->dev;
	int num_irqs, i, err;

2047 2048 2049 2050 2051 2052 2053
	smmu = devm_kzalloc(dev, sizeof(*smmu), GFP_KERNEL);
	if (!smmu) {
		dev_err(dev, "failed to allocate arm_smmu_device\n");
		return -ENOMEM;
	}
	smmu->dev = dev;

2054 2055 2056 2057 2058
	if (dev->of_node)
		err = arm_smmu_device_dt_probe(pdev, smmu);
	else
		err = arm_smmu_device_acpi_probe(pdev, smmu);

2059 2060
	if (err)
		return err;
2061

2062
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2063 2064 2065
	smmu->base = devm_ioremap_resource(dev, res);
	if (IS_ERR(smmu->base))
		return PTR_ERR(smmu->base);
2066 2067 2068 2069 2070 2071 2072 2073 2074
	smmu->size = resource_size(res);

	num_irqs = 0;
	while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, num_irqs))) {
		num_irqs++;
		if (num_irqs > smmu->num_global_irqs)
			smmu->num_context_irqs++;
	}

2075 2076 2077 2078
	if (!smmu->num_context_irqs) {
		dev_err(dev, "found %d interrupts but expected at least %d\n",
			num_irqs, smmu->num_global_irqs + 1);
		return -ENODEV;
2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089
	}

	smmu->irqs = devm_kzalloc(dev, sizeof(*smmu->irqs) * num_irqs,
				  GFP_KERNEL);
	if (!smmu->irqs) {
		dev_err(dev, "failed to allocate %d irqs\n", num_irqs);
		return -ENOMEM;
	}

	for (i = 0; i < num_irqs; ++i) {
		int irq = platform_get_irq(pdev, i);
2090

2091 2092 2093 2094 2095 2096 2097
		if (irq < 0) {
			dev_err(dev, "failed to get irq index %d\n", i);
			return -ENODEV;
		}
		smmu->irqs[i] = irq;
	}

2098 2099 2100 2101
	err = arm_smmu_device_cfg_probe(smmu);
	if (err)
		return err;

2102
	if (smmu->version == ARM_SMMU_V2 &&
2103 2104 2105 2106
	    smmu->num_context_banks != smmu->num_context_irqs) {
		dev_err(dev,
			"found only %d context interrupt(s) but %d required\n",
			smmu->num_context_irqs, smmu->num_context_banks);
2107
		return -ENODEV;
2108 2109 2110
	}

	for (i = 0; i < smmu->num_global_irqs; ++i) {
2111 2112 2113 2114 2115
		err = devm_request_irq(smmu->dev, smmu->irqs[i],
				       arm_smmu_global_fault,
				       IRQF_SHARED,
				       "arm-smmu global fault",
				       smmu);
2116 2117 2118
		if (err) {
			dev_err(dev, "failed to request global IRQ %d (%u)\n",
				i, smmu->irqs[i]);
2119
			return err;
2120 2121 2122
		}
	}

2123
	iommu_register_instance(dev->fwnode, &arm_smmu_ops);
2124
	platform_set_drvdata(pdev, smmu);
2125
	arm_smmu_device_reset(smmu);
2126
	arm_smmu_test_smr_masks(smmu);
2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140

	/* Oh, for a proper bus abstraction */
	if (!iommu_present(&platform_bus_type))
		bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
#ifdef CONFIG_ARM_AMBA
	if (!iommu_present(&amba_bustype))
		bus_set_iommu(&amba_bustype, &arm_smmu_ops);
#endif
#ifdef CONFIG_PCI
	if (!iommu_present(&pci_bus_type)) {
		pci_request_acs();
		bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
	}
#endif
2141 2142 2143 2144 2145
	return 0;
}

static int arm_smmu_device_remove(struct platform_device *pdev)
{
2146
	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2147 2148 2149 2150

	if (!smmu)
		return -ENODEV;

2151
	if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2152
		dev_err(&pdev->dev, "removing device with active domains!\n");
2153 2154

	/* Turn the thing off */
2155
	writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2156 2157 2158 2159 2160 2161 2162 2163
	return 0;
}

static struct platform_driver arm_smmu_driver = {
	.driver	= {
		.name		= "arm-smmu",
		.of_match_table	= of_match_ptr(arm_smmu_of_match),
	},
2164
	.probe	= arm_smmu_device_probe,
2165 2166 2167 2168 2169
	.remove	= arm_smmu_device_remove,
};

static int __init arm_smmu_init(void)
{
2170 2171
	static bool registered;
	int ret = 0;
2172

2173 2174 2175
	if (!registered) {
		ret = platform_driver_register(&arm_smmu_driver);
		registered = !ret;
2176
	}
2177
	return ret;
2178 2179 2180 2181 2182 2183 2184
}

static void __exit arm_smmu_exit(void)
{
	return platform_driver_unregister(&arm_smmu_driver);
}

2185
subsys_initcall(arm_smmu_init);
2186 2187
module_exit(arm_smmu_exit);

2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206
static int __init arm_smmu_of_init(struct device_node *np)
{
	int ret = arm_smmu_init();

	if (ret)
		return ret;

	if (!of_platform_device_create(np, NULL, platform_bus_type.dev_root))
		return -ENODEV;

	return 0;
}
IOMMU_OF_DECLARE(arm_smmuv1, "arm,smmu-v1", arm_smmu_of_init);
IOMMU_OF_DECLARE(arm_smmuv2, "arm,smmu-v2", arm_smmu_of_init);
IOMMU_OF_DECLARE(arm_mmu400, "arm,mmu-400", arm_smmu_of_init);
IOMMU_OF_DECLARE(arm_mmu401, "arm,mmu-401", arm_smmu_of_init);
IOMMU_OF_DECLARE(arm_mmu500, "arm,mmu-500", arm_smmu_of_init);
IOMMU_OF_DECLARE(cavium_smmuv2, "cavium,smmu-v2", arm_smmu_of_init);

2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217
#ifdef CONFIG_ACPI
static int __init arm_smmu_acpi_init(struct acpi_table_header *table)
{
	if (iort_node_match(ACPI_IORT_NODE_SMMU))
		return arm_smmu_init();

	return 0;
}
IORT_ACPI_DECLARE(arm_smmu, ACPI_SIG_IORT, arm_smmu_acpi_init);
#endif

2218 2219 2220
MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
MODULE_AUTHOR("Will Deacon <will.deacon@arm.com>");
MODULE_LICENSE("GPL v2");