arm-smmu.c 61.6 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 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783
	/*
	 * TTBCR
	 * We must write this before the TTBRs, since it determines the
	 * access behaviour of some fields (in particular, ASID[15:8]).
	 */
	if (stage1) {
		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;
			if (cfg->fmt == ARM_SMMU_CTX_FMT_AARCH64)
				reg2 |= TTBCR2_AS;
		}
		if (smmu->version > ARM_SMMU_V1)
			writel_relaxed(reg2, cb_base + ARM_SMMU_CB_TTBCR2);
	} else {
		reg = pgtbl_cfg->arm_lpae_s2_cfg.vtcr;
	}
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);

784 785
	/* TTBRs */
	if (stage1) {
786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801
		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);
		}
802
	} else {
803
		reg64 = pgtbl_cfg->arm_lpae_s2_cfg.vttbr;
804
		writeq_relaxed(reg64, cb_base + ARM_SMMU_CB_TTBR0);
805
	}
806

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

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

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

841
	mutex_lock(&smmu_domain->init_mutex);
842 843 844
	if (smmu_domain->smmu)
		goto out_unlock;

845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
	/*
	 * 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;

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

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

	ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
				      smmu->num_context_banks);
937
	if (ret < 0)
938
		goto out_unlock;
939

940
	cfg->cbndx = ret;
941
	if (smmu->version < ARM_SMMU_V2) {
942 943
		cfg->irptndx = atomic_inc_return(&smmu->irptndx);
		cfg->irptndx %= smmu->num_context_irqs;
944
	} else {
945
		cfg->irptndx = cfg->cbndx;
946 947
	}

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

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

963 964
	/* Update the domain's page sizes to reflect the page table format */
	domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
965 966
	domain->geometry.aperture_end = (1UL << ias) - 1;
	domain->geometry.force_aperture = true;
967

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

984 985 986 987
	mutex_unlock(&smmu_domain->init_mutex);

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

990 991
out_clear_smmu:
	smmu_domain->smmu = NULL;
992
out_unlock:
993
	mutex_unlock(&smmu_domain->init_mutex);
994 995 996 997 998
	return ret;
}

static void arm_smmu_destroy_domain_context(struct iommu_domain *domain)
{
999
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1000 1001
	struct arm_smmu_device *smmu = smmu_domain->smmu;
	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
1002
	void __iomem *cb_base;
1003 1004
	int irq;

1005
	if (!smmu)
1006 1007
		return;

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

1015 1016
	if (cfg->irptndx != INVALID_IRPTNDX) {
		irq = smmu->irqs[smmu->num_global_irqs + cfg->irptndx];
1017
		devm_free_irq(smmu->dev, irq, domain);
1018 1019
	}

1020
	free_io_pgtable_ops(smmu_domain->pgtbl_ops);
1021
	__arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx);
1022 1023
}

1024
static struct iommu_domain *arm_smmu_domain_alloc(unsigned type)
1025 1026 1027
{
	struct arm_smmu_domain *smmu_domain;

1028
	if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA)
1029
		return NULL;
1030 1031 1032 1033 1034 1035 1036
	/*
	 * 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)
1037
		return NULL;
1038

1039 1040
	if (type == IOMMU_DOMAIN_DMA && (using_legacy_binding ||
	    iommu_get_dma_cookie(&smmu_domain->domain))) {
1041 1042 1043 1044
		kfree(smmu_domain);
		return NULL;
	}

1045 1046
	mutex_init(&smmu_domain->init_mutex);
	spin_lock_init(&smmu_domain->pgtbl_lock);
1047 1048

	return &smmu_domain->domain;
1049 1050
}

1051
static void arm_smmu_domain_free(struct iommu_domain *domain)
1052
{
1053
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1054 1055 1056 1057 1058

	/*
	 * Free the domain resources. We assume that all devices have
	 * already been detached.
	 */
1059
	iommu_put_dma_cookie(domain);
1060 1061 1062 1063
	arm_smmu_destroy_domain_context(domain);
	kfree(smmu_domain);
}

1064 1065 1066
static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
{
	struct arm_smmu_smr *smr = smmu->smrs + idx;
1067
	u32 reg = smr->id << SMR_ID_SHIFT | smr->mask << SMR_MASK_SHIFT;
1068

1069
	if (!(smmu->features & ARM_SMMU_FEAT_EXIDS) && smr->valid)
1070 1071 1072 1073
		reg |= SMR_VALID;
	writel_relaxed(reg, ARM_SMMU_GR0(smmu) + ARM_SMMU_GR0_SMR(idx));
}

1074 1075 1076 1077 1078 1079 1080
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;

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

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

1122
static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
1123 1124
{
	struct arm_smmu_smr *smrs = smmu->smrs;
1125
	int i, free_idx = -ENOSPC;
1126

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

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

1191 1192 1193
		if (idx != INVALID_SMENDX) {
			ret = -EEXIST;
			goto out_err;
1194 1195
		}

1196
		ret = arm_smmu_find_sme(smmu, sid, mask);
1197 1198 1199 1200 1201
		if (ret < 0)
			goto out_err;

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

1210 1211 1212 1213 1214 1215 1216 1217
	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);
1218

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

1225
	mutex_unlock(&smmu->stream_map_mutex);
1226 1227
	return 0;

1228
out_err:
1229
	while (i--) {
1230
		arm_smmu_free_sme(smmu, cfg->smendx[i]);
1231 1232
		cfg->smendx[i] = INVALID_SMENDX;
	}
1233 1234
	mutex_unlock(&smmu->stream_map_mutex);
	return ret;
1235 1236
}

1237
static void arm_smmu_master_free_smes(struct iommu_fwspec *fwspec)
1238
{
1239 1240
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
	struct arm_smmu_master_cfg *cfg = fwspec->iommu_priv;
1241
	int i, idx;
1242

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

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

1261
	for_each_cfg_sme(fwspec, i, idx) {
1262
		if (type == s2cr[idx].type && cbndx == s2cr[idx].cbndx)
1263
			continue;
1264

1265
		s2cr[idx].type = type;
1266
		s2cr[idx].privcfg = S2CR_PRIVCFG_DEFAULT;
1267 1268
		s2cr[idx].cbndx = cbndx;
		arm_smmu_write_s2cr(smmu, idx);
1269
	}
1270
	return 0;
1271 1272
}

1273 1274
static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
{
1275
	int ret;
1276 1277
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu;
1278
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1279

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

1285 1286 1287 1288 1289 1290 1291 1292 1293 1294
	/*
	 * 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;

1295
	smmu = fwspec_smmu(fwspec);
1296
	/* Ensure that the domain is finalised */
1297
	ret = arm_smmu_init_domain_context(domain, smmu);
1298
	if (ret < 0)
1299 1300
		return ret;

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

	/* Looks ok, so add the device to the domain */
1313
	return arm_smmu_domain_add_master(smmu_domain, fwspec);
1314 1315 1316
}

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

1324
	if (!ops)
1325 1326
		return -ENODEV;

1327 1328 1329 1330
	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;
1331 1332 1333 1334 1335
}

static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
			     size_t size)
{
1336 1337
	size_t ret;
	unsigned long flags;
1338
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1339
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1340

1341 1342 1343 1344 1345 1346 1347
	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;
1348 1349
}

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

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

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

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

1380
	phys = readq_relaxed(cb_base + ARM_SMMU_CB_PAR);
1381 1382 1383 1384 1385 1386 1387 1388 1389
	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);
}

1390
static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
1391
					dma_addr_t iova)
1392
{
1393 1394
	phys_addr_t ret;
	unsigned long flags;
1395
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1396
	struct io_pgtable_ops *ops= smmu_domain->pgtbl_ops;
1397

1398
	if (!ops)
1399
		return 0;
1400

1401
	spin_lock_irqsave(&smmu_domain->pgtbl_lock, flags);
1402 1403
	if (smmu_domain->smmu->features & ARM_SMMU_FEAT_TRANS_OPS &&
			smmu_domain->stage == ARM_SMMU_DOMAIN_S1) {
1404
		ret = arm_smmu_iova_to_phys_hard(domain, iova);
1405
	} else {
1406
		ret = ops->iova_to_phys(ops, iova);
1407 1408
	}

1409
	spin_unlock_irqrestore(&smmu_domain->pgtbl_lock, flags);
1410

1411
	return ret;
1412 1413
}

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

1430 1431
static int arm_smmu_match_node(struct device *dev, void *data)
{
1432
	return dev->fwnode == data;
1433 1434
}

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

1444
static int arm_smmu_add_device(struct device *dev)
1445
{
1446
	struct arm_smmu_device *smmu;
1447
	struct arm_smmu_master_cfg *cfg;
1448
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1449
	int i, ret;
1450

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

1462
	ret = -EINVAL;
1463 1464
	for (i = 0; i < fwspec->num_ids; i++) {
		u16 sid = fwspec->ids[i];
1465
		u16 mask = fwspec->ids[i] >> SMR_MASK_SHIFT;
1466

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

1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489
	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;

1490
	ret = arm_smmu_master_alloc_smes(dev);
1491 1492 1493
	if (ret)
		goto out_free;

1494 1495
	iommu_device_link(&smmu->iommu, dev);

1496
	return 0;
1497 1498

out_free:
1499 1500 1501
	if (fwspec)
		kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1502
	return ret;
1503 1504
}

1505 1506
static void arm_smmu_remove_device(struct device *dev)
{
1507
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
1508 1509 1510
	struct arm_smmu_master_cfg *cfg;
	struct arm_smmu_device *smmu;

1511

1512
	if (!fwspec || fwspec->ops != &arm_smmu_ops)
1513
		return;
1514

1515 1516 1517 1518
	cfg  = fwspec->iommu_priv;
	smmu = cfg->smmu;

	iommu_device_unlink(&smmu->iommu, dev);
1519
	arm_smmu_master_free_smes(fwspec);
1520
	iommu_group_remove_device(dev);
1521 1522
	kfree(fwspec->iommu_priv);
	iommu_fwspec_free(dev);
1523 1524
}

1525 1526
static struct iommu_group *arm_smmu_device_group(struct device *dev)
{
1527 1528
	struct iommu_fwspec *fwspec = dev->iommu_fwspec;
	struct arm_smmu_device *smmu = fwspec_smmu(fwspec);
1529 1530 1531
	struct iommu_group *group = NULL;
	int i, idx;

1532
	for_each_cfg_sme(fwspec, i, idx) {
1533 1534 1535 1536 1537 1538 1539 1540
		if (group && smmu->s2crs[idx].group &&
		    group != smmu->s2crs[idx].group)
			return ERR_PTR(-EINVAL);

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

	if (group)
1541
		return iommu_group_ref_get(group);
1542 1543 1544 1545 1546 1547 1548 1549 1550

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

	return group;
}

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

	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)
{
1568
	int ret = 0;
1569
	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
1570

1571 1572
	mutex_lock(&smmu_domain->init_mutex);

1573 1574
	switch (attr) {
	case DOMAIN_ATTR_NESTING:
1575 1576 1577 1578 1579
		if (smmu_domain->smmu) {
			ret = -EPERM;
			goto out_unlock;
		}

1580 1581 1582 1583 1584
		if (*(int *)data)
			smmu_domain->stage = ARM_SMMU_DOMAIN_NESTED;
		else
			smmu_domain->stage = ARM_SMMU_DOMAIN_S1;

1585
		break;
1586
	default:
1587
		ret = -ENODEV;
1588
	}
1589 1590 1591 1592

out_unlock:
	mutex_unlock(&smmu_domain->init_mutex);
	return ret;
1593 1594
}

1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607
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);
}

1608 1609 1610 1611 1612 1613 1614
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,
1615
					 prot, IOMMU_RESV_SW_MSI);
1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630
	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);
}

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

static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
{
	void __iomem *gr0_base = ARM_SMMU_GR0(smmu);
1654
	void __iomem *cb_base;
1655
	int i;
1656
	u32 reg, major;
1657

1658 1659 1660
	/* 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);
1661

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

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

1688 1689 1690 1691 1692
	/* 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);
1693 1694 1695 1696 1697 1698 1699 1700 1701
		/*
		 * 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);
		}
1702
	}
1703

1704 1705 1706 1707
	/* Invalidate the TLB, just in case */
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLH);
	writel_relaxed(0, gr0_base + ARM_SMMU_GR0_TLBIALLNSNH);

1708
	reg = readl_relaxed(ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
1709

1710
	/* Enable fault reporting */
1711
	reg |= (sCR0_GFRE | sCR0_GFIE | sCR0_GCFGFRE | sCR0_GCFGFIE);
1712 1713

	/* Disable TLB broadcasting. */
1714
	reg |= (sCR0_VMIDPNE | sCR0_PTM);
1715

1716 1717 1718 1719 1720 1721
	/* Enable client access, handling unmatched streams as appropriate */
	reg &= ~sCR0_CLIENTPD;
	if (disable_bypass)
		reg |= sCR0_USFCFG;
	else
		reg &= ~sCR0_USFCFG;
1722 1723

	/* Disable forced broadcasting */
1724
	reg &= ~sCR0_FB;
1725 1726

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

1729 1730 1731
	if (smmu->features & ARM_SMMU_FEAT_VMID16)
		reg |= sCR0_VMID16EN;

1732 1733 1734
	if (smmu->features & ARM_SMMU_FEAT_EXIDS)
		reg |= sCR0_EXIDENABLE;

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

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;
1764
	bool cttw_reg, cttw_fw = smmu->features & ARM_SMMU_FEAT_COHERENT_WALK;
1765
	int i;
1766 1767

	dev_notice(smmu->dev, "probing hardware configuration...\n");
1768 1769
	dev_notice(smmu->dev, "SMMUv%d with:\n",
			smmu->version == ARM_SMMU_V2 ? 2 : 1);
1770 1771 1772

	/* ID0 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID0);
1773 1774 1775 1776 1777 1778 1779

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

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

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

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

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

1838 1839 1840 1841 1842 1843
		/* Zero-initialised to mark as invalid */
		smmu->smrs = devm_kcalloc(smmu->dev, size, sizeof(*smmu->smrs),
					  GFP_KERNEL);
		if (!smmu->smrs)
			return -ENOMEM;

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

1855
	smmu->num_mapping_groups = size;
1856
	mutex_init(&smmu->stream_map_mutex);
1857

1858 1859 1860 1861 1862 1863
	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;
	}

1864 1865
	/* ID1 */
	id = readl_relaxed(gr0_base + ARM_SMMU_GR0_ID1);
1866
	smmu->pgshift = (id & ID1_PAGESIZE) ? 16 : 12;
1867

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

1876
	smmu->num_s2_context_banks = (id >> ID1_NUMS2CB_SHIFT) & ID1_NUMS2CB_MASK;
1877 1878 1879 1880 1881 1882 1883
	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);
1884 1885 1886 1887 1888 1889 1890 1891 1892 1893
	/*
	 * 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;
1894
		dev_notice(smmu->dev, "\tenabling workaround for Cavium erratum 27704\n");
1895
	}
1896 1897 1898 1899

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

1902
	/* The output mask is also applied for bypass */
1903
	size = arm_smmu_id_size_to_bits((id >> ID2_OAS_SHIFT) & ID2_OAS_MASK);
1904
	smmu->pa_size = size;
1905

1906 1907 1908
	if (id & ID2_VMID16)
		smmu->features |= ARM_SMMU_FEAT_VMID16;

1909 1910 1911 1912 1913 1914 1915 1916 1917
	/*
	 * 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");

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

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

1951

1952 1953
	if (smmu->features & ARM_SMMU_FEAT_TRANS_S1)
		dev_notice(smmu->dev, "\tStage-1: %lu-bit VA -> %lu-bit IPA\n",
1954
			   smmu->va_size, smmu->ipa_size);
1955 1956 1957

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

1960 1961 1962
	return 0;
}

1963 1964 1965 1966 1967 1968 1969 1970 1971 1972
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);
1973
ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
1974
ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
1975
ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
1976

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

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 2041 2042 2043 2044 2045
#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

2046 2047
static int arm_smmu_device_dt_probe(struct platform_device *pdev,
				    struct arm_smmu_device *smmu)
2048
{
2049
	const struct arm_smmu_match_data *data;
2050
	struct device *dev = &pdev->dev;
2051 2052
	bool legacy_binding;

2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064
	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);

2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075
	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;
	}
2076

2077 2078 2079 2080 2081 2082 2083 2084 2085
	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;
2086
	resource_size_t ioaddr;
2087 2088 2089 2090
	struct arm_smmu_device *smmu;
	struct device *dev = &pdev->dev;
	int num_irqs, i, err;

2091 2092 2093 2094 2095 2096 2097
	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;

2098 2099 2100 2101 2102
	if (dev->of_node)
		err = arm_smmu_device_dt_probe(pdev, smmu);
	else
		err = arm_smmu_device_acpi_probe(pdev, smmu);

2103 2104
	if (err)
		return err;
2105

2106
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2107
	ioaddr = res->start;
2108 2109 2110
	smmu->base = devm_ioremap_resource(dev, res);
	if (IS_ERR(smmu->base))
		return PTR_ERR(smmu->base);
2111 2112 2113 2114 2115 2116 2117 2118 2119
	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++;
	}

2120 2121 2122 2123
	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;
2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134
	}

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

2136 2137 2138 2139 2140 2141 2142
		if (irq < 0) {
			dev_err(dev, "failed to get irq index %d\n", i);
			return -ENODEV;
		}
		smmu->irqs[i] = irq;
	}

2143 2144 2145 2146
	err = arm_smmu_device_cfg_probe(smmu);
	if (err)
		return err;

2147
	if (smmu->version == ARM_SMMU_V2 &&
2148 2149 2150 2151
	    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);
2152
		return -ENODEV;
2153 2154 2155
	}

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

2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183
	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;
	}

2184
	platform_set_drvdata(pdev, smmu);
2185
	arm_smmu_device_reset(smmu);
2186
	arm_smmu_test_smr_masks(smmu);
2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200

	/* 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
2201 2202 2203 2204 2205
	return 0;
}

static int arm_smmu_device_remove(struct platform_device *pdev)
{
2206
	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
2207 2208 2209 2210

	if (!smmu)
		return -ENODEV;

2211
	if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
2212
		dev_err(&pdev->dev, "removing device with active domains!\n");
2213 2214

	/* Turn the thing off */
2215
	writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0);
2216 2217 2218 2219 2220 2221 2222 2223
	return 0;
}

static struct platform_driver arm_smmu_driver = {
	.driver	= {
		.name		= "arm-smmu",
		.of_match_table	= of_match_ptr(arm_smmu_of_match),
	},
2224
	.probe	= arm_smmu_device_probe,
2225 2226 2227 2228 2229
	.remove	= arm_smmu_device_remove,
};

static int __init arm_smmu_init(void)
{
2230 2231
	static bool registered;
	int ret = 0;
2232

2233 2234 2235
	if (!registered) {
		ret = platform_driver_register(&arm_smmu_driver);
		registered = !ret;
2236
	}
2237
	return ret;
2238 2239 2240 2241 2242 2243 2244
}

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

2245
subsys_initcall(arm_smmu_init);
2246 2247
module_exit(arm_smmu_exit);

2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266
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);

2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277
#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

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