arm-smmu.c 61.4 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 290 291
#define MSI_IOVA_BASE			0x8000000
#define MSI_IOVA_LENGTH			0x100000

292
static int force_stage;
293
module_param(force_stage, int, S_IRUGO);
294 295
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.");
296 297 298 299
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.");
300

301
enum arm_smmu_arch_version {
302 303
	ARM_SMMU_V1,
	ARM_SMMU_V1_64K,
304 305 306
	ARM_SMMU_V2,
};

307 308
enum arm_smmu_implementation {
	GENERIC_SMMU,
309
	ARM_MMU500,
310
	CAVIUM_SMMUV2,
311 312
};

313
struct arm_smmu_s2cr {
314 315
	struct iommu_group		*group;
	int				count;
316 317 318 319 320 321 322 323 324
	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,	\
}

325 326 327
struct arm_smmu_smr {
	u16				mask;
	u16				id;
328
	bool				valid;
329 330
};

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

struct arm_smmu_device {
	struct device			*dev;

	void __iomem			*base;
	unsigned long			size;
348
	unsigned long			pgshift;
349 350 351 352 353 354

#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)
355
#define ARM_SMMU_FEAT_TRANS_OPS		(1 << 5)
356
#define ARM_SMMU_FEAT_VMID16		(1 << 6)
357 358 359 360 361
#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)
362
#define ARM_SMMU_FEAT_EXIDS		(1 << 12)
363
	u32				features;
364 365 366

#define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
	u32				options;
367
	enum arm_smmu_arch_version	version;
368
	enum arm_smmu_implementation	model;
369 370 371 372 373 374 375

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

	u32				num_mapping_groups;
376 377
	u16				streamid_mask;
	u16				smr_mask_mask;
378
	struct arm_smmu_smr		*smrs;
379
	struct arm_smmu_s2cr		*s2crs;
380
	struct mutex			stream_map_mutex;
381

382 383 384
	unsigned long			va_size;
	unsigned long			ipa_size;
	unsigned long			pa_size;
385
	unsigned long			pgsize_bitmap;
386 387 388 389 390

	u32				num_global_irqs;
	u32				num_context_irqs;
	unsigned int			*irqs;

391
	u32				cavium_id_base; /* Specific to Cavium */
392 393 394

	/* IOMMU core code handle */
	struct iommu_device		iommu;
395 396
};

397 398 399 400 401
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,
402 403 404 405 406 407
};

struct arm_smmu_cfg {
	u8				cbndx;
	u8				irptndx;
	u32				cbar;
408
	enum arm_smmu_context_fmt	fmt;
409
};
410
#define INVALID_IRPTNDX			0xff
411

412 413
#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)
414

415 416 417 418 419 420
enum arm_smmu_domain_stage {
	ARM_SMMU_DOMAIN_S1 = 0,
	ARM_SMMU_DOMAIN_S2,
	ARM_SMMU_DOMAIN_NESTED,
};

421
struct arm_smmu_domain {
422
	struct arm_smmu_device		*smmu;
423 424
	struct io_pgtable_ops		*pgtbl_ops;
	spinlock_t			pgtbl_lock;
425
	struct arm_smmu_cfg		cfg;
426
	enum arm_smmu_domain_stage	stage;
427
	struct mutex			init_mutex; /* Protects smmu pointer */
428
	struct iommu_domain		domain;
429 430
};

431 432 433 434 435
struct arm_smmu_option_prop {
	u32 opt;
	const char *prop;
};

436 437
static atomic_t cavium_smmu_context_count = ATOMIC_INIT(0);

438 439
static bool using_legacy_binding, using_generic_binding;

440
static struct arm_smmu_option_prop arm_smmu_options[] = {
441 442 443 444
	{ ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
	{ 0, NULL},
};

445 446 447 448 449
static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
{
	return container_of(dom, struct arm_smmu_domain, domain);
}

450 451 452
static void parse_driver_options(struct arm_smmu_device *smmu)
{
	int i = 0;
453

454 455 456 457 458 459 460 461 462 463
	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);
}

464
static struct device_node *dev_get_dev_node(struct device *dev)
465 466 467
{
	if (dev_is_pci(dev)) {
		struct pci_bus *bus = to_pci_dev(dev)->bus;
468

469 470
		while (!pci_is_root_bus(bus))
			bus = bus->parent;
471
		return of_node_get(bus->bridge->parent->of_node);
472 473
	}

474
	return of_node_get(dev->of_node);
475 476
}

477
static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *data)
478
{
479 480
	*((__be32 *)data) = cpu_to_be32(alias);
	return 0; /* Continue walking */
481 482
}

483
static int __find_legacy_master_phandle(struct device *dev, void *data)
484
{
485 486 487 488 489 490 491 492 493 494 495 496
	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;
497 498
}

499
static struct platform_driver arm_smmu_driver;
500
static struct iommu_ops arm_smmu_ops;
501

502 503
static int arm_smmu_register_legacy_master(struct device *dev,
					   struct arm_smmu_device **smmu)
504
{
505
	struct device *smmu_dev;
506 507 508
	struct device_node *np;
	struct of_phandle_iterator it;
	void *data = &it;
509
	u32 *sids;
510 511
	__be32 pci_sid;
	int err;
512

513 514 515 516 517
	np = dev_get_dev_node(dev);
	if (!np || !of_find_property(np, "#stream-id-cells", NULL)) {
		of_node_put(np);
		return -ENODEV;
	}
518

519
	it.node = np;
520 521
	err = driver_for_each_device(&arm_smmu_driver.driver, NULL, &data,
				     __find_legacy_master_phandle);
522
	smmu_dev = data;
523 524 525 526 527
	of_node_put(np);
	if (err == 0)
		return -ENODEV;
	if (err < 0)
		return err;
528

529 530 531 532 533 534 535
	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;
	}
536

537 538 539 540
	err = iommu_fwspec_init(dev, &smmu_dev->of_node->fwnode,
				&arm_smmu_ops);
	if (err)
		return err;
541

542 543 544
	sids = kcalloc(it.cur_count, sizeof(*sids), GFP_KERNEL);
	if (!sids)
		return -ENOMEM;
545

546 547 548 549 550
	*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;
551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571
}

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 */
572
static void __arm_smmu_tlb_sync(struct arm_smmu_device *smmu)
573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
{
	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);
	}
}

590 591 592 593 594 595 596
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)
597
{
598
	struct arm_smmu_domain *smmu_domain = cookie;
599 600
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
601
	bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
602
	void __iomem *base;
603 604 605

	if (stage1) {
		base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
606
		writel_relaxed(ARM_SMMU_CB_ASID(smmu, cfg),
607
			       base + ARM_SMMU_CB_S1_TLBIASID);
608 609
	} else {
		base = ARM_SMMU_GR0(smmu);
610
		writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg),
611
			       base + ARM_SMMU_GR0_TLBIVMID);
612 613
	}

614 615 616 617
	__arm_smmu_tlb_sync(smmu);
}

static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
618
					  size_t granule, bool leaf, void *cookie)
619 620 621 622 623 624 625 626 627 628 629
{
	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;

630
		if (cfg->fmt != ARM_SMMU_CTX_FMT_AARCH64) {
631
			iova &= ~12UL;
632
			iova |= ARM_SMMU_CB_ASID(smmu, cfg);
633 634 635 636
			do {
				writel_relaxed(iova, reg);
				iova += granule;
			} while (size -= granule);
637 638
		} else {
			iova >>= 12;
639
			iova |= (u64)ARM_SMMU_CB_ASID(smmu, cfg) << 48;
640 641 642 643
			do {
				writeq_relaxed(iova, reg);
				iova += granule >> 12;
			} while (size -= granule);
644 645 646 647 648
		}
	} 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;
649 650
		iova >>= 12;
		do {
651
			smmu_write_atomic_lq(iova, reg);
652 653
			iova += granule >> 12;
		} while (size -= granule);
654 655
	} else {
		reg = ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_TLBIVMID;
656
		writel_relaxed(ARM_SMMU_CB_VMID(smmu, cfg), reg);
657 658 659
	}
}

660
static const struct iommu_gather_ops arm_smmu_gather_ops = {
661 662 663 664 665
	.tlb_flush_all	= arm_smmu_tlb_inv_context,
	.tlb_add_flush	= arm_smmu_tlb_inv_range_nosync,
	.tlb_sync	= arm_smmu_tlb_sync,
};

666 667
static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
{
668
	u32 fsr, fsynr;
669 670
	unsigned long iova;
	struct iommu_domain *domain = dev;
671
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
672 673
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
674 675
	void __iomem *cb_base;

676
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
677 678 679 680 681 682
	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);
683
	iova = readq_relaxed(cb_base + ARM_SMMU_CB_FAR);
684

685 686 687
	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);
688

689 690
	writel(fsr, cb_base + ARM_SMMU_CB_FSR);
	return IRQ_HANDLED;
691 692 693 694 695 696
}

static irqreturn_t arm_smmu_global_fault(int irq, void *dev)
{
	u32 gfsr, gfsynr0, gfsynr1, gfsynr2;
	struct arm_smmu_device *smmu = dev;
697
	void __iomem *gr0_base = ARM_SMMU_GR0_NS(smmu);
698 699 700 701 702 703

	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);

704 705 706
	if (!gfsr)
		return IRQ_NONE;

707 708 709 710 711 712 713
	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);
714
	return IRQ_HANDLED;
715 716
}

717 718
static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
				       struct io_pgtable_cfg *pgtbl_cfg)
719
{
720
	u32 reg, reg2;
721
	u64 reg64;
722
	bool stage1;
723 724
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
	struct arm_smmu_device *smmu = smmu_domain->smmu;
725
	void __iomem *cb_base, *gr1_base;
726 727

	gr1_base = ARM_SMMU_GR1(smmu);
728 729
	stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
730

731
	if (smmu->version > ARM_SMMU_V1) {
732 733 734 735
		if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
			reg = CBA2R_RW64_64BIT;
		else
			reg = CBA2R_RW64_32BIT;
736 737
		/* 16-bit VMIDs live in CBA2R */
		if (smmu->features & ARM_SMMU_FEAT_VMID16)
738
			reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBA2R_VMID_SHIFT;
739

740 741 742
		writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBA2R(cfg->cbndx));
	}

743
	/* CBAR */
744
	reg = cfg->cbar;
745
	if (smmu->version < ARM_SMMU_V2)
746
		reg |= cfg->irptndx << CBAR_IRPTNDX_SHIFT;
747

748 749 750 751 752 753 754
	/*
	 * 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);
755 756
	} else if (!(smmu->features & ARM_SMMU_FEAT_VMID16)) {
		/* 8-bit VMIDs live in CBAR */
757
		reg |= ARM_SMMU_CB_VMID(smmu, cfg) << CBAR_VMID_SHIFT;
758
	}
759
	writel_relaxed(reg, gr1_base + ARM_SMMU_GR1_CBAR(cfg->cbndx));
760

761 762
	/* TTBRs */
	if (stage1) {
763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778
		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);
		}
779
	} else {
780
		reg64 = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
781
		writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
782
	}
783

784 785
	/* TTBCR */
	if (stage1) {
786 787 788 789 790 791 792
		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;
793 794
			if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
				reg2 |= TTBCR2_AS;
795
		}
796 797
		if (smmu->version > ARM_SMMU_V1)
			writel_relaxed(reg2, cb_base + ARM_SMMU_CB_TTBCR2);
798
	} else {
799
		reg = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
800
	}
801
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
802

803
	/* MAIRs (stage-1 only) */
804
	if (stage1) {
805 806 807 808 809 810 811
		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];
		}
812
		writel_relaxed(reg, cb_base + ARM_SMMU_CB_S1_MAIR0);
813
		writel_relaxed(reg2, cb_base + ARM_SMMU_CB_S1_MAIR1);
814 815 816
	}

	/* SCTLR */
817
	reg = SCTLR_CFIE | SCTLR_CFRE | SCTLR_AFE | SCTLR_TRE | SCTLR_M;
818 819 820 821 822
	if (stage1)
		reg |= SCTLR_S1_ASIDPNE;
#ifdef __BIG_ENDIAN
	reg |= SCTLR_E;
#endif
823
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
824 825 826
}

static int arm_smmu_init_domain_context(struct iommu_domain *domain,
827
					struct arm_smmu_device *smmu)
828
{
829
	int irq, start, ret = 0;
830 831 832 833
	unsigned long ias, oas;
	struct io_pgtable_ops *pgtbl_ops;
	struct io_pgtable_cfg pgtbl_cfg;
	enum io_pgtable_fmt fmt;
834
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
835
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
836

837
	mutex_lock(&smmu_domain->init_mutex);
838 839 840
	if (smmu_domain->smmu)
		goto out_unlock;

841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863
	/*
	 * 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;

864 865 866 867 868 869 870 871 872 873
	/*
	 * 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;
874 875 876 877 878
	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;
879 880 881 882 883 884 885 886 887 888 889
	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;
	}

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

	ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
				      smmu->num_context_banks);
933
	if (ret < 0)
934
		goto out_unlock;
935

936
	cfg->cbndx = ret;
937
	if (smmu->version < ARM_SMMU_V2) {
938 939
		cfg->irptndx = atomic_inc_return(&smmu->irptndx);
		cfg->irptndx %= smmu->num_context_irqs;
940
	} else {
941
		cfg->irptndx = cfg->cbndx;
942 943
	}

944
	pgtbl_cfg = (struct io_pgtable_cfg) {
945
		.pgsize_bitmap	= smmu->pgsize_bitmap,
946 947 948
		.ias		= ias,
		.oas		= oas,
		.tlb		= &arm_smmu_gather_ops,
949
		.iommu_dev	= smmu->dev,
950 951 952 953 954 955 956 957 958
	};

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

959 960
	/* Update the domain's page sizes to reflect the page table format */
	domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
961 962
	domain->geometry.aperture_end = (1UL << ias) - 1;
	domain->geometry.force_aperture = true;
963

964 965 966 967 968 969 970
	/* 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.
	 */
971
	irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
972 973
	ret = devm_request_irq(smmu->dev, irq, arm_smmu_context_fault,
			       IRQF_SHARED, "arm-smmu-context-fault", domain);
974
	if (ret < 0) {
975
		dev_err(smmu->dev, "failed to request context IRQ %d (%u)\n",
976 977
			cfg->irptndx, irq);
		cfg->irptndx = INVALID_IRPTNDX;
978 979
	}

980 981 982 983
	mutex_unlock(&smmu_domain->init_mutex);

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

986 987
out_clear_smmu:
	smmu_domain->smmu = NULL;
988
out_unlock:
989
	mutex_unlock(&smmu_domain->init_mutex);
990 991 992 993 994
	return ret;
}

static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
{
995
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
996 997
	struct arm_smmu_device *smmu = smmu_domain->smmu;
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
998
	void __iomem *cb_base;
999 1000
	int irq;

1001
	if (!smmu)
1002 1003
		return;

1004 1005 1006 1007
	/*
	 * Disable the context bank and free the page tables before freeing
	 * it.
	 */
1008
	cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, cfg->cbndx);
1009 1010
	writel_relaxed(0, cb_base + ARM_SMMU_CB_SCTLR);

1011 1012
	if (cfg->irptndx != INVALID_IRPTNDX) {
		irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
1013
		devm_free_irq(smmu->dev, irq, domain);
1014 1015
	}

1016
	free_io_pgtable_ops(smmu_domain->pgtbl_ops);
1017
	__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
1018 1019
}

1020
static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
1021 1022 1023
{
	struct arm_smmu_domain *smmu_domain;

1024
	if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1025
		return NULL;
1026 1027 1028 1029 1030 1031 1032
	/*
	 * 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)
1033
		return NULL;
1034

1035 1036
	if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
	    iommu_get_dma_cookie(&smmu_domain->domain))) {
1037 1038 1039 1040
		kfree(smmu_domain);
		return NULL;
	}

1041 1042
	mutex_init(&smmu_domain->init_mutex);
	spin_lock_init(&smmu_domain->pgtbl_lock);
1043 1044

	return &smmu_domain->domain;
1045 1046
}

1047
static void arm_smmu_domain_free(struct iommu_domain *domain)
1048
{
1049
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1050 1051 1052 1053 1054

	/*
	 * Free the domain resources. We assume that all devices have
	 * already been detached.
	 */
1055
	iommu_put_dma_cookie(domain);
1056 1057 1058 1059
	arm_smmu_destroy_domain_context(domain);
	kfree(smmu_domain);
}

1060 1061 1062
static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
{
	struct arm_smmu_smr *smr = smmu->smrs + idx;
1063
	u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1064

1065
	if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
1066 1067 1068 1069
		reg |= SMR_VALID;
	writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
}

1070 1071 1072 1073 1074 1075 1076
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;

1077 1078 1079
	if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
	    smmu->smrs[idx].valid)
		reg |= S2CR_EXIDVALID;
1080 1081 1082 1083 1084 1085 1086 1087 1088 1089
	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);
}

1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117
/*
 * 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;
}

1118
static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1119 1120
{
	struct arm_smmu_smr *smrs = smmu->smrs;
1121
	int i, free_idx = -ENOSPC;
1122

1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
	/* 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;
1136 1137
			continue;
		}
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155
		/*
		 * 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;
	}
1156

1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173
	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)
{
1174 1175
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1176 1177 1178 1179 1180 1181 1182
	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 */
1183
	for_each_cfg_sme(fwspec, i, idx) {
1184 1185 1186
		u16 sid = fwspec->ids[i];
		u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;

1187 1188 1189
		if (idx != INVALID_SMENDX) {
			ret = -EEXIST;
			goto out_err;
1190 1191
		}

1192
		ret = arm_smmu_find_sme(smmu, sid, mask);
1193 1194 1195 1196 1197
		if (ret < 0)
			goto out_err;

		idx = ret;
		if (smrs && smmu->s2crs[idx].count == 0) {
1198 1199
			smrs[idx].id = sid;
			smrs[idx].mask = mask;
1200 1201 1202 1203
			smrs[idx].valid = true;
		}
		smmu->s2crs[idx].count++;
		cfg->smendx[i] = (s16)idx;
1204 1205
	}

1206 1207 1208 1209 1210 1211 1212 1213
	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);
1214

1215
	/* It worked! Now, poke the actual hardware */
1216
	for_each_cfg_sme(fwspec, i, idx) {
1217 1218 1219
		arm_smmu_write_sme(smmu, idx);
		smmu->s2crs[idx].group = group;
	}
1220

1221
	mutex_unlock(&smmu->stream_map_mutex);
1222 1223
	return 0;

1224
out_err:
1225
	while (i--) {
1226
		arm_smmu_free_sme(smmu, cfg->smendx[i]);
1227 1228
		cfg->smendx[i] = INVALID_SMENDX;
	}
1229 1230
	mutex_unlock(&smmu->stream_map_mutex);
	return ret;
1231 1232
}

1233
static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1234
{
1235 1236
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
	struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1237
	int i, idx;
1238

1239
	mutex_lock(&smmu->stream_map_mutex);
1240
	for_each_cfg_sme(fwspec, i, idx) {
1241 1242
		if (arm_smmu_free_sme(smmu, idx))
			arm_smmu_write_sme(smmu, idx);
1243
		cfg->smendx[i] = INVALID_SMENDX;
1244
	}
1245
	mutex_unlock(&smmu->stream_map_mutex);
1246 1247 1248
}

static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
1249
				      struct iommu_fwspec *fwspec)
1250
{
1251
	struct arm_smmu_device *smmu = smmu_domain->smmu;
1252 1253 1254
	struct arm_smmu_s2cr *s2cr = smmu->s2crs;
	enum arm_smmu_s2cr_type type = S2CR_TYPE_TRANS;
	u8 cbndx = smmu_domain->cfg.cbndx;
1255
	int i, idx;
1256

1257
	for_each_cfg_sme(fwspec, i, idx) {
1258
		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1259
			continue;
1260

1261
		s2cr[idx].type = type;
1262
		s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
1263 1264
		s2cr[idx].cbndx = cbndx;
		arm_smmu_write_s2cr(smmu, idx);
1265
	}
1266
	return 0;
1267 1268
}

1269 1270
static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
{
1271
	int ret;
1272 1273
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu;
1274
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1275

1276
	if (!fwspec || fwspec->ops != &arm_smmu_ops) {
1277 1278 1279 1280
		dev_err(dev, "cannot attach to SMMU, is it on the same bus?\n");
		return -ENXIO;
	}

1281 1282 1283 1284 1285 1286 1287 1288 1289 1290
	/*
	 * 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;

1291
	smmu = fwspec_smmu(fwspec);
1292
	/* Ensure that the domain is finalised */
1293
	ret = arm_smmu_init_domain_context(domain, smmu);
1294
	if (ret < 0)
1295 1296
		return ret;

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

	/* Looks ok, so add the device to the domain */
1309
	return arm_smmu_domain_add_master(smmu_domain, fwspec);
1310 1311 1312
}

static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
1313
			phys_addr_t paddr, size_t size, int prot)
1314
{
1315 1316
	int ret;
	unsigned long flags;
1317
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1318
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1319

1320
	if (!ops)
1321 1322
		return -ENODEV;

1323 1324 1325 1326
	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;
1327 1328 1329 1330 1331
}

static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
			     size_t size)
{
1332 1333
	size_t ret;
	unsigned long flags;
1334
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1335
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1336

1337 1338 1339 1340 1341 1342 1343
	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;
1344 1345
}

1346 1347 1348
static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,
					      dma_addr_t iova)
{
1349
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1350 1351 1352 1353 1354 1355 1356
	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;
1357
	unsigned long va;
1358 1359 1360

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

1361 1362 1363
	/* ATS1 registers can only be written atomically */
	va = iova & ~0xfffUL;
	if (smmu->version == ARM_SMMU_V2)
1364 1365
		smmu_write_atomic_lq(va, cb_base + ARM_SMMU_CB_ATS1PR);
	else /* Register is only 32-bit in v1 */
1366
		writel_relaxed(va, cb_base + ARM_SMMU_CB_ATS1PR);
1367 1368 1369 1370

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

1376
	phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1377 1378 1379 1380 1381 1382 1383 1384 1385
	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);
}

1386
static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1387
					dma_addr_t iova)
1388
{
1389 1390
	phys_addr_t ret;
	unsigned long flags;
1391
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1392
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1393

1394
	if (!ops)
1395
		return 0;
1396

1397
	spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1398 1399
	if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
			smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1400
		ret = arm_smmu_iova_to_phys_hard(domain, iova);
1401
	} else {
1402
		ret = ops->iova_to_phys(ops, iova);
1403 1404
	}

1405
	spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1406

1407
	return ret;
1408 1409
}

1410
static bool arm_smmu_capable(enum iommu_cap cap)
1411
{
1412 1413
	switch (cap) {
	case IOMMU_CAP_CACHE_COHERENCY:
1414 1415 1416 1417 1418
		/*
		 * Return true here as the SMMU can always send out coherent
		 * requests.
		 */
		return true;
1419 1420
	case IOMMU_CAP_NOEXEC:
		return true;
1421
	default:
1422
		return false;
1423
	}
1424 1425
}

1426 1427
static int arm_smmu_match_node(struct device *dev, void *data)
{
1428
	return dev->fwnode == data;
1429 1430
}

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

1440
static int arm_smmu_add_device(struct device *dev)
1441
{
1442
	struct arm_smmu_device *smmu;
1443
	struct arm_smmu_master_cfg *cfg;
1444
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1445
	int i, ret;
1446

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

1458
	ret = -EINVAL;
1459 1460
	for (i = 0; i < fwspec->num_ids; i++) {
		u16 sid = fwspec->ids[i];
1461
		u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1462

1463
		if (sid & ~smmu->streamid_mask) {
1464
			dev_err(dev, "stream ID 0x%x out of range for SMMU (0x%x)\n",
1465 1466 1467 1468 1469 1470
				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);
1471 1472
			goto out_free;
		}
1473
	}
1474

1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485
	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;

1486
	ret = arm_smmu_master_alloc_smes(dev);
1487 1488 1489
	if (ret)
		goto out_free;

1490 1491
	iommu_device_link(&smmu->iommu, dev);

1492
	return 0;
1493 1494

out_free:
1495 1496 1497
	if (fwspec)
		kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1498
	return ret;
1499 1500
}

1501 1502
static void arm_smmu_remove_device(struct device *dev)
{
1503
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1504 1505 1506
	struct arm_smmu_master_cfg *cfg;
	struct arm_smmu_device *smmu;

1507

1508
	if (!fwspec || fwspec->ops != &arm_smmu_ops)
1509
		return;
1510

1511 1512 1513 1514
	cfg  = fwspec->iommu_priv;
	smmu = cfg->smmu;

	iommu_device_unlink(&smmu->iommu, dev);
1515
	arm_smmu_master_free_smes(fwspec);
1516
	iommu_group_remove_device(dev);
1517 1518
	kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1519 1520
}

1521 1522
static struct iommu_group *arm_smmu_device_group(struct device *dev)
{
1523 1524
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1525 1526 1527
	struct iommu_group *group = NULL;
	int i, idx;

1528
	for_each_cfg_sme(fwspec, i, idx) {
1529 1530 1531 1532 1533 1534 1535 1536
		if (group && smmu->s2crs[idx].group &&
		    group != smmu->s2crs[idx].group)
			return ERR_PTR(-EINVAL);

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

	if (group)
1537
		return iommu_group_ref_get(group);
1538 1539 1540 1541 1542 1543 1544 1545 1546

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

	return group;
}

1547 1548 1549
static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
				    enum iommu_attr attr, void *data)
{
1550
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563

	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)
{
1564
	int ret = 0;
1565
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1566

1567 1568
	mutex_lock(&smmu_domain->init_mutex);

1569 1570
	switch (attr) {
	case DOMAIN_ATTR_NESTING:
1571 1572 1573 1574 1575
		if (smmu_domain->smmu) {
			ret = -EPERM;
			goto out_unlock;
		}

1576 1577 1578 1579 1580
		if (*(int *)data)
			smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
		else
			smmu_domain->stage = ARM_SMMU_DOMAIN_S1;

1581
		break;
1582
	default:
1583
		ret = -ENODEV;
1584
	}
1585 1586 1587 1588

out_unlock:
	mutex_unlock(&smmu_domain->init_mutex);
	return ret;
1589 1590
}

1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603
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);
}

1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626
static void arm_smmu_get_resv_regions(struct device *dev,
				      struct list_head *head)
{
	struct iommu_resv_region *region;
	int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;

	region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
					 prot, IOMMU_RESV_MSI);
	if (!region)
		return;

	list_add_tail(&region->list, head);
}

static void arm_smmu_put_resv_regions(struct device *dev,
				      struct list_head *head)
{
	struct iommu_resv_region *entry, *next;

	list_for_each_entry_safe(entry, next, head, list)
		kfree(entry);
}

1627
static struct iommu_ops arm_smmu_ops = {
1628
	.capable		= arm_smmu_capable,
1629 1630
	.domain_alloc		= arm_smmu_domain_alloc,
	.domain_free		= arm_smmu_domain_free,
1631 1632 1633
	.attach_dev		= arm_smmu_attach_dev,
	.map			= arm_smmu_map,
	.unmap			= arm_smmu_unmap,
1634
	.map_sg			= default_iommu_map_sg,
1635 1636 1637
	.iova_to_phys		= arm_smmu_iova_to_phys,
	.add_device		= arm_smmu_add_device,
	.remove_device		= arm_smmu_remove_device,
1638
	.device_group		= arm_smmu_device_group,
1639 1640
	.domain_get_attr	= arm_smmu_domain_get_attr,
	.domain_set_attr	= arm_smmu_domain_set_attr,
1641
	.of_xlate		= arm_smmu_of_xlate,
1642 1643
	.get_resv_regions	= arm_smmu_get_resv_regions,
	.put_resv_regions	= arm_smmu_put_resv_regions,
1644
	.pgsize_bitmap		= -1UL, /* Restricted during device attach */
1645 1646 1647 1648 1649
};

static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
{
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1650
	void __iomem *cb_base;
1651
	int i;
1652
	u32 reg, major;
1653

1654 1655 1656
	/* 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);
1657

1658 1659 1660 1661
	/*
	 * Reset stream mapping groups: Initial values mark all SMRn as
	 * invalid and all S2CRn as bypass unless overridden.
	 */
1662 1663
	for (i = 0; i < smmu->num_mapping_groups; ++i)
		arm_smmu_write_sme(smmu, i);
1664

1665 1666 1667 1668 1669 1670 1671 1672
	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;
1673
		reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
1674 1675 1676 1677 1678 1679 1680
		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;
1681 1682 1683
		writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
	}

1684 1685 1686 1687 1688
	/* 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);
1689 1690 1691 1692 1693 1694 1695 1696 1697
		/*
		 * 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);
		}
1698
	}
1699

1700 1701 1702 1703
	/* Invalidate the TLB, just in case */
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);

1704
	reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1705

1706
	/* Enable fault reporting */
1707
	reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1708 1709

	/* Disable TLB broadcasting. */
1710
	reg |= (sCR0_VMIDPNE | sCR0_PTM);
1711

1712 1713 1714 1715 1716 1717
	/* Enable client access, handling unmatched streams as appropriate */
	reg &= ~sCR0_CLIENTPD;
	if (disable_bypass)
		reg |= sCR0_USFCFG;
	else
		reg &= ~sCR0_USFCFG;
1718 1719

	/* Disable forced broadcasting */
1720
	reg &= ~sCR0_FB;
1721 1722

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

1725 1726 1727
	if (smmu->features & ARM_SMMU_FEAT_VMID16)
		reg |= sCR0_VMID16EN;

1728 1729 1730
	if (smmu->features & ARM_SMMU_FEAT_EXIDS)
		reg |= sCR0_EXIDENABLE;

1731
	/* Push the button */
1732
	__arm_smmu_tlb_sync(smmu);
1733
	writel(reg, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759
}

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;
1760
	bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1761
	int i;
1762 1763

	dev_notice(smmu->dev, "probing hardware configuration...\n");
1764 1765
	dev_notice(smmu->dev, "SMMUv%d with:\n",
			smmu->version == ARM_SMMU_V2 ? 2 : 1);
1766 1767 1768

	/* ID0 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1769 1770 1771 1772 1773 1774 1775

	/* 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);

1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791
	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 &
1792
		(ARM_SMMU_FEAT_TRANS_S1 | ARM_SMMU_FEAT_TRANS_S2))) {
1793 1794 1795 1796
		dev_err(smmu->dev, "\tno translation support!\n");
		return -ENODEV;
	}

1797 1798
	if ((id & ID0_S1TS) &&
		((smmu->version < ARM_SMMU_V2) || !(id & ID0_ATOSNS))) {
1799 1800 1801 1802
		smmu->features |= ARM_SMMU_FEAT_TRANS_OPS;
		dev_notice(smmu->dev, "\taddress translation ops\n");
	}

1803 1804
	/*
	 * In order for DMA API calls to work properly, we must defer to what
1805
	 * the FW says about coherency, regardless of what the hardware claims.
1806 1807 1808 1809
	 * Fortunately, this also opens up a workaround for systems where the
	 * ID register value has ended up configured incorrectly.
	 */
	cttw_reg = !!(id & ID0_CTTW);
1810
	if (cttw_fw || cttw_reg)
1811
		dev_notice(smmu->dev, "\t%scoherent table walk\n",
1812 1813
			   cttw_fw ? "" : "non-");
	if (cttw_fw != cttw_reg)
1814
		dev_notice(smmu->dev,
1815
			   "\t(IDR0.CTTW overridden by FW configuration)\n");
1816

1817
	/* Max. number of entries we have for stream matching/indexing */
1818 1819 1820 1821 1822 1823
	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);
	}
1824
	smmu->streamid_mask = size - 1;
1825 1826
	if (id & ID0_SMS) {
		smmu->features |= ARM_SMMU_FEAT_STREAM_MATCH;
1827 1828
		size = (id >> ID0_NUMSMRG_SHIFT) & ID0_NUMSMRG_MASK;
		if (size == 0) {
1829 1830 1831 1832 1833
			dev_err(smmu->dev,
				"stream-matching supported, but no SMRs present!\n");
			return -ENODEV;
		}

1834 1835 1836 1837 1838 1839
		/* Zero-initialised to mark as invalid */
		smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
					  GFP_KERNEL);
		if (!smmu->smrs)
			return -ENOMEM;

1840
		dev_notice(smmu->dev,
1841
			   "\tstream matching with %lu register groups", size);
1842
	}
1843 1844 1845 1846 1847 1848 1849 1850
	/* 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;

1851
	smmu->num_mapping_groups = size;
1852
	mutex_init(&smmu->stream_map_mutex);
1853

1854 1855 1856 1857 1858 1859
	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;
	}

1860 1861
	/* ID1 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1862
	smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1863

1864
	/* Check for size mismatch of SMMU address space from mapped region */
1865
	size = 1 << (((id >> ID1_NUMPAGENDXB_SHIFT) & ID1_NUMPAGENDXB_MASK) + 1);
1866
	size *= 2 << smmu->pgshift;
1867
	if (smmu->size != size)
1868 1869 1870
		dev_warn(smmu->dev,
			"SMMU address space size (0x%lx) differs from mapped region size (0x%lx)!\n",
			size, smmu->size);
1871

1872
	smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1873 1874 1875 1876 1877 1878 1879
	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);
1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890
	/*
	 * 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;
	}
1891 1892 1893 1894

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

1897
	/* The output mask is also applied for bypass */
1898
	size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1899
	smmu->pa_size = size;
1900

1901 1902 1903
	if (id & ID2_VMID16)
		smmu->features |= ARM_SMMU_FEAT_VMID16;

1904 1905 1906 1907 1908 1909 1910 1911 1912
	/*
	 * 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");

1913
	if (smmu->version < ARM_SMMU_V2) {
1914
		smmu->va_size = smmu->ipa_size;
1915 1916
		if (smmu->version == ARM_SMMU_V1_64K)
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1917 1918
	} else {
		size = (id >> ID2_UBS_SHIFT) & ID2_UBS_MASK;
1919 1920
		smmu->va_size = arm_smmu_id_size_to_bits(size);
		if (id & ID2_PTFS_4K)
1921
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_4K;
1922
		if (id & ID2_PTFS_16K)
1923
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_16K;
1924
		if (id & ID2_PTFS_64K)
1925
			smmu->features |= ARM_SMMU_FEAT_FMT_AARCH64_64K;
1926 1927
	}

1928 1929
	/* Now we've corralled the various formats, what'll it do? */
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH32_S)
1930
		smmu->pgsize_bitmap |= SZ_4K | SZ_64K | SZ_1M | SZ_16M;
1931 1932
	if (smmu->features &
	    (ARM_SMMU_FEAT_FMT_AARCH32_L | ARM_SMMU_FEAT_FMT_AARCH64_4K))
1933
		smmu->pgsize_bitmap |= SZ_4K | SZ_2M | SZ_1G;
1934
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_16K)
1935
		smmu->pgsize_bitmap |= SZ_16K | SZ_32M;
1936
	if (smmu->features & ARM_SMMU_FEAT_FMT_AARCH64_64K)
1937 1938 1939 1940 1941 1942 1943 1944
		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);
1945

1946

1947 1948
	if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
		dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1949
			   smmu->va_size, smmu->ipa_size);
1950 1951 1952

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

1955 1956 1957
	return 0;
}

1958 1959 1960 1961 1962 1963 1964 1965 1966 1967
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);
1968
ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1969
ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1970
ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1971

1972
static const struct of_device_id arm_smmu_of_match[] = {
1973 1974 1975
	{ .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
	{ .compatible = "arm,smmu-v2", .data = &smmu_generic_v2 },
	{ .compatible = "arm,mmu-400", .data = &smmu_generic_v1 },
1976
	{ .compatible = "arm,mmu-401", .data = &arm_mmu401 },
1977
	{ .compatible = "arm,mmu-500", .data = &arm_mmu500 },
1978
	{ .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
1979 1980 1981 1982
	{ },
};
MODULE_DEVICE_TABLE(of, arm_smmu_of_match);

1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040
#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

2041 2042
static int arm_smmu_device_dt_probe(struct platform_device *pdev,
				    struct arm_smmu_device *smmu)
2043
{
2044
	const struct arm_smmu_match_data *data;
2045
	struct device *dev = &pdev->dev;
2046 2047
	bool legacy_binding;

2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059
	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);

2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070
	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;
	}
2071

2072 2073 2074 2075 2076 2077 2078 2079 2080
	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;
2081
	resource_size_t ioaddr;
2082 2083 2084 2085
	struct arm_smmu_device *smmu;
	struct device *dev = &pdev->dev;
	int num_irqs, i, err;

2086 2087 2088 2089 2090 2091 2092
	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;

2093 2094 2095 2096 2097
	if (dev->of_node)
		err = arm_smmu_device_dt_probe(pdev, smmu);
	else
		err = arm_smmu_device_acpi_probe(pdev, smmu);

2098 2099
	if (err)
		return err;
2100

2101
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2102
	ioaddr = res->start;
2103 2104 2105
	smmu->base = devm_ioremap_resource(dev, res);
	if (IS_ERR(smmu->base))
		return PTR_ERR(smmu->base);
2106 2107 2108 2109 2110 2111 2112 2113 2114
	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++;
	}

2115 2116 2117 2118
	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;
2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129
	}

	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);
2130

2131 2132 2133 2134 2135 2136 2137
		if (irq < 0) {
			dev_err(dev, "failed to get irq index %d\n", i);
			return -ENODEV;
		}
		smmu->irqs[i] = irq;
	}

2138 2139 2140 2141
	err = arm_smmu_device_cfg_probe(smmu);
	if (err)
		return err;

2142
	if (smmu->version == ARM_SMMU_V2 &&
2143 2144 2145 2146
	    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);
2147
		return -ENODEV;
2148 2149 2150
	}

	for (i = 0; i < smmu->num_global_irqs; ++i) {
2151 2152 2153 2154 2155
		err = devm_request_irq(smmu->dev, smmu->irqs[i],
				       arm_smmu_global_fault,
				       IRQF_SHARED,
				       "arm-smmu global fault",
				       smmu);
2156 2157 2158
		if (err) {
			dev_err(dev, "failed to request global IRQ %d (%u)\n",
				i, smmu->irqs[i]);
2159
			return err;
2160 2161 2162
		}
	}

2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178
	err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL,
				     "smmu.%pa", &ioaddr);
	if (err) {
		dev_err(dev, "Failed to register iommu in sysfs\n");
		return err;
	}

	iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops);
	iommu_device_set_fwnode(&smmu->iommu, dev->fwnode);

	err = iommu_device_register(&smmu->iommu);
	if (err) {
		dev_err(dev, "Failed to register iommu\n");
		return err;
	}

2179
	platform_set_drvdata(pdev, smmu);
2180
	arm_smmu_device_reset(smmu);
2181
	arm_smmu_test_smr_masks(smmu);
2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195

	/* 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
2196 2197 2198 2199 2200
	return 0;
}

static int arm_smmu_device_remove(struct platform_device *pdev)
{
2201
	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2202 2203 2204 2205

	if (!smmu)
		return -ENODEV;

2206
	if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2207
		dev_err(&pdev->dev, "removing device with active domains!\n");
2208 2209

	/* Turn the thing off */
2210
	writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2211 2212 2213 2214 2215 2216 2217 2218
	return 0;
}

static struct platform_driver arm_smmu_driver = {
	.driver	= {
		.name		= "arm-smmu",
		.of_match_table	= of_match_ptr(arm_smmu_of_match),
	},
2219
	.probe	= arm_smmu_device_probe,
2220 2221 2222 2223 2224
	.remove	= arm_smmu_device_remove,
};

static int __init arm_smmu_init(void)
{
2225 2226
	static bool registered;
	int ret = 0;
2227

2228 2229 2230
	if (!registered) {
		ret = platform_driver_register(&arm_smmu_driver);
		registered = !ret;
2231
	}
2232
	return ret;
2233 2234 2235 2236 2237 2238 2239
}

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

2240
subsys_initcall(arm_smmu_init);
2241 2242
module_exit(arm_smmu_exit);

2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261
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);

2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272
#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

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