Linux Audio

Check our new training course

Loading...
v5.9
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2006, Intel Corporation.
   4 *
   5 * Copyright (C) 2006-2008 Intel Corporation
   6 * Author: Ashok Raj <ashok.raj@intel.com>
   7 * Author: Shaohua Li <shaohua.li@intel.com>
   8 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
   9 *
  10 * This file implements early detection/parsing of Remapping Devices
  11 * reported to OS through BIOS via DMA remapping reporting (DMAR) ACPI
  12 * tables.
  13 *
  14 * These routines are used by both DMA-remapping and Interrupt-remapping
  15 */
  16
  17#define pr_fmt(fmt)     "DMAR: " fmt
  18
  19#include <linux/pci.h>
  20#include <linux/dmar.h>
  21#include <linux/iova.h>
  22#include <linux/intel-iommu.h>
  23#include <linux/timer.h>
  24#include <linux/irq.h>
  25#include <linux/interrupt.h>
  26#include <linux/tboot.h>
  27#include <linux/dmi.h>
  28#include <linux/slab.h>
  29#include <linux/iommu.h>
  30#include <linux/numa.h>
  31#include <linux/limits.h>
  32#include <asm/irq_remapping.h>
  33#include <asm/iommu_table.h>
  34
 
  35#include "../irq_remapping.h"
 
 
 
  36
  37typedef int (*dmar_res_handler_t)(struct acpi_dmar_header *, void *);
  38struct dmar_res_callback {
  39	dmar_res_handler_t	cb[ACPI_DMAR_TYPE_RESERVED];
  40	void			*arg[ACPI_DMAR_TYPE_RESERVED];
  41	bool			ignore_unhandled;
  42	bool			print_entry;
  43};
  44
  45/*
  46 * Assumptions:
  47 * 1) The hotplug framework guarentees that DMAR unit will be hot-added
  48 *    before IO devices managed by that unit.
  49 * 2) The hotplug framework guarantees that DMAR unit will be hot-removed
  50 *    after IO devices managed by that unit.
  51 * 3) Hotplug events are rare.
  52 *
  53 * Locking rules for DMA and interrupt remapping related global data structures:
  54 * 1) Use dmar_global_lock in process context
  55 * 2) Use RCU in interrupt context
  56 */
  57DECLARE_RWSEM(dmar_global_lock);
  58LIST_HEAD(dmar_drhd_units);
  59
  60struct acpi_table_header * __initdata dmar_tbl;
  61static int dmar_dev_scope_status = 1;
  62static unsigned long dmar_seq_ids[BITS_TO_LONGS(DMAR_UNITS_SUPPORTED)];
  63
  64static int alloc_iommu(struct dmar_drhd_unit *drhd);
  65static void free_iommu(struct intel_iommu *iommu);
  66
  67extern const struct iommu_ops intel_iommu_ops;
  68
  69static void dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
  70{
  71	/*
  72	 * add INCLUDE_ALL at the tail, so scan the list will find it at
  73	 * the very end.
  74	 */
  75	if (drhd->include_all)
  76		list_add_tail_rcu(&drhd->list, &dmar_drhd_units);
  77	else
  78		list_add_rcu(&drhd->list, &dmar_drhd_units);
  79}
  80
  81void *dmar_alloc_dev_scope(void *start, void *end, int *cnt)
  82{
  83	struct acpi_dmar_device_scope *scope;
  84
  85	*cnt = 0;
  86	while (start < end) {
  87		scope = start;
  88		if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_NAMESPACE ||
  89		    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
  90		    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)
  91			(*cnt)++;
  92		else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC &&
  93			scope->entry_type != ACPI_DMAR_SCOPE_TYPE_HPET) {
  94			pr_warn("Unsupported device scope\n");
  95		}
  96		start += scope->length;
  97	}
  98	if (*cnt == 0)
  99		return NULL;
 100
 101	return kcalloc(*cnt, sizeof(struct dmar_dev_scope), GFP_KERNEL);
 102}
 103
 104void dmar_free_dev_scope(struct dmar_dev_scope **devices, int *cnt)
 105{
 106	int i;
 107	struct device *tmp_dev;
 108
 109	if (*devices && *cnt) {
 110		for_each_active_dev_scope(*devices, *cnt, i, tmp_dev)
 111			put_device(tmp_dev);
 112		kfree(*devices);
 113	}
 114
 115	*devices = NULL;
 116	*cnt = 0;
 117}
 118
 119/* Optimize out kzalloc()/kfree() for normal cases */
 120static char dmar_pci_notify_info_buf[64];
 121
 122static struct dmar_pci_notify_info *
 123dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event)
 124{
 125	int level = 0;
 126	size_t size;
 127	struct pci_dev *tmp;
 128	struct dmar_pci_notify_info *info;
 129
 130	BUG_ON(dev->is_virtfn);
 131
 132	/*
 133	 * Ignore devices that have a domain number higher than what can
 134	 * be looked up in DMAR, e.g. VMD subdevices with domain 0x10000
 135	 */
 136	if (pci_domain_nr(dev->bus) > U16_MAX)
 137		return NULL;
 138
 139	/* Only generate path[] for device addition event */
 140	if (event == BUS_NOTIFY_ADD_DEVICE)
 141		for (tmp = dev; tmp; tmp = tmp->bus->self)
 142			level++;
 143
 144	size = struct_size(info, path, level);
 145	if (size <= sizeof(dmar_pci_notify_info_buf)) {
 146		info = (struct dmar_pci_notify_info *)dmar_pci_notify_info_buf;
 147	} else {
 148		info = kzalloc(size, GFP_KERNEL);
 149		if (!info) {
 150			pr_warn("Out of memory when allocating notify_info "
 151				"for %s.\n", pci_name(dev));
 152			if (dmar_dev_scope_status == 0)
 153				dmar_dev_scope_status = -ENOMEM;
 154			return NULL;
 155		}
 156	}
 157
 158	info->event = event;
 159	info->dev = dev;
 160	info->seg = pci_domain_nr(dev->bus);
 161	info->level = level;
 162	if (event == BUS_NOTIFY_ADD_DEVICE) {
 163		for (tmp = dev; tmp; tmp = tmp->bus->self) {
 164			level--;
 165			info->path[level].bus = tmp->bus->number;
 166			info->path[level].device = PCI_SLOT(tmp->devfn);
 167			info->path[level].function = PCI_FUNC(tmp->devfn);
 168			if (pci_is_root_bus(tmp->bus))
 169				info->bus = tmp->bus->number;
 170		}
 171	}
 172
 173	return info;
 174}
 175
 176static inline void dmar_free_pci_notify_info(struct dmar_pci_notify_info *info)
 177{
 178	if ((void *)info != dmar_pci_notify_info_buf)
 179		kfree(info);
 180}
 181
 182static bool dmar_match_pci_path(struct dmar_pci_notify_info *info, int bus,
 183				struct acpi_dmar_pci_path *path, int count)
 184{
 185	int i;
 186
 187	if (info->bus != bus)
 188		goto fallback;
 189	if (info->level != count)
 190		goto fallback;
 191
 192	for (i = 0; i < count; i++) {
 193		if (path[i].device != info->path[i].device ||
 194		    path[i].function != info->path[i].function)
 195			goto fallback;
 196	}
 197
 198	return true;
 199
 200fallback:
 201
 202	if (count != 1)
 203		return false;
 204
 205	i = info->level - 1;
 206	if (bus              == info->path[i].bus &&
 207	    path[0].device   == info->path[i].device &&
 208	    path[0].function == info->path[i].function) {
 209		pr_info(FW_BUG "RMRR entry for device %02x:%02x.%x is broken - applying workaround\n",
 210			bus, path[0].device, path[0].function);
 211		return true;
 212	}
 213
 214	return false;
 215}
 216
 217/* Return: > 0 if match found, 0 if no match found, < 0 if error happens */
 218int dmar_insert_dev_scope(struct dmar_pci_notify_info *info,
 219			  void *start, void*end, u16 segment,
 220			  struct dmar_dev_scope *devices,
 221			  int devices_cnt)
 222{
 223	int i, level;
 224	struct device *tmp, *dev = &info->dev->dev;
 225	struct acpi_dmar_device_scope *scope;
 226	struct acpi_dmar_pci_path *path;
 227
 228	if (segment != info->seg)
 229		return 0;
 230
 231	for (; start < end; start += scope->length) {
 232		scope = start;
 233		if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_ENDPOINT &&
 234		    scope->entry_type != ACPI_DMAR_SCOPE_TYPE_BRIDGE)
 235			continue;
 236
 237		path = (struct acpi_dmar_pci_path *)(scope + 1);
 238		level = (scope->length - sizeof(*scope)) / sizeof(*path);
 239		if (!dmar_match_pci_path(info, scope->bus, path, level))
 240			continue;
 241
 242		/*
 243		 * We expect devices with endpoint scope to have normal PCI
 244		 * headers, and devices with bridge scope to have bridge PCI
 245		 * headers.  However PCI NTB devices may be listed in the
 246		 * DMAR table with bridge scope, even though they have a
 247		 * normal PCI header.  NTB devices are identified by class
 248		 * "BRIDGE_OTHER" (0680h) - we don't declare a socpe mismatch
 249		 * for this special case.
 250		 */
 251		if ((scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT &&
 252		     info->dev->hdr_type != PCI_HEADER_TYPE_NORMAL) ||
 253		    (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE &&
 254		     (info->dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
 255		      info->dev->class >> 16 != PCI_BASE_CLASS_BRIDGE))) {
 256			pr_warn("Device scope type does not match for %s\n",
 257				pci_name(info->dev));
 258			return -EINVAL;
 259		}
 260
 261		for_each_dev_scope(devices, devices_cnt, i, tmp)
 262			if (tmp == NULL) {
 263				devices[i].bus = info->dev->bus->number;
 264				devices[i].devfn = info->dev->devfn;
 265				rcu_assign_pointer(devices[i].dev,
 266						   get_device(dev));
 267				return 1;
 268			}
 269		BUG_ON(i >= devices_cnt);
 
 270	}
 271
 272	return 0;
 273}
 274
 275int dmar_remove_dev_scope(struct dmar_pci_notify_info *info, u16 segment,
 276			  struct dmar_dev_scope *devices, int count)
 277{
 278	int index;
 279	struct device *tmp;
 280
 281	if (info->seg != segment)
 282		return 0;
 283
 284	for_each_active_dev_scope(devices, count, index, tmp)
 285		if (tmp == &info->dev->dev) {
 286			RCU_INIT_POINTER(devices[index].dev, NULL);
 287			synchronize_rcu();
 288			put_device(tmp);
 289			return 1;
 290		}
 291
 292	return 0;
 293}
 294
 295static int dmar_pci_bus_add_dev(struct dmar_pci_notify_info *info)
 296{
 297	int ret = 0;
 298	struct dmar_drhd_unit *dmaru;
 299	struct acpi_dmar_hardware_unit *drhd;
 300
 301	for_each_drhd_unit(dmaru) {
 302		if (dmaru->include_all)
 303			continue;
 304
 305		drhd = container_of(dmaru->hdr,
 306				    struct acpi_dmar_hardware_unit, header);
 307		ret = dmar_insert_dev_scope(info, (void *)(drhd + 1),
 308				((void *)drhd) + drhd->header.length,
 309				dmaru->segment,
 310				dmaru->devices, dmaru->devices_cnt);
 311		if (ret)
 312			break;
 313	}
 314	if (ret >= 0)
 315		ret = dmar_iommu_notify_scope_dev(info);
 316	if (ret < 0 && dmar_dev_scope_status == 0)
 317		dmar_dev_scope_status = ret;
 318
 
 
 
 319	return ret;
 320}
 321
 322static void  dmar_pci_bus_del_dev(struct dmar_pci_notify_info *info)
 323{
 324	struct dmar_drhd_unit *dmaru;
 325
 326	for_each_drhd_unit(dmaru)
 327		if (dmar_remove_dev_scope(info, dmaru->segment,
 328			dmaru->devices, dmaru->devices_cnt))
 329			break;
 330	dmar_iommu_notify_scope_dev(info);
 331}
 332
 
 
 
 
 
 
 
 333static int dmar_pci_bus_notifier(struct notifier_block *nb,
 334				 unsigned long action, void *data)
 335{
 336	struct pci_dev *pdev = to_pci_dev(data);
 337	struct dmar_pci_notify_info *info;
 338
 339	/* Only care about add/remove events for physical functions.
 340	 * For VFs we actually do the lookup based on the corresponding
 341	 * PF in device_to_iommu() anyway. */
 342	if (pdev->is_virtfn)
 
 
 
 
 
 
 
 
 
 
 343		return NOTIFY_DONE;
 
 
 344	if (action != BUS_NOTIFY_ADD_DEVICE &&
 345	    action != BUS_NOTIFY_REMOVED_DEVICE)
 346		return NOTIFY_DONE;
 347
 348	info = dmar_alloc_pci_notify_info(pdev, action);
 349	if (!info)
 350		return NOTIFY_DONE;
 351
 352	down_write(&dmar_global_lock);
 353	if (action == BUS_NOTIFY_ADD_DEVICE)
 354		dmar_pci_bus_add_dev(info);
 355	else if (action == BUS_NOTIFY_REMOVED_DEVICE)
 356		dmar_pci_bus_del_dev(info);
 357	up_write(&dmar_global_lock);
 358
 359	dmar_free_pci_notify_info(info);
 360
 361	return NOTIFY_OK;
 362}
 363
 364static struct notifier_block dmar_pci_bus_nb = {
 365	.notifier_call = dmar_pci_bus_notifier,
 366	.priority = INT_MIN,
 367};
 368
 369static struct dmar_drhd_unit *
 370dmar_find_dmaru(struct acpi_dmar_hardware_unit *drhd)
 371{
 372	struct dmar_drhd_unit *dmaru;
 373
 374	list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list,
 375				dmar_rcu_check())
 376		if (dmaru->segment == drhd->segment &&
 377		    dmaru->reg_base_addr == drhd->address)
 378			return dmaru;
 379
 380	return NULL;
 381}
 382
 383/**
 384 * dmar_parse_one_drhd - parses exactly one DMA remapping hardware definition
 385 * structure which uniquely represent one DMA remapping hardware unit
 386 * present in the platform
 387 */
 388static int dmar_parse_one_drhd(struct acpi_dmar_header *header, void *arg)
 389{
 390	struct acpi_dmar_hardware_unit *drhd;
 391	struct dmar_drhd_unit *dmaru;
 392	int ret;
 393
 394	drhd = (struct acpi_dmar_hardware_unit *)header;
 395	dmaru = dmar_find_dmaru(drhd);
 396	if (dmaru)
 397		goto out;
 398
 399	dmaru = kzalloc(sizeof(*dmaru) + header->length, GFP_KERNEL);
 400	if (!dmaru)
 401		return -ENOMEM;
 402
 403	/*
 404	 * If header is allocated from slab by ACPI _DSM method, we need to
 405	 * copy the content because the memory buffer will be freed on return.
 406	 */
 407	dmaru->hdr = (void *)(dmaru + 1);
 408	memcpy(dmaru->hdr, header, header->length);
 409	dmaru->reg_base_addr = drhd->address;
 410	dmaru->segment = drhd->segment;
 
 
 411	dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
 412	dmaru->devices = dmar_alloc_dev_scope((void *)(drhd + 1),
 413					      ((void *)drhd) + drhd->header.length,
 414					      &dmaru->devices_cnt);
 415	if (dmaru->devices_cnt && dmaru->devices == NULL) {
 416		kfree(dmaru);
 417		return -ENOMEM;
 418	}
 419
 420	ret = alloc_iommu(dmaru);
 421	if (ret) {
 422		dmar_free_dev_scope(&dmaru->devices,
 423				    &dmaru->devices_cnt);
 424		kfree(dmaru);
 425		return ret;
 426	}
 427	dmar_register_drhd_unit(dmaru);
 428
 429out:
 430	if (arg)
 431		(*(int *)arg)++;
 432
 433	return 0;
 434}
 435
 436static void dmar_free_drhd(struct dmar_drhd_unit *dmaru)
 437{
 438	if (dmaru->devices && dmaru->devices_cnt)
 439		dmar_free_dev_scope(&dmaru->devices, &dmaru->devices_cnt);
 440	if (dmaru->iommu)
 441		free_iommu(dmaru->iommu);
 442	kfree(dmaru);
 443}
 444
 445static int __init dmar_parse_one_andd(struct acpi_dmar_header *header,
 446				      void *arg)
 447{
 448	struct acpi_dmar_andd *andd = (void *)header;
 449
 450	/* Check for NUL termination within the designated length */
 451	if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {
 452		pr_warn(FW_BUG
 453			   "Your BIOS is broken; ANDD object name is not NUL-terminated\n"
 454			   "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 455			   dmi_get_system_info(DMI_BIOS_VENDOR),
 456			   dmi_get_system_info(DMI_BIOS_VERSION),
 457			   dmi_get_system_info(DMI_PRODUCT_VERSION));
 458		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 459		return -EINVAL;
 460	}
 461	pr_info("ANDD device: %x name: %s\n", andd->device_number,
 462		andd->device_name);
 463
 464	return 0;
 465}
 466
 467#ifdef CONFIG_ACPI_NUMA
 468static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg)
 469{
 470	struct acpi_dmar_rhsa *rhsa;
 471	struct dmar_drhd_unit *drhd;
 472
 473	rhsa = (struct acpi_dmar_rhsa *)header;
 474	for_each_drhd_unit(drhd) {
 475		if (drhd->reg_base_addr == rhsa->base_address) {
 476			int node = acpi_map_pxm_to_node(rhsa->proximity_domain);
 477
 478			if (!node_online(node))
 479				node = NUMA_NO_NODE;
 480			drhd->iommu->node = node;
 481			return 0;
 482		}
 483	}
 484	pr_warn(FW_BUG
 485		"Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
 486		"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 487		rhsa->base_address,
 488		dmi_get_system_info(DMI_BIOS_VENDOR),
 489		dmi_get_system_info(DMI_BIOS_VERSION),
 490		dmi_get_system_info(DMI_PRODUCT_VERSION));
 491	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 492
 493	return 0;
 494}
 495#else
 496#define	dmar_parse_one_rhsa		dmar_res_noop
 497#endif
 498
 499static void
 500dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
 501{
 502	struct acpi_dmar_hardware_unit *drhd;
 503	struct acpi_dmar_reserved_memory *rmrr;
 504	struct acpi_dmar_atsr *atsr;
 505	struct acpi_dmar_rhsa *rhsa;
 
 506
 507	switch (header->type) {
 508	case ACPI_DMAR_TYPE_HARDWARE_UNIT:
 509		drhd = container_of(header, struct acpi_dmar_hardware_unit,
 510				    header);
 511		pr_info("DRHD base: %#016Lx flags: %#x\n",
 512			(unsigned long long)drhd->address, drhd->flags);
 513		break;
 514	case ACPI_DMAR_TYPE_RESERVED_MEMORY:
 515		rmrr = container_of(header, struct acpi_dmar_reserved_memory,
 516				    header);
 517		pr_info("RMRR base: %#016Lx end: %#016Lx\n",
 518			(unsigned long long)rmrr->base_address,
 519			(unsigned long long)rmrr->end_address);
 520		break;
 521	case ACPI_DMAR_TYPE_ROOT_ATS:
 522		atsr = container_of(header, struct acpi_dmar_atsr, header);
 523		pr_info("ATSR flags: %#x\n", atsr->flags);
 524		break;
 525	case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
 526		rhsa = container_of(header, struct acpi_dmar_rhsa, header);
 527		pr_info("RHSA base: %#016Lx proximity domain: %#x\n",
 528		       (unsigned long long)rhsa->base_address,
 529		       rhsa->proximity_domain);
 530		break;
 531	case ACPI_DMAR_TYPE_NAMESPACE:
 532		/* We don't print this here because we need to sanity-check
 533		   it first. So print it in dmar_parse_one_andd() instead. */
 534		break;
 
 
 
 
 535	}
 536}
 537
 538/**
 539 * dmar_table_detect - checks to see if the platform supports DMAR devices
 540 */
 541static int __init dmar_table_detect(void)
 542{
 543	acpi_status status = AE_OK;
 544
 545	/* if we could find DMAR table, then there are DMAR devices */
 546	status = acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_tbl);
 547
 548	if (ACPI_SUCCESS(status) && !dmar_tbl) {
 549		pr_warn("Unable to map DMAR\n");
 550		status = AE_NOT_FOUND;
 551	}
 552
 553	return ACPI_SUCCESS(status) ? 0 : -ENOENT;
 554}
 555
 556static int dmar_walk_remapping_entries(struct acpi_dmar_header *start,
 557				       size_t len, struct dmar_res_callback *cb)
 558{
 559	struct acpi_dmar_header *iter, *next;
 560	struct acpi_dmar_header *end = ((void *)start) + len;
 561
 562	for (iter = start; iter < end; iter = next) {
 563		next = (void *)iter + iter->length;
 564		if (iter->length == 0) {
 565			/* Avoid looping forever on bad ACPI tables */
 566			pr_debug(FW_BUG "Invalid 0-length structure\n");
 567			break;
 568		} else if (next > end) {
 569			/* Avoid passing table end */
 570			pr_warn(FW_BUG "Record passes table end\n");
 571			return -EINVAL;
 572		}
 573
 574		if (cb->print_entry)
 575			dmar_table_print_dmar_entry(iter);
 576
 577		if (iter->type >= ACPI_DMAR_TYPE_RESERVED) {
 578			/* continue for forward compatibility */
 579			pr_debug("Unknown DMAR structure type %d\n",
 580				 iter->type);
 581		} else if (cb->cb[iter->type]) {
 582			int ret;
 583
 584			ret = cb->cb[iter->type](iter, cb->arg[iter->type]);
 585			if (ret)
 586				return ret;
 587		} else if (!cb->ignore_unhandled) {
 588			pr_warn("No handler for DMAR structure type %d\n",
 589				iter->type);
 590			return -EINVAL;
 591		}
 592	}
 593
 594	return 0;
 595}
 596
 597static inline int dmar_walk_dmar_table(struct acpi_table_dmar *dmar,
 598				       struct dmar_res_callback *cb)
 599{
 600	return dmar_walk_remapping_entries((void *)(dmar + 1),
 601			dmar->header.length - sizeof(*dmar), cb);
 602}
 603
 604/**
 605 * parse_dmar_table - parses the DMA reporting table
 606 */
 607static int __init
 608parse_dmar_table(void)
 609{
 610	struct acpi_table_dmar *dmar;
 611	int drhd_count = 0;
 612	int ret;
 613	struct dmar_res_callback cb = {
 614		.print_entry = true,
 615		.ignore_unhandled = true,
 616		.arg[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &drhd_count,
 617		.cb[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &dmar_parse_one_drhd,
 618		.cb[ACPI_DMAR_TYPE_RESERVED_MEMORY] = &dmar_parse_one_rmrr,
 619		.cb[ACPI_DMAR_TYPE_ROOT_ATS] = &dmar_parse_one_atsr,
 620		.cb[ACPI_DMAR_TYPE_HARDWARE_AFFINITY] = &dmar_parse_one_rhsa,
 621		.cb[ACPI_DMAR_TYPE_NAMESPACE] = &dmar_parse_one_andd,
 
 622	};
 623
 624	/*
 625	 * Do it again, earlier dmar_tbl mapping could be mapped with
 626	 * fixed map.
 627	 */
 628	dmar_table_detect();
 629
 630	/*
 631	 * ACPI tables may not be DMA protected by tboot, so use DMAR copy
 632	 * SINIT saved in SinitMleData in TXT heap (which is DMA protected)
 633	 */
 634	dmar_tbl = tboot_get_dmar_table(dmar_tbl);
 635
 636	dmar = (struct acpi_table_dmar *)dmar_tbl;
 637	if (!dmar)
 638		return -ENODEV;
 639
 640	if (dmar->width < PAGE_SHIFT - 1) {
 641		pr_warn("Invalid DMAR haw\n");
 642		return -EINVAL;
 643	}
 644
 645	pr_info("Host address width %d\n", dmar->width + 1);
 646	ret = dmar_walk_dmar_table(dmar, &cb);
 647	if (ret == 0 && drhd_count == 0)
 648		pr_warn(FW_BUG "No DRHD structure found in DMAR table\n");
 649
 650	return ret;
 651}
 652
 653static int dmar_pci_device_match(struct dmar_dev_scope devices[],
 654				 int cnt, struct pci_dev *dev)
 655{
 656	int index;
 657	struct device *tmp;
 658
 659	while (dev) {
 660		for_each_active_dev_scope(devices, cnt, index, tmp)
 661			if (dev_is_pci(tmp) && dev == to_pci_dev(tmp))
 662				return 1;
 663
 664		/* Check our parent */
 665		dev = dev->bus->self;
 666	}
 667
 668	return 0;
 669}
 670
 671struct dmar_drhd_unit *
 672dmar_find_matched_drhd_unit(struct pci_dev *dev)
 673{
 674	struct dmar_drhd_unit *dmaru;
 675	struct acpi_dmar_hardware_unit *drhd;
 676
 677	dev = pci_physfn(dev);
 678
 679	rcu_read_lock();
 680	for_each_drhd_unit(dmaru) {
 681		drhd = container_of(dmaru->hdr,
 682				    struct acpi_dmar_hardware_unit,
 683				    header);
 684
 685		if (dmaru->include_all &&
 686		    drhd->segment == pci_domain_nr(dev->bus))
 687			goto out;
 688
 689		if (dmar_pci_device_match(dmaru->devices,
 690					  dmaru->devices_cnt, dev))
 691			goto out;
 692	}
 693	dmaru = NULL;
 694out:
 695	rcu_read_unlock();
 696
 697	return dmaru;
 698}
 699
 700static void __init dmar_acpi_insert_dev_scope(u8 device_number,
 701					      struct acpi_device *adev)
 702{
 703	struct dmar_drhd_unit *dmaru;
 704	struct acpi_dmar_hardware_unit *drhd;
 705	struct acpi_dmar_device_scope *scope;
 706	struct device *tmp;
 707	int i;
 708	struct acpi_dmar_pci_path *path;
 709
 710	for_each_drhd_unit(dmaru) {
 711		drhd = container_of(dmaru->hdr,
 712				    struct acpi_dmar_hardware_unit,
 713				    header);
 714
 715		for (scope = (void *)(drhd + 1);
 716		     (unsigned long)scope < ((unsigned long)drhd) + drhd->header.length;
 717		     scope = ((void *)scope) + scope->length) {
 718			if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_NAMESPACE)
 719				continue;
 720			if (scope->enumeration_id != device_number)
 721				continue;
 722
 723			path = (void *)(scope + 1);
 724			pr_info("ACPI device \"%s\" under DMAR at %llx as %02x:%02x.%d\n",
 725				dev_name(&adev->dev), dmaru->reg_base_addr,
 726				scope->bus, path->device, path->function);
 727			for_each_dev_scope(dmaru->devices, dmaru->devices_cnt, i, tmp)
 728				if (tmp == NULL) {
 729					dmaru->devices[i].bus = scope->bus;
 730					dmaru->devices[i].devfn = PCI_DEVFN(path->device,
 731									    path->function);
 732					rcu_assign_pointer(dmaru->devices[i].dev,
 733							   get_device(&adev->dev));
 734					return;
 735				}
 736			BUG_ON(i >= dmaru->devices_cnt);
 737		}
 738	}
 739	pr_warn("No IOMMU scope found for ANDD enumeration ID %d (%s)\n",
 740		device_number, dev_name(&adev->dev));
 741}
 742
 743static int __init dmar_acpi_dev_scope_init(void)
 744{
 745	struct acpi_dmar_andd *andd;
 746
 747	if (dmar_tbl == NULL)
 748		return -ENODEV;
 749
 750	for (andd = (void *)dmar_tbl + sizeof(struct acpi_table_dmar);
 751	     ((unsigned long)andd) < ((unsigned long)dmar_tbl) + dmar_tbl->length;
 752	     andd = ((void *)andd) + andd->header.length) {
 753		if (andd->header.type == ACPI_DMAR_TYPE_NAMESPACE) {
 754			acpi_handle h;
 755			struct acpi_device *adev;
 756
 757			if (!ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT,
 758							  andd->device_name,
 759							  &h))) {
 760				pr_err("Failed to find handle for ACPI object %s\n",
 761				       andd->device_name);
 762				continue;
 763			}
 764			if (acpi_bus_get_device(h, &adev)) {
 
 765				pr_err("Failed to get device for ACPI object %s\n",
 766				       andd->device_name);
 767				continue;
 768			}
 769			dmar_acpi_insert_dev_scope(andd->device_number, adev);
 770		}
 771	}
 772	return 0;
 773}
 774
 775int __init dmar_dev_scope_init(void)
 776{
 777	struct pci_dev *dev = NULL;
 778	struct dmar_pci_notify_info *info;
 779
 780	if (dmar_dev_scope_status != 1)
 781		return dmar_dev_scope_status;
 782
 783	if (list_empty(&dmar_drhd_units)) {
 784		dmar_dev_scope_status = -ENODEV;
 785	} else {
 786		dmar_dev_scope_status = 0;
 787
 788		dmar_acpi_dev_scope_init();
 789
 790		for_each_pci_dev(dev) {
 791			if (dev->is_virtfn)
 792				continue;
 793
 794			info = dmar_alloc_pci_notify_info(dev,
 795					BUS_NOTIFY_ADD_DEVICE);
 796			if (!info) {
 
 797				return dmar_dev_scope_status;
 798			} else {
 799				dmar_pci_bus_add_dev(info);
 800				dmar_free_pci_notify_info(info);
 801			}
 802		}
 803	}
 804
 805	return dmar_dev_scope_status;
 806}
 807
 808void __init dmar_register_bus_notifier(void)
 809{
 810	bus_register_notifier(&pci_bus_type, &dmar_pci_bus_nb);
 811}
 812
 813
 814int __init dmar_table_init(void)
 815{
 816	static int dmar_table_initialized;
 817	int ret;
 818
 819	if (dmar_table_initialized == 0) {
 820		ret = parse_dmar_table();
 821		if (ret < 0) {
 822			if (ret != -ENODEV)
 823				pr_info("Parse DMAR table failure.\n");
 824		} else  if (list_empty(&dmar_drhd_units)) {
 825			pr_info("No DMAR devices found\n");
 826			ret = -ENODEV;
 827		}
 828
 829		if (ret < 0)
 830			dmar_table_initialized = ret;
 831		else
 832			dmar_table_initialized = 1;
 833	}
 834
 835	return dmar_table_initialized < 0 ? dmar_table_initialized : 0;
 836}
 837
 838static void warn_invalid_dmar(u64 addr, const char *message)
 839{
 840	pr_warn_once(FW_BUG
 841		"Your BIOS is broken; DMAR reported at address %llx%s!\n"
 842		"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 843		addr, message,
 844		dmi_get_system_info(DMI_BIOS_VENDOR),
 845		dmi_get_system_info(DMI_BIOS_VERSION),
 846		dmi_get_system_info(DMI_PRODUCT_VERSION));
 847	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 848}
 849
 850static int __ref
 851dmar_validate_one_drhd(struct acpi_dmar_header *entry, void *arg)
 852{
 853	struct acpi_dmar_hardware_unit *drhd;
 854	void __iomem *addr;
 855	u64 cap, ecap;
 856
 857	drhd = (void *)entry;
 858	if (!drhd->address) {
 859		warn_invalid_dmar(0, "");
 860		return -EINVAL;
 861	}
 862
 863	if (arg)
 864		addr = ioremap(drhd->address, VTD_PAGE_SIZE);
 865	else
 866		addr = early_ioremap(drhd->address, VTD_PAGE_SIZE);
 867	if (!addr) {
 868		pr_warn("Can't validate DRHD address: %llx\n", drhd->address);
 869		return -EINVAL;
 870	}
 871
 872	cap = dmar_readq(addr + DMAR_CAP_REG);
 873	ecap = dmar_readq(addr + DMAR_ECAP_REG);
 874
 875	if (arg)
 876		iounmap(addr);
 877	else
 878		early_iounmap(addr, VTD_PAGE_SIZE);
 879
 880	if (cap == (uint64_t)-1 && ecap == (uint64_t)-1) {
 881		warn_invalid_dmar(drhd->address, " returns all ones");
 882		return -EINVAL;
 883	}
 884
 885	return 0;
 886}
 887
 888int __init detect_intel_iommu(void)
 889{
 890	int ret;
 891	struct dmar_res_callback validate_drhd_cb = {
 892		.cb[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &dmar_validate_one_drhd,
 893		.ignore_unhandled = true,
 894	};
 895
 896	down_write(&dmar_global_lock);
 897	ret = dmar_table_detect();
 898	if (!ret)
 899		ret = dmar_walk_dmar_table((struct acpi_table_dmar *)dmar_tbl,
 900					   &validate_drhd_cb);
 901	if (!ret && !no_iommu && !iommu_detected &&
 902	    (!dmar_disabled || dmar_platform_optin())) {
 903		iommu_detected = 1;
 904		/* Make sure ACS will be enabled */
 905		pci_request_acs();
 906	}
 907
 908#ifdef CONFIG_X86
 909	if (!ret) {
 910		x86_init.iommu.iommu_init = intel_iommu_init;
 911		x86_platform.iommu_shutdown = intel_iommu_shutdown;
 912	}
 913
 914#endif
 915
 916	if (dmar_tbl) {
 917		acpi_put_table(dmar_tbl);
 918		dmar_tbl = NULL;
 919	}
 920	up_write(&dmar_global_lock);
 921
 922	return ret ? ret : 1;
 923}
 924
 925static void unmap_iommu(struct intel_iommu *iommu)
 926{
 927	iounmap(iommu->reg);
 928	release_mem_region(iommu->reg_phys, iommu->reg_size);
 929}
 930
 931/**
 932 * map_iommu: map the iommu's registers
 933 * @iommu: the iommu to map
 934 * @phys_addr: the physical address of the base resgister
 935 *
 936 * Memory map the iommu's registers.  Start w/ a single page, and
 937 * possibly expand if that turns out to be insufficent.
 938 */
 939static int map_iommu(struct intel_iommu *iommu, u64 phys_addr)
 940{
 
 941	int map_size, err=0;
 942
 943	iommu->reg_phys = phys_addr;
 944	iommu->reg_size = VTD_PAGE_SIZE;
 945
 946	if (!request_mem_region(iommu->reg_phys, iommu->reg_size, iommu->name)) {
 947		pr_err("Can't reserve memory\n");
 948		err = -EBUSY;
 949		goto out;
 950	}
 951
 952	iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
 953	if (!iommu->reg) {
 954		pr_err("Can't map the region\n");
 955		err = -ENOMEM;
 956		goto release;
 957	}
 958
 959	iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
 960	iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
 961
 962	if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) {
 963		err = -EINVAL;
 964		warn_invalid_dmar(phys_addr, " returns all ones");
 965		goto unmap;
 966	}
 967	iommu->vccap = dmar_readq(iommu->reg + DMAR_VCCAP_REG);
 968
 969	/* the registers might be more than one page */
 970	map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
 971			 cap_max_fault_reg_offset(iommu->cap));
 972	map_size = VTD_PAGE_ALIGN(map_size);
 973	if (map_size > iommu->reg_size) {
 974		iounmap(iommu->reg);
 975		release_mem_region(iommu->reg_phys, iommu->reg_size);
 976		iommu->reg_size = map_size;
 977		if (!request_mem_region(iommu->reg_phys, iommu->reg_size,
 978					iommu->name)) {
 979			pr_err("Can't reserve memory\n");
 980			err = -EBUSY;
 981			goto out;
 982		}
 983		iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
 984		if (!iommu->reg) {
 985			pr_err("Can't map the region\n");
 986			err = -ENOMEM;
 987			goto release;
 988		}
 989	}
 
 
 
 
 
 
 
 
 
 
 990	err = 0;
 991	goto out;
 992
 993unmap:
 994	iounmap(iommu->reg);
 995release:
 996	release_mem_region(iommu->reg_phys, iommu->reg_size);
 997out:
 998	return err;
 999}
1000
1001static int dmar_alloc_seq_id(struct intel_iommu *iommu)
1002{
1003	iommu->seq_id = find_first_zero_bit(dmar_seq_ids,
1004					    DMAR_UNITS_SUPPORTED);
1005	if (iommu->seq_id >= DMAR_UNITS_SUPPORTED) {
1006		iommu->seq_id = -1;
1007	} else {
1008		set_bit(iommu->seq_id, dmar_seq_ids);
1009		sprintf(iommu->name, "dmar%d", iommu->seq_id);
1010	}
1011
1012	return iommu->seq_id;
1013}
1014
1015static void dmar_free_seq_id(struct intel_iommu *iommu)
1016{
1017	if (iommu->seq_id >= 0) {
1018		clear_bit(iommu->seq_id, dmar_seq_ids);
1019		iommu->seq_id = -1;
1020	}
1021}
1022
1023static int alloc_iommu(struct dmar_drhd_unit *drhd)
1024{
1025	struct intel_iommu *iommu;
1026	u32 ver, sts;
1027	int agaw = 0;
1028	int msagaw = 0;
1029	int err;
1030
1031	if (!drhd->reg_base_addr) {
1032		warn_invalid_dmar(0, "");
1033		return -EINVAL;
1034	}
1035
1036	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
1037	if (!iommu)
1038		return -ENOMEM;
1039
1040	if (dmar_alloc_seq_id(iommu) < 0) {
 
 
1041		pr_err("Failed to allocate seq_id\n");
1042		err = -ENOSPC;
1043		goto error;
1044	}
 
1045
1046	err = map_iommu(iommu, drhd->reg_base_addr);
1047	if (err) {
1048		pr_err("Failed to map %s\n", iommu->name);
1049		goto error_free_seq_id;
1050	}
1051
1052	err = -EINVAL;
1053	agaw = iommu_calculate_agaw(iommu);
1054	if (agaw < 0) {
1055		pr_err("Cannot get a valid agaw for iommu (seq_id = %d)\n",
1056			iommu->seq_id);
1057		goto err_unmap;
1058	}
1059	msagaw = iommu_calculate_max_sagaw(iommu);
1060	if (msagaw < 0) {
1061		pr_err("Cannot get a valid max agaw for iommu (seq_id = %d)\n",
1062			iommu->seq_id);
1063		goto err_unmap;
 
 
 
 
 
 
 
 
 
 
 
 
1064	}
1065	iommu->agaw = agaw;
1066	iommu->msagaw = msagaw;
1067	iommu->segment = drhd->segment;
1068
 
 
1069	iommu->node = NUMA_NO_NODE;
1070
1071	ver = readl(iommu->reg + DMAR_VER_REG);
1072	pr_info("%s: reg_base_addr %llx ver %d:%d cap %llx ecap %llx\n",
1073		iommu->name,
1074		(unsigned long long)drhd->reg_base_addr,
1075		DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
1076		(unsigned long long)iommu->cap,
1077		(unsigned long long)iommu->ecap);
1078
1079	/* Reflect status in gcmd */
1080	sts = readl(iommu->reg + DMAR_GSTS_REG);
1081	if (sts & DMA_GSTS_IRES)
1082		iommu->gcmd |= DMA_GCMD_IRE;
1083	if (sts & DMA_GSTS_TES)
1084		iommu->gcmd |= DMA_GCMD_TE;
1085	if (sts & DMA_GSTS_QIES)
1086		iommu->gcmd |= DMA_GCMD_QIE;
1087
 
 
 
1088	raw_spin_lock_init(&iommu->register_lock);
1089
1090	if (intel_iommu_enabled) {
 
 
 
 
 
 
 
 
 
 
 
 
1091		err = iommu_device_sysfs_add(&iommu->iommu, NULL,
1092					     intel_iommu_groups,
1093					     "%s", iommu->name);
1094		if (err)
1095			goto err_unmap;
1096
1097		iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops);
1098
1099		err = iommu_device_register(&iommu->iommu);
1100		if (err)
1101			goto err_unmap;
 
 
1102	}
1103
1104	drhd->iommu = iommu;
1105	iommu->drhd = drhd;
1106
1107	return 0;
1108
 
 
1109err_unmap:
 
1110	unmap_iommu(iommu);
1111error_free_seq_id:
1112	dmar_free_seq_id(iommu);
1113error:
1114	kfree(iommu);
1115	return err;
1116}
1117
1118static void free_iommu(struct intel_iommu *iommu)
1119{
1120	if (intel_iommu_enabled) {
 
1121		iommu_device_unregister(&iommu->iommu);
1122		iommu_device_sysfs_remove(&iommu->iommu);
1123	}
1124
 
 
1125	if (iommu->irq) {
1126		if (iommu->pr_irq) {
1127			free_irq(iommu->pr_irq, iommu);
1128			dmar_free_hwirq(iommu->pr_irq);
1129			iommu->pr_irq = 0;
1130		}
1131		free_irq(iommu->irq, iommu);
1132		dmar_free_hwirq(iommu->irq);
1133		iommu->irq = 0;
1134	}
1135
1136	if (iommu->qi) {
1137		free_page((unsigned long)iommu->qi->desc);
1138		kfree(iommu->qi->desc_status);
1139		kfree(iommu->qi);
1140	}
1141
1142	if (iommu->reg)
1143		unmap_iommu(iommu);
1144
1145	dmar_free_seq_id(iommu);
1146	kfree(iommu);
1147}
1148
1149/*
1150 * Reclaim all the submitted descriptors which have completed its work.
1151 */
1152static inline void reclaim_free_desc(struct q_inval *qi)
1153{
1154	while (qi->desc_status[qi->free_tail] == QI_DONE ||
1155	       qi->desc_status[qi->free_tail] == QI_ABORT) {
1156		qi->desc_status[qi->free_tail] = QI_FREE;
1157		qi->free_tail = (qi->free_tail + 1) % QI_LENGTH;
1158		qi->free_cnt++;
1159	}
1160}
1161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1162static int qi_check_fault(struct intel_iommu *iommu, int index, int wait_index)
1163{
1164	u32 fault;
1165	int head, tail;
 
 
1166	struct q_inval *qi = iommu->qi;
1167	int shift = qi_shift(iommu);
1168
1169	if (qi->desc_status[wait_index] == QI_ABORT)
1170		return -EAGAIN;
1171
1172	fault = readl(iommu->reg + DMAR_FSTS_REG);
 
 
1173
1174	/*
1175	 * If IQE happens, the head points to the descriptor associated
1176	 * with the error. No new descriptors are fetched until the IQE
1177	 * is cleared.
1178	 */
1179	if (fault & DMA_FSTS_IQE) {
1180		head = readl(iommu->reg + DMAR_IQH_REG);
1181		if ((head >> shift) == index) {
1182			struct qi_desc *desc = qi->desc + head;
1183
1184			/*
1185			 * desc->qw2 and desc->qw3 are either reserved or
1186			 * used by software as private data. We won't print
1187			 * out these two qw's for security consideration.
1188			 */
1189			pr_err("VT-d detected invalid descriptor: qw0 = %llx, qw1 = %llx\n",
1190			       (unsigned long long)desc->qw0,
1191			       (unsigned long long)desc->qw1);
1192			memcpy(desc, qi->desc + (wait_index << shift),
1193			       1 << shift);
1194			writel(DMA_FSTS_IQE, iommu->reg + DMAR_FSTS_REG);
 
1195			return -EINVAL;
1196		}
1197	}
1198
1199	/*
1200	 * If ITE happens, all pending wait_desc commands are aborted.
1201	 * No new descriptors are fetched until the ITE is cleared.
1202	 */
1203	if (fault & DMA_FSTS_ITE) {
1204		head = readl(iommu->reg + DMAR_IQH_REG);
1205		head = ((head >> shift) - 1 + QI_LENGTH) % QI_LENGTH;
1206		head |= 1;
1207		tail = readl(iommu->reg + DMAR_IQT_REG);
1208		tail = ((tail >> shift) - 1 + QI_LENGTH) % QI_LENGTH;
1209
 
 
 
 
 
 
 
1210		writel(DMA_FSTS_ITE, iommu->reg + DMAR_FSTS_REG);
 
1211
1212		do {
1213			if (qi->desc_status[head] == QI_IN_USE)
1214				qi->desc_status[head] = QI_ABORT;
1215			head = (head - 2 + QI_LENGTH) % QI_LENGTH;
1216		} while (head != tail);
1217
 
 
 
 
 
 
 
 
 
 
 
 
 
1218		if (qi->desc_status[wait_index] == QI_ABORT)
1219			return -EAGAIN;
1220	}
1221
1222	if (fault & DMA_FSTS_ICE)
1223		writel(DMA_FSTS_ICE, iommu->reg + DMAR_FSTS_REG);
 
 
1224
1225	return 0;
1226}
1227
1228/*
1229 * Function to submit invalidation descriptors of all types to the queued
1230 * invalidation interface(QI). Multiple descriptors can be submitted at a
1231 * time, a wait descriptor will be appended to each submission to ensure
1232 * hardware has completed the invalidation before return. Wait descriptors
1233 * can be part of the submission but it will not be polled for completion.
1234 */
1235int qi_submit_sync(struct intel_iommu *iommu, struct qi_desc *desc,
1236		   unsigned int count, unsigned long options)
1237{
1238	struct q_inval *qi = iommu->qi;
 
 
 
1239	struct qi_desc wait_desc;
1240	int wait_index, index;
1241	unsigned long flags;
1242	int offset, shift;
1243	int rc, i;
 
1244
1245	if (!qi)
1246		return 0;
1247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1248restart:
1249	rc = 0;
1250
1251	raw_spin_lock_irqsave(&qi->q_lock, flags);
1252	/*
1253	 * Check if we have enough empty slots in the queue to submit,
1254	 * the calculation is based on:
1255	 * # of desc + 1 wait desc + 1 space between head and tail
1256	 */
1257	while (qi->free_cnt < count + 2) {
1258		raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1259		cpu_relax();
1260		raw_spin_lock_irqsave(&qi->q_lock, flags);
1261	}
1262
1263	index = qi->free_head;
1264	wait_index = (index + count) % QI_LENGTH;
1265	shift = qi_shift(iommu);
1266
1267	for (i = 0; i < count; i++) {
1268		offset = ((index + i) % QI_LENGTH) << shift;
1269		memcpy(qi->desc + offset, &desc[i], 1 << shift);
1270		qi->desc_status[(index + i) % QI_LENGTH] = QI_IN_USE;
 
 
1271	}
1272	qi->desc_status[wait_index] = QI_IN_USE;
1273
1274	wait_desc.qw0 = QI_IWD_STATUS_DATA(QI_DONE) |
1275			QI_IWD_STATUS_WRITE | QI_IWD_TYPE;
1276	if (options & QI_OPT_WAIT_DRAIN)
1277		wait_desc.qw0 |= QI_IWD_PRQ_DRAIN;
1278	wait_desc.qw1 = virt_to_phys(&qi->desc_status[wait_index]);
1279	wait_desc.qw2 = 0;
1280	wait_desc.qw3 = 0;
1281
1282	offset = wait_index << shift;
1283	memcpy(qi->desc + offset, &wait_desc, 1 << shift);
1284
1285	qi->free_head = (qi->free_head + count + 1) % QI_LENGTH;
1286	qi->free_cnt -= count + 1;
1287
1288	/*
1289	 * update the HW tail register indicating the presence of
1290	 * new descriptors.
1291	 */
1292	writel(qi->free_head << shift, iommu->reg + DMAR_IQT_REG);
1293
1294	while (qi->desc_status[wait_index] != QI_DONE) {
1295		/*
1296		 * We will leave the interrupts disabled, to prevent interrupt
1297		 * context to queue another cmd while a cmd is already submitted
1298		 * and waiting for completion on this cpu. This is to avoid
1299		 * a deadlock where the interrupt context can wait indefinitely
1300		 * for free slots in the queue.
1301		 */
1302		rc = qi_check_fault(iommu, index, wait_index);
1303		if (rc)
1304			break;
1305
1306		raw_spin_unlock(&qi->q_lock);
1307		cpu_relax();
1308		raw_spin_lock(&qi->q_lock);
1309	}
1310
1311	for (i = 0; i < count; i++)
1312		qi->desc_status[(index + i) % QI_LENGTH] = QI_DONE;
1313
1314	reclaim_free_desc(qi);
1315	raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1316
1317	if (rc == -EAGAIN)
1318		goto restart;
1319
 
 
 
 
 
 
 
 
 
 
 
 
1320	return rc;
1321}
1322
1323/*
1324 * Flush the global interrupt entry cache.
1325 */
1326void qi_global_iec(struct intel_iommu *iommu)
1327{
1328	struct qi_desc desc;
1329
1330	desc.qw0 = QI_IEC_TYPE;
1331	desc.qw1 = 0;
1332	desc.qw2 = 0;
1333	desc.qw3 = 0;
1334
1335	/* should never fail */
1336	qi_submit_sync(iommu, &desc, 1, 0);
1337}
1338
1339void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm,
1340		      u64 type)
1341{
1342	struct qi_desc desc;
1343
1344	desc.qw0 = QI_CC_FM(fm) | QI_CC_SID(sid) | QI_CC_DID(did)
1345			| QI_CC_GRAN(type) | QI_CC_TYPE;
1346	desc.qw1 = 0;
1347	desc.qw2 = 0;
1348	desc.qw3 = 0;
1349
1350	qi_submit_sync(iommu, &desc, 1, 0);
1351}
1352
1353void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
1354		    unsigned int size_order, u64 type)
1355{
1356	u8 dw = 0, dr = 0;
1357
1358	struct qi_desc desc;
1359	int ih = 0;
1360
1361	if (cap_write_drain(iommu->cap))
1362		dw = 1;
1363
1364	if (cap_read_drain(iommu->cap))
1365		dr = 1;
1366
1367	desc.qw0 = QI_IOTLB_DID(did) | QI_IOTLB_DR(dr) | QI_IOTLB_DW(dw)
1368		| QI_IOTLB_GRAN(type) | QI_IOTLB_TYPE;
1369	desc.qw1 = QI_IOTLB_ADDR(addr) | QI_IOTLB_IH(ih)
1370		| QI_IOTLB_AM(size_order);
1371	desc.qw2 = 0;
1372	desc.qw3 = 0;
1373
1374	qi_submit_sync(iommu, &desc, 1, 0);
1375}
1376
1377void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid,
1378			u16 qdep, u64 addr, unsigned mask)
1379{
1380	struct qi_desc desc;
1381
 
 
 
 
 
 
 
 
 
1382	if (mask) {
1383		addr |= (1ULL << (VTD_PAGE_SHIFT + mask - 1)) - 1;
1384		desc.qw1 = QI_DEV_IOTLB_ADDR(addr) | QI_DEV_IOTLB_SIZE;
1385	} else
1386		desc.qw1 = QI_DEV_IOTLB_ADDR(addr);
1387
1388	if (qdep >= QI_DEV_IOTLB_MAX_INVS)
1389		qdep = 0;
1390
1391	desc.qw0 = QI_DEV_IOTLB_SID(sid) | QI_DEV_IOTLB_QDEP(qdep) |
1392		   QI_DIOTLB_TYPE | QI_DEV_IOTLB_PFSID(pfsid);
1393	desc.qw2 = 0;
1394	desc.qw3 = 0;
1395
1396	qi_submit_sync(iommu, &desc, 1, 0);
1397}
1398
1399/* PASID-based IOTLB invalidation */
1400void qi_flush_piotlb(struct intel_iommu *iommu, u16 did, u32 pasid, u64 addr,
1401		     unsigned long npages, bool ih)
1402{
1403	struct qi_desc desc = {.qw2 = 0, .qw3 = 0};
1404
1405	/*
1406	 * npages == -1 means a PASID-selective invalidation, otherwise,
1407	 * a positive value for Page-selective-within-PASID invalidation.
1408	 * 0 is not a valid input.
1409	 */
1410	if (WARN_ON(!npages)) {
1411		pr_err("Invalid input npages = %ld\n", npages);
1412		return;
1413	}
1414
1415	if (npages == -1) {
1416		desc.qw0 = QI_EIOTLB_PASID(pasid) |
1417				QI_EIOTLB_DID(did) |
1418				QI_EIOTLB_GRAN(QI_GRAN_NONG_PASID) |
1419				QI_EIOTLB_TYPE;
1420		desc.qw1 = 0;
1421	} else {
1422		int mask = ilog2(__roundup_pow_of_two(npages));
1423		unsigned long align = (1ULL << (VTD_PAGE_SHIFT + mask));
1424
1425		if (WARN_ON_ONCE(!ALIGN(addr, align)))
1426			addr &= ~(align - 1);
1427
1428		desc.qw0 = QI_EIOTLB_PASID(pasid) |
1429				QI_EIOTLB_DID(did) |
1430				QI_EIOTLB_GRAN(QI_GRAN_PSI_PASID) |
1431				QI_EIOTLB_TYPE;
1432		desc.qw1 = QI_EIOTLB_ADDR(addr) |
1433				QI_EIOTLB_IH(ih) |
1434				QI_EIOTLB_AM(mask);
1435	}
1436
1437	qi_submit_sync(iommu, &desc, 1, 0);
1438}
1439
1440/* PASID-based device IOTLB Invalidate */
1441void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid,
1442			      u32 pasid,  u16 qdep, u64 addr, unsigned int size_order)
1443{
1444	unsigned long mask = 1UL << (VTD_PAGE_SHIFT + size_order - 1);
1445	struct qi_desc desc = {.qw1 = 0, .qw2 = 0, .qw3 = 0};
1446
 
 
 
 
 
 
 
 
 
1447	desc.qw0 = QI_DEV_EIOTLB_PASID(pasid) | QI_DEV_EIOTLB_SID(sid) |
1448		QI_DEV_EIOTLB_QDEP(qdep) | QI_DEIOTLB_TYPE |
1449		QI_DEV_IOTLB_PFSID(pfsid);
1450
1451	/*
1452	 * If S bit is 0, we only flush a single page. If S bit is set,
1453	 * The least significant zero bit indicates the invalidation address
1454	 * range. VT-d spec 6.5.2.6.
1455	 * e.g. address bit 12[0] indicates 8KB, 13[0] indicates 16KB.
1456	 * size order = 0 is PAGE_SIZE 4KB
1457	 * Max Invs Pending (MIP) is set to 0 for now until we have DIT in
1458	 * ECAP.
1459	 */
1460	if (addr & GENMASK_ULL(size_order + VTD_PAGE_SHIFT, 0))
1461		pr_warn_ratelimited("Invalidate non-aligned address %llx, order %d\n",
1462				    addr, size_order);
1463
1464	/* Take page address */
1465	desc.qw1 = QI_DEV_EIOTLB_ADDR(addr);
1466
1467	if (size_order) {
1468		/*
1469		 * Existing 0s in address below size_order may be the least
1470		 * significant bit, we must set them to 1s to avoid having
1471		 * smaller size than desired.
1472		 */
1473		desc.qw1 |= GENMASK_ULL(size_order + VTD_PAGE_SHIFT - 1,
1474					VTD_PAGE_SHIFT);
1475		/* Clear size_order bit to indicate size */
1476		desc.qw1 &= ~mask;
1477		/* Set the S bit to indicate flushing more than 1 page */
1478		desc.qw1 |= QI_DEV_EIOTLB_SIZE;
1479	}
1480
1481	qi_submit_sync(iommu, &desc, 1, 0);
1482}
1483
1484void qi_flush_pasid_cache(struct intel_iommu *iommu, u16 did,
1485			  u64 granu, int pasid)
1486{
1487	struct qi_desc desc = {.qw1 = 0, .qw2 = 0, .qw3 = 0};
1488
1489	desc.qw0 = QI_PC_PASID(pasid) | QI_PC_DID(did) |
1490			QI_PC_GRAN(granu) | QI_PC_TYPE;
1491	qi_submit_sync(iommu, &desc, 1, 0);
1492}
1493
1494/*
1495 * Disable Queued Invalidation interface.
1496 */
1497void dmar_disable_qi(struct intel_iommu *iommu)
1498{
1499	unsigned long flags;
1500	u32 sts;
1501	cycles_t start_time = get_cycles();
1502
1503	if (!ecap_qis(iommu->ecap))
1504		return;
1505
1506	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1507
1508	sts =  readl(iommu->reg + DMAR_GSTS_REG);
1509	if (!(sts & DMA_GSTS_QIES))
1510		goto end;
1511
1512	/*
1513	 * Give a chance to HW to complete the pending invalidation requests.
1514	 */
1515	while ((readl(iommu->reg + DMAR_IQT_REG) !=
1516		readl(iommu->reg + DMAR_IQH_REG)) &&
1517		(DMAR_OPERATION_TIMEOUT > (get_cycles() - start_time)))
1518		cpu_relax();
1519
1520	iommu->gcmd &= ~DMA_GCMD_QIE;
1521	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1522
1523	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl,
1524		      !(sts & DMA_GSTS_QIES), sts);
1525end:
1526	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1527}
1528
1529/*
1530 * Enable queued invalidation.
1531 */
1532static void __dmar_enable_qi(struct intel_iommu *iommu)
1533{
1534	u32 sts;
1535	unsigned long flags;
1536	struct q_inval *qi = iommu->qi;
1537	u64 val = virt_to_phys(qi->desc);
1538
1539	qi->free_head = qi->free_tail = 0;
1540	qi->free_cnt = QI_LENGTH;
1541
1542	/*
1543	 * Set DW=1 and QS=1 in IQA_REG when Scalable Mode capability
1544	 * is present.
1545	 */
1546	if (ecap_smts(iommu->ecap))
1547		val |= (1 << 11) | 1;
1548
1549	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1550
1551	/* write zero to the tail reg */
1552	writel(0, iommu->reg + DMAR_IQT_REG);
1553
1554	dmar_writeq(iommu->reg + DMAR_IQA_REG, val);
1555
1556	iommu->gcmd |= DMA_GCMD_QIE;
1557	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1558
1559	/* Make sure hardware complete it */
1560	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts);
1561
1562	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1563}
1564
1565/*
1566 * Enable Queued Invalidation interface. This is a must to support
1567 * interrupt-remapping. Also used by DMA-remapping, which replaces
1568 * register based IOTLB invalidation.
1569 */
1570int dmar_enable_qi(struct intel_iommu *iommu)
1571{
1572	struct q_inval *qi;
1573	struct page *desc_page;
1574
1575	if (!ecap_qis(iommu->ecap))
1576		return -ENOENT;
1577
1578	/*
1579	 * queued invalidation is already setup and enabled.
1580	 */
1581	if (iommu->qi)
1582		return 0;
1583
1584	iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
1585	if (!iommu->qi)
1586		return -ENOMEM;
1587
1588	qi = iommu->qi;
1589
1590	/*
1591	 * Need two pages to accommodate 256 descriptors of 256 bits each
1592	 * if the remapping hardware supports scalable mode translation.
1593	 */
1594	desc_page = alloc_pages_node(iommu->node, GFP_ATOMIC | __GFP_ZERO,
1595				     !!ecap_smts(iommu->ecap));
1596	if (!desc_page) {
1597		kfree(qi);
1598		iommu->qi = NULL;
1599		return -ENOMEM;
1600	}
1601
1602	qi->desc = page_address(desc_page);
1603
1604	qi->desc_status = kcalloc(QI_LENGTH, sizeof(int), GFP_ATOMIC);
1605	if (!qi->desc_status) {
1606		free_page((unsigned long) qi->desc);
1607		kfree(qi);
1608		iommu->qi = NULL;
1609		return -ENOMEM;
1610	}
1611
1612	raw_spin_lock_init(&qi->q_lock);
1613
1614	__dmar_enable_qi(iommu);
1615
1616	return 0;
1617}
1618
1619/* iommu interrupt handling. Most stuff are MSI-like. */
1620
1621enum faulttype {
1622	DMA_REMAP,
1623	INTR_REMAP,
1624	UNKNOWN,
1625};
1626
1627static const char *dma_remap_fault_reasons[] =
1628{
1629	"Software",
1630	"Present bit in root entry is clear",
1631	"Present bit in context entry is clear",
1632	"Invalid context entry",
1633	"Access beyond MGAW",
1634	"PTE Write access is not set",
1635	"PTE Read access is not set",
1636	"Next page table ptr is invalid",
1637	"Root table address invalid",
1638	"Context table ptr is invalid",
1639	"non-zero reserved fields in RTP",
1640	"non-zero reserved fields in CTP",
1641	"non-zero reserved fields in PTE",
1642	"PCE for translation request specifies blocking",
1643};
1644
1645static const char * const dma_remap_sm_fault_reasons[] = {
1646	"SM: Invalid Root Table Address",
1647	"SM: TTM 0 for request with PASID",
1648	"SM: TTM 0 for page group request",
1649	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x33-0x37 */
1650	"SM: Error attempting to access Root Entry",
1651	"SM: Present bit in Root Entry is clear",
1652	"SM: Non-zero reserved field set in Root Entry",
1653	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x3B-0x3F */
1654	"SM: Error attempting to access Context Entry",
1655	"SM: Present bit in Context Entry is clear",
1656	"SM: Non-zero reserved field set in the Context Entry",
1657	"SM: Invalid Context Entry",
1658	"SM: DTE field in Context Entry is clear",
1659	"SM: PASID Enable field in Context Entry is clear",
1660	"SM: PASID is larger than the max in Context Entry",
1661	"SM: PRE field in Context-Entry is clear",
1662	"SM: RID_PASID field error in Context-Entry",
1663	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x49-0x4F */
1664	"SM: Error attempting to access the PASID Directory Entry",
1665	"SM: Present bit in Directory Entry is clear",
1666	"SM: Non-zero reserved field set in PASID Directory Entry",
1667	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x53-0x57 */
1668	"SM: Error attempting to access PASID Table Entry",
1669	"SM: Present bit in PASID Table Entry is clear",
1670	"SM: Non-zero reserved field set in PASID Table Entry",
1671	"SM: Invalid Scalable-Mode PASID Table Entry",
1672	"SM: ERE field is clear in PASID Table Entry",
1673	"SM: SRE field is clear in PASID Table Entry",
1674	"Unknown", "Unknown",/* 0x5E-0x5F */
1675	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x60-0x67 */
1676	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x68-0x6F */
1677	"SM: Error attempting to access first-level paging entry",
1678	"SM: Present bit in first-level paging entry is clear",
1679	"SM: Non-zero reserved field set in first-level paging entry",
1680	"SM: Error attempting to access FL-PML4 entry",
1681	"SM: First-level entry address beyond MGAW in Nested translation",
1682	"SM: Read permission error in FL-PML4 entry in Nested translation",
1683	"SM: Read permission error in first-level paging entry in Nested translation",
1684	"SM: Write permission error in first-level paging entry in Nested translation",
1685	"SM: Error attempting to access second-level paging entry",
1686	"SM: Read/Write permission error in second-level paging entry",
1687	"SM: Non-zero reserved field set in second-level paging entry",
1688	"SM: Invalid second-level page table pointer",
1689	"SM: A/D bit update needed in second-level entry when set up in no snoop",
1690	"Unknown", "Unknown", "Unknown", /* 0x7D-0x7F */
1691	"SM: Address in first-level translation is not canonical",
1692	"SM: U/S set 0 for first-level translation with user privilege",
1693	"SM: No execute permission for request with PASID and ER=1",
1694	"SM: Address beyond the DMA hardware max",
1695	"SM: Second-level entry address beyond the max",
1696	"SM: No write permission for Write/AtomicOp request",
1697	"SM: No read permission for Read/AtomicOp request",
1698	"SM: Invalid address-interrupt address",
1699	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x88-0x8F */
1700	"SM: A/D bit update needed in first-level entry when set up in no snoop",
1701};
1702
1703static const char *irq_remap_fault_reasons[] =
1704{
1705	"Detected reserved fields in the decoded interrupt-remapped request",
1706	"Interrupt index exceeded the interrupt-remapping table size",
1707	"Present field in the IRTE entry is clear",
1708	"Error accessing interrupt-remapping table pointed by IRTA_REG",
1709	"Detected reserved fields in the IRTE entry",
1710	"Blocked a compatibility format interrupt request",
1711	"Blocked an interrupt request due to source-id verification failure",
1712};
1713
1714static const char *dmar_get_fault_reason(u8 fault_reason, int *fault_type)
1715{
1716	if (fault_reason >= 0x20 && (fault_reason - 0x20 <
1717					ARRAY_SIZE(irq_remap_fault_reasons))) {
1718		*fault_type = INTR_REMAP;
1719		return irq_remap_fault_reasons[fault_reason - 0x20];
1720	} else if (fault_reason >= 0x30 && (fault_reason - 0x30 <
1721			ARRAY_SIZE(dma_remap_sm_fault_reasons))) {
1722		*fault_type = DMA_REMAP;
1723		return dma_remap_sm_fault_reasons[fault_reason - 0x30];
1724	} else if (fault_reason < ARRAY_SIZE(dma_remap_fault_reasons)) {
1725		*fault_type = DMA_REMAP;
1726		return dma_remap_fault_reasons[fault_reason];
1727	} else {
1728		*fault_type = UNKNOWN;
1729		return "Unknown";
1730	}
1731}
1732
1733
1734static inline int dmar_msi_reg(struct intel_iommu *iommu, int irq)
1735{
1736	if (iommu->irq == irq)
1737		return DMAR_FECTL_REG;
1738	else if (iommu->pr_irq == irq)
1739		return DMAR_PECTL_REG;
 
 
1740	else
1741		BUG();
1742}
1743
1744void dmar_msi_unmask(struct irq_data *data)
1745{
1746	struct intel_iommu *iommu = irq_data_get_irq_handler_data(data);
1747	int reg = dmar_msi_reg(iommu, data->irq);
1748	unsigned long flag;
1749
1750	/* unmask it */
1751	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1752	writel(0, iommu->reg + reg);
1753	/* Read a reg to force flush the post write */
1754	readl(iommu->reg + reg);
1755	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1756}
1757
1758void dmar_msi_mask(struct irq_data *data)
1759{
1760	struct intel_iommu *iommu = irq_data_get_irq_handler_data(data);
1761	int reg = dmar_msi_reg(iommu, data->irq);
1762	unsigned long flag;
1763
1764	/* mask it */
1765	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1766	writel(DMA_FECTL_IM, iommu->reg + reg);
1767	/* Read a reg to force flush the post write */
1768	readl(iommu->reg + reg);
1769	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1770}
1771
1772void dmar_msi_write(int irq, struct msi_msg *msg)
1773{
1774	struct intel_iommu *iommu = irq_get_handler_data(irq);
1775	int reg = dmar_msi_reg(iommu, irq);
1776	unsigned long flag;
1777
1778	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1779	writel(msg->data, iommu->reg + reg + 4);
1780	writel(msg->address_lo, iommu->reg + reg + 8);
1781	writel(msg->address_hi, iommu->reg + reg + 12);
1782	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1783}
1784
1785void dmar_msi_read(int irq, struct msi_msg *msg)
1786{
1787	struct intel_iommu *iommu = irq_get_handler_data(irq);
1788	int reg = dmar_msi_reg(iommu, irq);
1789	unsigned long flag;
1790
1791	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1792	msg->data = readl(iommu->reg + reg + 4);
1793	msg->address_lo = readl(iommu->reg + reg + 8);
1794	msg->address_hi = readl(iommu->reg + reg + 12);
1795	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1796}
1797
1798static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
1799		u8 fault_reason, int pasid, u16 source_id,
1800		unsigned long long addr)
1801{
1802	const char *reason;
1803	int fault_type;
1804
1805	reason = dmar_get_fault_reason(fault_reason, &fault_type);
1806
1807	if (fault_type == INTR_REMAP)
1808		pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index %llx [fault reason %02d] %s\n",
1809			source_id >> 8, PCI_SLOT(source_id & 0xFF),
1810			PCI_FUNC(source_id & 0xFF), addr >> 48,
1811			fault_reason, reason);
1812	else
1813		pr_err("[%s] Request device [%02x:%02x.%d] PASID %x fault addr %llx [fault reason %02d] %s\n",
 
 
 
 
1814		       type ? "DMA Read" : "DMA Write",
1815		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
1816		       PCI_FUNC(source_id & 0xFF), pasid, addr,
1817		       fault_reason, reason);
 
 
 
 
 
 
 
 
 
1818	return 0;
1819}
1820
1821#define PRIMARY_FAULT_REG_LEN (16)
1822irqreturn_t dmar_fault(int irq, void *dev_id)
1823{
1824	struct intel_iommu *iommu = dev_id;
1825	int reg, fault_index;
1826	u32 fault_status;
1827	unsigned long flag;
1828	static DEFINE_RATELIMIT_STATE(rs,
1829				      DEFAULT_RATELIMIT_INTERVAL,
1830				      DEFAULT_RATELIMIT_BURST);
1831
1832	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1833	fault_status = readl(iommu->reg + DMAR_FSTS_REG);
1834	if (fault_status && __ratelimit(&rs))
1835		pr_err("DRHD: handling fault status reg %x\n", fault_status);
1836
1837	/* TBD: ignore advanced fault log currently */
1838	if (!(fault_status & DMA_FSTS_PPF))
1839		goto unlock_exit;
1840
1841	fault_index = dma_fsts_fault_record_index(fault_status);
1842	reg = cap_fault_reg_offset(iommu->cap);
1843	while (1) {
1844		/* Disable printing, simply clear the fault when ratelimited */
1845		bool ratelimited = !__ratelimit(&rs);
1846		u8 fault_reason;
1847		u16 source_id;
1848		u64 guest_addr;
1849		int type, pasid;
 
1850		u32 data;
1851		bool pasid_present;
1852
1853		/* highest 32 bits */
1854		data = readl(iommu->reg + reg +
1855				fault_index * PRIMARY_FAULT_REG_LEN + 12);
1856		if (!(data & DMA_FRCD_F))
1857			break;
1858
1859		if (!ratelimited) {
1860			fault_reason = dma_frcd_fault_reason(data);
1861			type = dma_frcd_type(data);
1862
1863			pasid = dma_frcd_pasid_value(data);
1864			data = readl(iommu->reg + reg +
1865				     fault_index * PRIMARY_FAULT_REG_LEN + 8);
1866			source_id = dma_frcd_source_id(data);
1867
1868			pasid_present = dma_frcd_pasid_present(data);
1869			guest_addr = dmar_readq(iommu->reg + reg +
1870					fault_index * PRIMARY_FAULT_REG_LEN);
1871			guest_addr = dma_frcd_page_addr(guest_addr);
1872		}
1873
1874		/* clear the fault */
1875		writel(DMA_FRCD_F, iommu->reg + reg +
1876			fault_index * PRIMARY_FAULT_REG_LEN + 12);
1877
1878		raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1879
1880		if (!ratelimited)
1881			/* Using pasid -1 if pasid is not present */
1882			dmar_fault_do_one(iommu, type, fault_reason,
1883					  pasid_present ? pasid : -1,
1884					  source_id, guest_addr);
1885
1886		fault_index++;
1887		if (fault_index >= cap_num_fault_regs(iommu->cap))
1888			fault_index = 0;
1889		raw_spin_lock_irqsave(&iommu->register_lock, flag);
1890	}
1891
1892	writel(DMA_FSTS_PFO | DMA_FSTS_PPF | DMA_FSTS_PRO,
1893	       iommu->reg + DMAR_FSTS_REG);
1894
1895unlock_exit:
1896	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1897	return IRQ_HANDLED;
1898}
1899
1900int dmar_set_interrupt(struct intel_iommu *iommu)
1901{
1902	int irq, ret;
1903
1904	/*
1905	 * Check if the fault interrupt is already initialized.
1906	 */
1907	if (iommu->irq)
1908		return 0;
1909
1910	irq = dmar_alloc_hwirq(iommu->seq_id, iommu->node, iommu);
1911	if (irq > 0) {
1912		iommu->irq = irq;
1913	} else {
1914		pr_err("No free IRQ vectors\n");
1915		return -EINVAL;
1916	}
1917
1918	ret = request_irq(irq, dmar_fault, IRQF_NO_THREAD, iommu->name, iommu);
1919	if (ret)
1920		pr_err("Can't request irq\n");
1921	return ret;
1922}
1923
1924int __init enable_drhd_fault_handling(void)
1925{
1926	struct dmar_drhd_unit *drhd;
1927	struct intel_iommu *iommu;
1928
1929	/*
1930	 * Enable fault control interrupt.
1931	 */
1932	for_each_iommu(iommu, drhd) {
1933		u32 fault_status;
1934		int ret = dmar_set_interrupt(iommu);
1935
1936		if (ret) {
1937			pr_err("DRHD %Lx: failed to enable fault, interrupt, ret %d\n",
1938			       (unsigned long long)drhd->reg_base_addr, ret);
1939			return -1;
1940		}
1941
1942		/*
1943		 * Clear any previous faults.
1944		 */
1945		dmar_fault(iommu->irq, iommu);
1946		fault_status = readl(iommu->reg + DMAR_FSTS_REG);
1947		writel(fault_status, iommu->reg + DMAR_FSTS_REG);
1948	}
1949
1950	return 0;
1951}
1952
1953/*
1954 * Re-enable Queued Invalidation interface.
1955 */
1956int dmar_reenable_qi(struct intel_iommu *iommu)
1957{
1958	if (!ecap_qis(iommu->ecap))
1959		return -ENOENT;
1960
1961	if (!iommu->qi)
1962		return -ENOENT;
1963
1964	/*
1965	 * First disable queued invalidation.
1966	 */
1967	dmar_disable_qi(iommu);
1968	/*
1969	 * Then enable queued invalidation again. Since there is no pending
1970	 * invalidation requests now, it's safe to re-enable queued
1971	 * invalidation.
1972	 */
1973	__dmar_enable_qi(iommu);
1974
1975	return 0;
1976}
1977
1978/*
1979 * Check interrupt remapping support in DMAR table description.
1980 */
1981int __init dmar_ir_support(void)
1982{
1983	struct acpi_table_dmar *dmar;
1984	dmar = (struct acpi_table_dmar *)dmar_tbl;
1985	if (!dmar)
1986		return 0;
1987	return dmar->flags & 0x1;
1988}
1989
1990/* Check whether DMAR units are in use */
1991static inline bool dmar_in_use(void)
1992{
1993	return irq_remapping_enabled || intel_iommu_enabled;
1994}
1995
1996static int __init dmar_free_unused_resources(void)
1997{
1998	struct dmar_drhd_unit *dmaru, *dmaru_n;
1999
2000	if (dmar_in_use())
2001		return 0;
2002
2003	if (dmar_dev_scope_status != 1 && !list_empty(&dmar_drhd_units))
2004		bus_unregister_notifier(&pci_bus_type, &dmar_pci_bus_nb);
2005
2006	down_write(&dmar_global_lock);
2007	list_for_each_entry_safe(dmaru, dmaru_n, &dmar_drhd_units, list) {
2008		list_del(&dmaru->list);
2009		dmar_free_drhd(dmaru);
2010	}
2011	up_write(&dmar_global_lock);
2012
2013	return 0;
2014}
2015
2016late_initcall(dmar_free_unused_resources);
2017IOMMU_INIT_POST(detect_intel_iommu);
2018
2019/*
2020 * DMAR Hotplug Support
2021 * For more details, please refer to Intel(R) Virtualization Technology
2022 * for Directed-IO Architecture Specifiction, Rev 2.2, Section 8.8
2023 * "Remapping Hardware Unit Hot Plug".
2024 */
2025static guid_t dmar_hp_guid =
2026	GUID_INIT(0xD8C1A3A6, 0xBE9B, 0x4C9B,
2027		  0x91, 0xBF, 0xC3, 0xCB, 0x81, 0xFC, 0x5D, 0xAF);
2028
2029/*
2030 * Currently there's only one revision and BIOS will not check the revision id,
2031 * so use 0 for safety.
2032 */
2033#define	DMAR_DSM_REV_ID			0
2034#define	DMAR_DSM_FUNC_DRHD		1
2035#define	DMAR_DSM_FUNC_ATSR		2
2036#define	DMAR_DSM_FUNC_RHSA		3
 
2037
2038static inline bool dmar_detect_dsm(acpi_handle handle, int func)
2039{
2040	return acpi_check_dsm(handle, &dmar_hp_guid, DMAR_DSM_REV_ID, 1 << func);
2041}
2042
2043static int dmar_walk_dsm_resource(acpi_handle handle, int func,
2044				  dmar_res_handler_t handler, void *arg)
2045{
2046	int ret = -ENODEV;
2047	union acpi_object *obj;
2048	struct acpi_dmar_header *start;
2049	struct dmar_res_callback callback;
2050	static int res_type[] = {
2051		[DMAR_DSM_FUNC_DRHD] = ACPI_DMAR_TYPE_HARDWARE_UNIT,
2052		[DMAR_DSM_FUNC_ATSR] = ACPI_DMAR_TYPE_ROOT_ATS,
2053		[DMAR_DSM_FUNC_RHSA] = ACPI_DMAR_TYPE_HARDWARE_AFFINITY,
 
2054	};
2055
2056	if (!dmar_detect_dsm(handle, func))
2057		return 0;
2058
2059	obj = acpi_evaluate_dsm_typed(handle, &dmar_hp_guid, DMAR_DSM_REV_ID,
2060				      func, NULL, ACPI_TYPE_BUFFER);
2061	if (!obj)
2062		return -ENODEV;
2063
2064	memset(&callback, 0, sizeof(callback));
2065	callback.cb[res_type[func]] = handler;
2066	callback.arg[res_type[func]] = arg;
2067	start = (struct acpi_dmar_header *)obj->buffer.pointer;
2068	ret = dmar_walk_remapping_entries(start, obj->buffer.length, &callback);
2069
2070	ACPI_FREE(obj);
2071
2072	return ret;
2073}
2074
2075static int dmar_hp_add_drhd(struct acpi_dmar_header *header, void *arg)
2076{
2077	int ret;
2078	struct dmar_drhd_unit *dmaru;
2079
2080	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2081	if (!dmaru)
2082		return -ENODEV;
2083
2084	ret = dmar_ir_hotplug(dmaru, true);
2085	if (ret == 0)
2086		ret = dmar_iommu_hotplug(dmaru, true);
2087
2088	return ret;
2089}
2090
2091static int dmar_hp_remove_drhd(struct acpi_dmar_header *header, void *arg)
2092{
2093	int i, ret;
2094	struct device *dev;
2095	struct dmar_drhd_unit *dmaru;
2096
2097	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2098	if (!dmaru)
2099		return 0;
2100
2101	/*
2102	 * All PCI devices managed by this unit should have been destroyed.
2103	 */
2104	if (!dmaru->include_all && dmaru->devices && dmaru->devices_cnt) {
2105		for_each_active_dev_scope(dmaru->devices,
2106					  dmaru->devices_cnt, i, dev)
2107			return -EBUSY;
2108	}
2109
2110	ret = dmar_ir_hotplug(dmaru, false);
2111	if (ret == 0)
2112		ret = dmar_iommu_hotplug(dmaru, false);
2113
2114	return ret;
2115}
2116
2117static int dmar_hp_release_drhd(struct acpi_dmar_header *header, void *arg)
2118{
2119	struct dmar_drhd_unit *dmaru;
2120
2121	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2122	if (dmaru) {
2123		list_del_rcu(&dmaru->list);
2124		synchronize_rcu();
2125		dmar_free_drhd(dmaru);
2126	}
2127
2128	return 0;
2129}
2130
2131static int dmar_hotplug_insert(acpi_handle handle)
2132{
2133	int ret;
2134	int drhd_count = 0;
2135
2136	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2137				     &dmar_validate_one_drhd, (void *)1);
2138	if (ret)
2139		goto out;
2140
2141	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2142				     &dmar_parse_one_drhd, (void *)&drhd_count);
2143	if (ret == 0 && drhd_count == 0) {
2144		pr_warn(FW_BUG "No DRHD structures in buffer returned by _DSM method\n");
2145		goto out;
2146	} else if (ret) {
2147		goto release_drhd;
2148	}
2149
2150	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_RHSA,
2151				     &dmar_parse_one_rhsa, NULL);
2152	if (ret)
2153		goto release_drhd;
2154
2155	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2156				     &dmar_parse_one_atsr, NULL);
2157	if (ret)
2158		goto release_atsr;
2159
2160	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2161				     &dmar_hp_add_drhd, NULL);
2162	if (!ret)
2163		return 0;
2164
2165	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2166			       &dmar_hp_remove_drhd, NULL);
2167release_atsr:
2168	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2169			       &dmar_release_one_atsr, NULL);
2170release_drhd:
2171	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2172			       &dmar_hp_release_drhd, NULL);
2173out:
2174	return ret;
2175}
2176
2177static int dmar_hotplug_remove(acpi_handle handle)
2178{
2179	int ret;
2180
2181	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2182				     &dmar_check_one_atsr, NULL);
2183	if (ret)
2184		return ret;
2185
2186	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2187				     &dmar_hp_remove_drhd, NULL);
2188	if (ret == 0) {
2189		WARN_ON(dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2190					       &dmar_release_one_atsr, NULL));
2191		WARN_ON(dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2192					       &dmar_hp_release_drhd, NULL));
2193	} else {
2194		dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2195				       &dmar_hp_add_drhd, NULL);
2196	}
2197
2198	return ret;
2199}
2200
2201static acpi_status dmar_get_dsm_handle(acpi_handle handle, u32 lvl,
2202				       void *context, void **retval)
2203{
2204	acpi_handle *phdl = retval;
2205
2206	if (dmar_detect_dsm(handle, DMAR_DSM_FUNC_DRHD)) {
2207		*phdl = handle;
2208		return AE_CTRL_TERMINATE;
2209	}
2210
2211	return AE_OK;
2212}
2213
2214static int dmar_device_hotplug(acpi_handle handle, bool insert)
2215{
2216	int ret;
2217	acpi_handle tmp = NULL;
2218	acpi_status status;
2219
2220	if (!dmar_in_use())
2221		return 0;
2222
2223	if (dmar_detect_dsm(handle, DMAR_DSM_FUNC_DRHD)) {
2224		tmp = handle;
2225	} else {
2226		status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
2227					     ACPI_UINT32_MAX,
2228					     dmar_get_dsm_handle,
2229					     NULL, NULL, &tmp);
2230		if (ACPI_FAILURE(status)) {
2231			pr_warn("Failed to locate _DSM method.\n");
2232			return -ENXIO;
2233		}
2234	}
2235	if (tmp == NULL)
2236		return 0;
2237
2238	down_write(&dmar_global_lock);
2239	if (insert)
2240		ret = dmar_hotplug_insert(tmp);
2241	else
2242		ret = dmar_hotplug_remove(tmp);
2243	up_write(&dmar_global_lock);
2244
2245	return ret;
2246}
2247
2248int dmar_device_add(acpi_handle handle)
2249{
2250	return dmar_device_hotplug(handle, true);
2251}
2252
2253int dmar_device_remove(acpi_handle handle)
2254{
2255	return dmar_device_hotplug(handle, false);
2256}
2257
2258/*
2259 * dmar_platform_optin - Is %DMA_CTRL_PLATFORM_OPT_IN_FLAG set in DMAR table
2260 *
2261 * Returns true if the platform has %DMA_CTRL_PLATFORM_OPT_IN_FLAG set in
2262 * the ACPI DMAR table. This means that the platform boot firmware has made
2263 * sure no device can issue DMA outside of RMRR regions.
2264 */
2265bool dmar_platform_optin(void)
2266{
2267	struct acpi_table_dmar *dmar;
2268	acpi_status status;
2269	bool ret;
2270
2271	status = acpi_get_table(ACPI_SIG_DMAR, 0,
2272				(struct acpi_table_header **)&dmar);
2273	if (ACPI_FAILURE(status))
2274		return false;
2275
2276	ret = !!(dmar->flags & DMAR_PLATFORM_OPT_IN);
2277	acpi_put_table((struct acpi_table_header *)dmar);
2278
2279	return ret;
2280}
2281EXPORT_SYMBOL_GPL(dmar_platform_optin);
v6.9.4
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2006, Intel Corporation.
   4 *
   5 * Copyright (C) 2006-2008 Intel Corporation
   6 * Author: Ashok Raj <ashok.raj@intel.com>
   7 * Author: Shaohua Li <shaohua.li@intel.com>
   8 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
   9 *
  10 * This file implements early detection/parsing of Remapping Devices
  11 * reported to OS through BIOS via DMA remapping reporting (DMAR) ACPI
  12 * tables.
  13 *
  14 * These routines are used by both DMA-remapping and Interrupt-remapping
  15 */
  16
  17#define pr_fmt(fmt)     "DMAR: " fmt
  18
  19#include <linux/pci.h>
  20#include <linux/dmar.h>
  21#include <linux/iova.h>
 
  22#include <linux/timer.h>
  23#include <linux/irq.h>
  24#include <linux/interrupt.h>
  25#include <linux/tboot.h>
  26#include <linux/dmi.h>
  27#include <linux/slab.h>
  28#include <linux/iommu.h>
  29#include <linux/numa.h>
  30#include <linux/limits.h>
  31#include <asm/irq_remapping.h>
 
  32
  33#include "iommu.h"
  34#include "../irq_remapping.h"
  35#include "perf.h"
  36#include "trace.h"
  37#include "perfmon.h"
  38
  39typedef int (*dmar_res_handler_t)(struct acpi_dmar_header *, void *);
  40struct dmar_res_callback {
  41	dmar_res_handler_t	cb[ACPI_DMAR_TYPE_RESERVED];
  42	void			*arg[ACPI_DMAR_TYPE_RESERVED];
  43	bool			ignore_unhandled;
  44	bool			print_entry;
  45};
  46
  47/*
  48 * Assumptions:
  49 * 1) The hotplug framework guarentees that DMAR unit will be hot-added
  50 *    before IO devices managed by that unit.
  51 * 2) The hotplug framework guarantees that DMAR unit will be hot-removed
  52 *    after IO devices managed by that unit.
  53 * 3) Hotplug events are rare.
  54 *
  55 * Locking rules for DMA and interrupt remapping related global data structures:
  56 * 1) Use dmar_global_lock in process context
  57 * 2) Use RCU in interrupt context
  58 */
  59DECLARE_RWSEM(dmar_global_lock);
  60LIST_HEAD(dmar_drhd_units);
  61
  62struct acpi_table_header * __initdata dmar_tbl;
  63static int dmar_dev_scope_status = 1;
  64static DEFINE_IDA(dmar_seq_ids);
  65
  66static int alloc_iommu(struct dmar_drhd_unit *drhd);
  67static void free_iommu(struct intel_iommu *iommu);
  68
 
 
  69static void dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
  70{
  71	/*
  72	 * add INCLUDE_ALL at the tail, so scan the list will find it at
  73	 * the very end.
  74	 */
  75	if (drhd->include_all)
  76		list_add_tail_rcu(&drhd->list, &dmar_drhd_units);
  77	else
  78		list_add_rcu(&drhd->list, &dmar_drhd_units);
  79}
  80
  81void *dmar_alloc_dev_scope(void *start, void *end, int *cnt)
  82{
  83	struct acpi_dmar_device_scope *scope;
  84
  85	*cnt = 0;
  86	while (start < end) {
  87		scope = start;
  88		if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_NAMESPACE ||
  89		    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
  90		    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)
  91			(*cnt)++;
  92		else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC &&
  93			scope->entry_type != ACPI_DMAR_SCOPE_TYPE_HPET) {
  94			pr_warn("Unsupported device scope\n");
  95		}
  96		start += scope->length;
  97	}
  98	if (*cnt == 0)
  99		return NULL;
 100
 101	return kcalloc(*cnt, sizeof(struct dmar_dev_scope), GFP_KERNEL);
 102}
 103
 104void dmar_free_dev_scope(struct dmar_dev_scope **devices, int *cnt)
 105{
 106	int i;
 107	struct device *tmp_dev;
 108
 109	if (*devices && *cnt) {
 110		for_each_active_dev_scope(*devices, *cnt, i, tmp_dev)
 111			put_device(tmp_dev);
 112		kfree(*devices);
 113	}
 114
 115	*devices = NULL;
 116	*cnt = 0;
 117}
 118
 119/* Optimize out kzalloc()/kfree() for normal cases */
 120static char dmar_pci_notify_info_buf[64];
 121
 122static struct dmar_pci_notify_info *
 123dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event)
 124{
 125	int level = 0;
 126	size_t size;
 127	struct pci_dev *tmp;
 128	struct dmar_pci_notify_info *info;
 129
 
 
 130	/*
 131	 * Ignore devices that have a domain number higher than what can
 132	 * be looked up in DMAR, e.g. VMD subdevices with domain 0x10000
 133	 */
 134	if (pci_domain_nr(dev->bus) > U16_MAX)
 135		return NULL;
 136
 137	/* Only generate path[] for device addition event */
 138	if (event == BUS_NOTIFY_ADD_DEVICE)
 139		for (tmp = dev; tmp; tmp = tmp->bus->self)
 140			level++;
 141
 142	size = struct_size(info, path, level);
 143	if (size <= sizeof(dmar_pci_notify_info_buf)) {
 144		info = (struct dmar_pci_notify_info *)dmar_pci_notify_info_buf;
 145	} else {
 146		info = kzalloc(size, GFP_KERNEL);
 147		if (!info) {
 
 
 148			if (dmar_dev_scope_status == 0)
 149				dmar_dev_scope_status = -ENOMEM;
 150			return NULL;
 151		}
 152	}
 153
 154	info->event = event;
 155	info->dev = dev;
 156	info->seg = pci_domain_nr(dev->bus);
 157	info->level = level;
 158	if (event == BUS_NOTIFY_ADD_DEVICE) {
 159		for (tmp = dev; tmp; tmp = tmp->bus->self) {
 160			level--;
 161			info->path[level].bus = tmp->bus->number;
 162			info->path[level].device = PCI_SLOT(tmp->devfn);
 163			info->path[level].function = PCI_FUNC(tmp->devfn);
 164			if (pci_is_root_bus(tmp->bus))
 165				info->bus = tmp->bus->number;
 166		}
 167	}
 168
 169	return info;
 170}
 171
 172static inline void dmar_free_pci_notify_info(struct dmar_pci_notify_info *info)
 173{
 174	if ((void *)info != dmar_pci_notify_info_buf)
 175		kfree(info);
 176}
 177
 178static bool dmar_match_pci_path(struct dmar_pci_notify_info *info, int bus,
 179				struct acpi_dmar_pci_path *path, int count)
 180{
 181	int i;
 182
 183	if (info->bus != bus)
 184		goto fallback;
 185	if (info->level != count)
 186		goto fallback;
 187
 188	for (i = 0; i < count; i++) {
 189		if (path[i].device != info->path[i].device ||
 190		    path[i].function != info->path[i].function)
 191			goto fallback;
 192	}
 193
 194	return true;
 195
 196fallback:
 197
 198	if (count != 1)
 199		return false;
 200
 201	i = info->level - 1;
 202	if (bus              == info->path[i].bus &&
 203	    path[0].device   == info->path[i].device &&
 204	    path[0].function == info->path[i].function) {
 205		pr_info(FW_BUG "RMRR entry for device %02x:%02x.%x is broken - applying workaround\n",
 206			bus, path[0].device, path[0].function);
 207		return true;
 208	}
 209
 210	return false;
 211}
 212
 213/* Return: > 0 if match found, 0 if no match found, < 0 if error happens */
 214int dmar_insert_dev_scope(struct dmar_pci_notify_info *info,
 215			  void *start, void*end, u16 segment,
 216			  struct dmar_dev_scope *devices,
 217			  int devices_cnt)
 218{
 219	int i, level;
 220	struct device *tmp, *dev = &info->dev->dev;
 221	struct acpi_dmar_device_scope *scope;
 222	struct acpi_dmar_pci_path *path;
 223
 224	if (segment != info->seg)
 225		return 0;
 226
 227	for (; start < end; start += scope->length) {
 228		scope = start;
 229		if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_ENDPOINT &&
 230		    scope->entry_type != ACPI_DMAR_SCOPE_TYPE_BRIDGE)
 231			continue;
 232
 233		path = (struct acpi_dmar_pci_path *)(scope + 1);
 234		level = (scope->length - sizeof(*scope)) / sizeof(*path);
 235		if (!dmar_match_pci_path(info, scope->bus, path, level))
 236			continue;
 237
 238		/*
 239		 * We expect devices with endpoint scope to have normal PCI
 240		 * headers, and devices with bridge scope to have bridge PCI
 241		 * headers.  However PCI NTB devices may be listed in the
 242		 * DMAR table with bridge scope, even though they have a
 243		 * normal PCI header.  NTB devices are identified by class
 244		 * "BRIDGE_OTHER" (0680h) - we don't declare a socpe mismatch
 245		 * for this special case.
 246		 */
 247		if ((scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT &&
 248		     info->dev->hdr_type != PCI_HEADER_TYPE_NORMAL) ||
 249		    (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE &&
 250		     (info->dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
 251		      info->dev->class >> 16 != PCI_BASE_CLASS_BRIDGE))) {
 252			pr_warn("Device scope type does not match for %s\n",
 253				pci_name(info->dev));
 254			return -EINVAL;
 255		}
 256
 257		for_each_dev_scope(devices, devices_cnt, i, tmp)
 258			if (tmp == NULL) {
 259				devices[i].bus = info->dev->bus->number;
 260				devices[i].devfn = info->dev->devfn;
 261				rcu_assign_pointer(devices[i].dev,
 262						   get_device(dev));
 263				return 1;
 264			}
 265		if (WARN_ON(i >= devices_cnt))
 266			return -EINVAL;
 267	}
 268
 269	return 0;
 270}
 271
 272int dmar_remove_dev_scope(struct dmar_pci_notify_info *info, u16 segment,
 273			  struct dmar_dev_scope *devices, int count)
 274{
 275	int index;
 276	struct device *tmp;
 277
 278	if (info->seg != segment)
 279		return 0;
 280
 281	for_each_active_dev_scope(devices, count, index, tmp)
 282		if (tmp == &info->dev->dev) {
 283			RCU_INIT_POINTER(devices[index].dev, NULL);
 284			synchronize_rcu();
 285			put_device(tmp);
 286			return 1;
 287		}
 288
 289	return 0;
 290}
 291
 292static int dmar_pci_bus_add_dev(struct dmar_pci_notify_info *info)
 293{
 294	int ret = 0;
 295	struct dmar_drhd_unit *dmaru;
 296	struct acpi_dmar_hardware_unit *drhd;
 297
 298	for_each_drhd_unit(dmaru) {
 299		if (dmaru->include_all)
 300			continue;
 301
 302		drhd = container_of(dmaru->hdr,
 303				    struct acpi_dmar_hardware_unit, header);
 304		ret = dmar_insert_dev_scope(info, (void *)(drhd + 1),
 305				((void *)drhd) + drhd->header.length,
 306				dmaru->segment,
 307				dmaru->devices, dmaru->devices_cnt);
 308		if (ret)
 309			break;
 310	}
 311	if (ret >= 0)
 312		ret = dmar_iommu_notify_scope_dev(info);
 313	if (ret < 0 && dmar_dev_scope_status == 0)
 314		dmar_dev_scope_status = ret;
 315
 316	if (ret >= 0)
 317		intel_irq_remap_add_device(info);
 318
 319	return ret;
 320}
 321
 322static void  dmar_pci_bus_del_dev(struct dmar_pci_notify_info *info)
 323{
 324	struct dmar_drhd_unit *dmaru;
 325
 326	for_each_drhd_unit(dmaru)
 327		if (dmar_remove_dev_scope(info, dmaru->segment,
 328			dmaru->devices, dmaru->devices_cnt))
 329			break;
 330	dmar_iommu_notify_scope_dev(info);
 331}
 332
 333static inline void vf_inherit_msi_domain(struct pci_dev *pdev)
 334{
 335	struct pci_dev *physfn = pci_physfn(pdev);
 336
 337	dev_set_msi_domain(&pdev->dev, dev_get_msi_domain(&physfn->dev));
 338}
 339
 340static int dmar_pci_bus_notifier(struct notifier_block *nb,
 341				 unsigned long action, void *data)
 342{
 343	struct pci_dev *pdev = to_pci_dev(data);
 344	struct dmar_pci_notify_info *info;
 345
 346	/* Only care about add/remove events for physical functions.
 347	 * For VFs we actually do the lookup based on the corresponding
 348	 * PF in device_to_iommu() anyway. */
 349	if (pdev->is_virtfn) {
 350		/*
 351		 * Ensure that the VF device inherits the irq domain of the
 352		 * PF device. Ideally the device would inherit the domain
 353		 * from the bus, but DMAR can have multiple units per bus
 354		 * which makes this impossible. The VF 'bus' could inherit
 355		 * from the PF device, but that's yet another x86'sism to
 356		 * inflict on everybody else.
 357		 */
 358		if (action == BUS_NOTIFY_ADD_DEVICE)
 359			vf_inherit_msi_domain(pdev);
 360		return NOTIFY_DONE;
 361	}
 362
 363	if (action != BUS_NOTIFY_ADD_DEVICE &&
 364	    action != BUS_NOTIFY_REMOVED_DEVICE)
 365		return NOTIFY_DONE;
 366
 367	info = dmar_alloc_pci_notify_info(pdev, action);
 368	if (!info)
 369		return NOTIFY_DONE;
 370
 371	down_write(&dmar_global_lock);
 372	if (action == BUS_NOTIFY_ADD_DEVICE)
 373		dmar_pci_bus_add_dev(info);
 374	else if (action == BUS_NOTIFY_REMOVED_DEVICE)
 375		dmar_pci_bus_del_dev(info);
 376	up_write(&dmar_global_lock);
 377
 378	dmar_free_pci_notify_info(info);
 379
 380	return NOTIFY_OK;
 381}
 382
 383static struct notifier_block dmar_pci_bus_nb = {
 384	.notifier_call = dmar_pci_bus_notifier,
 385	.priority = 1,
 386};
 387
 388static struct dmar_drhd_unit *
 389dmar_find_dmaru(struct acpi_dmar_hardware_unit *drhd)
 390{
 391	struct dmar_drhd_unit *dmaru;
 392
 393	list_for_each_entry_rcu(dmaru, &dmar_drhd_units, list,
 394				dmar_rcu_check())
 395		if (dmaru->segment == drhd->segment &&
 396		    dmaru->reg_base_addr == drhd->address)
 397			return dmaru;
 398
 399	return NULL;
 400}
 401
 402/*
 403 * dmar_parse_one_drhd - parses exactly one DMA remapping hardware definition
 404 * structure which uniquely represent one DMA remapping hardware unit
 405 * present in the platform
 406 */
 407static int dmar_parse_one_drhd(struct acpi_dmar_header *header, void *arg)
 408{
 409	struct acpi_dmar_hardware_unit *drhd;
 410	struct dmar_drhd_unit *dmaru;
 411	int ret;
 412
 413	drhd = (struct acpi_dmar_hardware_unit *)header;
 414	dmaru = dmar_find_dmaru(drhd);
 415	if (dmaru)
 416		goto out;
 417
 418	dmaru = kzalloc(sizeof(*dmaru) + header->length, GFP_KERNEL);
 419	if (!dmaru)
 420		return -ENOMEM;
 421
 422	/*
 423	 * If header is allocated from slab by ACPI _DSM method, we need to
 424	 * copy the content because the memory buffer will be freed on return.
 425	 */
 426	dmaru->hdr = (void *)(dmaru + 1);
 427	memcpy(dmaru->hdr, header, header->length);
 428	dmaru->reg_base_addr = drhd->address;
 429	dmaru->segment = drhd->segment;
 430	/* The size of the register set is 2 ^ N 4 KB pages. */
 431	dmaru->reg_size = 1UL << (drhd->size + 12);
 432	dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
 433	dmaru->devices = dmar_alloc_dev_scope((void *)(drhd + 1),
 434					      ((void *)drhd) + drhd->header.length,
 435					      &dmaru->devices_cnt);
 436	if (dmaru->devices_cnt && dmaru->devices == NULL) {
 437		kfree(dmaru);
 438		return -ENOMEM;
 439	}
 440
 441	ret = alloc_iommu(dmaru);
 442	if (ret) {
 443		dmar_free_dev_scope(&dmaru->devices,
 444				    &dmaru->devices_cnt);
 445		kfree(dmaru);
 446		return ret;
 447	}
 448	dmar_register_drhd_unit(dmaru);
 449
 450out:
 451	if (arg)
 452		(*(int *)arg)++;
 453
 454	return 0;
 455}
 456
 457static void dmar_free_drhd(struct dmar_drhd_unit *dmaru)
 458{
 459	if (dmaru->devices && dmaru->devices_cnt)
 460		dmar_free_dev_scope(&dmaru->devices, &dmaru->devices_cnt);
 461	if (dmaru->iommu)
 462		free_iommu(dmaru->iommu);
 463	kfree(dmaru);
 464}
 465
 466static int __init dmar_parse_one_andd(struct acpi_dmar_header *header,
 467				      void *arg)
 468{
 469	struct acpi_dmar_andd *andd = (void *)header;
 470
 471	/* Check for NUL termination within the designated length */
 472	if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {
 473		pr_warn(FW_BUG
 474			   "Your BIOS is broken; ANDD object name is not NUL-terminated\n"
 475			   "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 476			   dmi_get_system_info(DMI_BIOS_VENDOR),
 477			   dmi_get_system_info(DMI_BIOS_VERSION),
 478			   dmi_get_system_info(DMI_PRODUCT_VERSION));
 479		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 480		return -EINVAL;
 481	}
 482	pr_info("ANDD device: %x name: %s\n", andd->device_number,
 483		andd->device_name);
 484
 485	return 0;
 486}
 487
 488#ifdef CONFIG_ACPI_NUMA
 489static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg)
 490{
 491	struct acpi_dmar_rhsa *rhsa;
 492	struct dmar_drhd_unit *drhd;
 493
 494	rhsa = (struct acpi_dmar_rhsa *)header;
 495	for_each_drhd_unit(drhd) {
 496		if (drhd->reg_base_addr == rhsa->base_address) {
 497			int node = pxm_to_node(rhsa->proximity_domain);
 498
 499			if (node != NUMA_NO_NODE && !node_online(node))
 500				node = NUMA_NO_NODE;
 501			drhd->iommu->node = node;
 502			return 0;
 503		}
 504	}
 505	pr_warn(FW_BUG
 506		"Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
 507		"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 508		rhsa->base_address,
 509		dmi_get_system_info(DMI_BIOS_VENDOR),
 510		dmi_get_system_info(DMI_BIOS_VERSION),
 511		dmi_get_system_info(DMI_PRODUCT_VERSION));
 512	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 513
 514	return 0;
 515}
 516#else
 517#define	dmar_parse_one_rhsa		dmar_res_noop
 518#endif
 519
 520static void
 521dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
 522{
 523	struct acpi_dmar_hardware_unit *drhd;
 524	struct acpi_dmar_reserved_memory *rmrr;
 525	struct acpi_dmar_atsr *atsr;
 526	struct acpi_dmar_rhsa *rhsa;
 527	struct acpi_dmar_satc *satc;
 528
 529	switch (header->type) {
 530	case ACPI_DMAR_TYPE_HARDWARE_UNIT:
 531		drhd = container_of(header, struct acpi_dmar_hardware_unit,
 532				    header);
 533		pr_info("DRHD base: %#016Lx flags: %#x\n",
 534			(unsigned long long)drhd->address, drhd->flags);
 535		break;
 536	case ACPI_DMAR_TYPE_RESERVED_MEMORY:
 537		rmrr = container_of(header, struct acpi_dmar_reserved_memory,
 538				    header);
 539		pr_info("RMRR base: %#016Lx end: %#016Lx\n",
 540			(unsigned long long)rmrr->base_address,
 541			(unsigned long long)rmrr->end_address);
 542		break;
 543	case ACPI_DMAR_TYPE_ROOT_ATS:
 544		atsr = container_of(header, struct acpi_dmar_atsr, header);
 545		pr_info("ATSR flags: %#x\n", atsr->flags);
 546		break;
 547	case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
 548		rhsa = container_of(header, struct acpi_dmar_rhsa, header);
 549		pr_info("RHSA base: %#016Lx proximity domain: %#x\n",
 550		       (unsigned long long)rhsa->base_address,
 551		       rhsa->proximity_domain);
 552		break;
 553	case ACPI_DMAR_TYPE_NAMESPACE:
 554		/* We don't print this here because we need to sanity-check
 555		   it first. So print it in dmar_parse_one_andd() instead. */
 556		break;
 557	case ACPI_DMAR_TYPE_SATC:
 558		satc = container_of(header, struct acpi_dmar_satc, header);
 559		pr_info("SATC flags: 0x%x\n", satc->flags);
 560		break;
 561	}
 562}
 563
 564/**
 565 * dmar_table_detect - checks to see if the platform supports DMAR devices
 566 */
 567static int __init dmar_table_detect(void)
 568{
 569	acpi_status status = AE_OK;
 570
 571	/* if we could find DMAR table, then there are DMAR devices */
 572	status = acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_tbl);
 573
 574	if (ACPI_SUCCESS(status) && !dmar_tbl) {
 575		pr_warn("Unable to map DMAR\n");
 576		status = AE_NOT_FOUND;
 577	}
 578
 579	return ACPI_SUCCESS(status) ? 0 : -ENOENT;
 580}
 581
 582static int dmar_walk_remapping_entries(struct acpi_dmar_header *start,
 583				       size_t len, struct dmar_res_callback *cb)
 584{
 585	struct acpi_dmar_header *iter, *next;
 586	struct acpi_dmar_header *end = ((void *)start) + len;
 587
 588	for (iter = start; iter < end; iter = next) {
 589		next = (void *)iter + iter->length;
 590		if (iter->length == 0) {
 591			/* Avoid looping forever on bad ACPI tables */
 592			pr_debug(FW_BUG "Invalid 0-length structure\n");
 593			break;
 594		} else if (next > end) {
 595			/* Avoid passing table end */
 596			pr_warn(FW_BUG "Record passes table end\n");
 597			return -EINVAL;
 598		}
 599
 600		if (cb->print_entry)
 601			dmar_table_print_dmar_entry(iter);
 602
 603		if (iter->type >= ACPI_DMAR_TYPE_RESERVED) {
 604			/* continue for forward compatibility */
 605			pr_debug("Unknown DMAR structure type %d\n",
 606				 iter->type);
 607		} else if (cb->cb[iter->type]) {
 608			int ret;
 609
 610			ret = cb->cb[iter->type](iter, cb->arg[iter->type]);
 611			if (ret)
 612				return ret;
 613		} else if (!cb->ignore_unhandled) {
 614			pr_warn("No handler for DMAR structure type %d\n",
 615				iter->type);
 616			return -EINVAL;
 617		}
 618	}
 619
 620	return 0;
 621}
 622
 623static inline int dmar_walk_dmar_table(struct acpi_table_dmar *dmar,
 624				       struct dmar_res_callback *cb)
 625{
 626	return dmar_walk_remapping_entries((void *)(dmar + 1),
 627			dmar->header.length - sizeof(*dmar), cb);
 628}
 629
 630/**
 631 * parse_dmar_table - parses the DMA reporting table
 632 */
 633static int __init
 634parse_dmar_table(void)
 635{
 636	struct acpi_table_dmar *dmar;
 637	int drhd_count = 0;
 638	int ret;
 639	struct dmar_res_callback cb = {
 640		.print_entry = true,
 641		.ignore_unhandled = true,
 642		.arg[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &drhd_count,
 643		.cb[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &dmar_parse_one_drhd,
 644		.cb[ACPI_DMAR_TYPE_RESERVED_MEMORY] = &dmar_parse_one_rmrr,
 645		.cb[ACPI_DMAR_TYPE_ROOT_ATS] = &dmar_parse_one_atsr,
 646		.cb[ACPI_DMAR_TYPE_HARDWARE_AFFINITY] = &dmar_parse_one_rhsa,
 647		.cb[ACPI_DMAR_TYPE_NAMESPACE] = &dmar_parse_one_andd,
 648		.cb[ACPI_DMAR_TYPE_SATC] = &dmar_parse_one_satc,
 649	};
 650
 651	/*
 652	 * Do it again, earlier dmar_tbl mapping could be mapped with
 653	 * fixed map.
 654	 */
 655	dmar_table_detect();
 656
 657	/*
 658	 * ACPI tables may not be DMA protected by tboot, so use DMAR copy
 659	 * SINIT saved in SinitMleData in TXT heap (which is DMA protected)
 660	 */
 661	dmar_tbl = tboot_get_dmar_table(dmar_tbl);
 662
 663	dmar = (struct acpi_table_dmar *)dmar_tbl;
 664	if (!dmar)
 665		return -ENODEV;
 666
 667	if (dmar->width < PAGE_SHIFT - 1) {
 668		pr_warn("Invalid DMAR haw\n");
 669		return -EINVAL;
 670	}
 671
 672	pr_info("Host address width %d\n", dmar->width + 1);
 673	ret = dmar_walk_dmar_table(dmar, &cb);
 674	if (ret == 0 && drhd_count == 0)
 675		pr_warn(FW_BUG "No DRHD structure found in DMAR table\n");
 676
 677	return ret;
 678}
 679
 680static int dmar_pci_device_match(struct dmar_dev_scope devices[],
 681				 int cnt, struct pci_dev *dev)
 682{
 683	int index;
 684	struct device *tmp;
 685
 686	while (dev) {
 687		for_each_active_dev_scope(devices, cnt, index, tmp)
 688			if (dev_is_pci(tmp) && dev == to_pci_dev(tmp))
 689				return 1;
 690
 691		/* Check our parent */
 692		dev = dev->bus->self;
 693	}
 694
 695	return 0;
 696}
 697
 698struct dmar_drhd_unit *
 699dmar_find_matched_drhd_unit(struct pci_dev *dev)
 700{
 701	struct dmar_drhd_unit *dmaru;
 702	struct acpi_dmar_hardware_unit *drhd;
 703
 704	dev = pci_physfn(dev);
 705
 706	rcu_read_lock();
 707	for_each_drhd_unit(dmaru) {
 708		drhd = container_of(dmaru->hdr,
 709				    struct acpi_dmar_hardware_unit,
 710				    header);
 711
 712		if (dmaru->include_all &&
 713		    drhd->segment == pci_domain_nr(dev->bus))
 714			goto out;
 715
 716		if (dmar_pci_device_match(dmaru->devices,
 717					  dmaru->devices_cnt, dev))
 718			goto out;
 719	}
 720	dmaru = NULL;
 721out:
 722	rcu_read_unlock();
 723
 724	return dmaru;
 725}
 726
 727static void __init dmar_acpi_insert_dev_scope(u8 device_number,
 728					      struct acpi_device *adev)
 729{
 730	struct dmar_drhd_unit *dmaru;
 731	struct acpi_dmar_hardware_unit *drhd;
 732	struct acpi_dmar_device_scope *scope;
 733	struct device *tmp;
 734	int i;
 735	struct acpi_dmar_pci_path *path;
 736
 737	for_each_drhd_unit(dmaru) {
 738		drhd = container_of(dmaru->hdr,
 739				    struct acpi_dmar_hardware_unit,
 740				    header);
 741
 742		for (scope = (void *)(drhd + 1);
 743		     (unsigned long)scope < ((unsigned long)drhd) + drhd->header.length;
 744		     scope = ((void *)scope) + scope->length) {
 745			if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_NAMESPACE)
 746				continue;
 747			if (scope->enumeration_id != device_number)
 748				continue;
 749
 750			path = (void *)(scope + 1);
 751			pr_info("ACPI device \"%s\" under DMAR at %llx as %02x:%02x.%d\n",
 752				dev_name(&adev->dev), dmaru->reg_base_addr,
 753				scope->bus, path->device, path->function);
 754			for_each_dev_scope(dmaru->devices, dmaru->devices_cnt, i, tmp)
 755				if (tmp == NULL) {
 756					dmaru->devices[i].bus = scope->bus;
 757					dmaru->devices[i].devfn = PCI_DEVFN(path->device,
 758									    path->function);
 759					rcu_assign_pointer(dmaru->devices[i].dev,
 760							   get_device(&adev->dev));
 761					return;
 762				}
 763			BUG_ON(i >= dmaru->devices_cnt);
 764		}
 765	}
 766	pr_warn("No IOMMU scope found for ANDD enumeration ID %d (%s)\n",
 767		device_number, dev_name(&adev->dev));
 768}
 769
 770static int __init dmar_acpi_dev_scope_init(void)
 771{
 772	struct acpi_dmar_andd *andd;
 773
 774	if (dmar_tbl == NULL)
 775		return -ENODEV;
 776
 777	for (andd = (void *)dmar_tbl + sizeof(struct acpi_table_dmar);
 778	     ((unsigned long)andd) < ((unsigned long)dmar_tbl) + dmar_tbl->length;
 779	     andd = ((void *)andd) + andd->header.length) {
 780		if (andd->header.type == ACPI_DMAR_TYPE_NAMESPACE) {
 781			acpi_handle h;
 782			struct acpi_device *adev;
 783
 784			if (!ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT,
 785							  andd->device_name,
 786							  &h))) {
 787				pr_err("Failed to find handle for ACPI object %s\n",
 788				       andd->device_name);
 789				continue;
 790			}
 791			adev = acpi_fetch_acpi_dev(h);
 792			if (!adev) {
 793				pr_err("Failed to get device for ACPI object %s\n",
 794				       andd->device_name);
 795				continue;
 796			}
 797			dmar_acpi_insert_dev_scope(andd->device_number, adev);
 798		}
 799	}
 800	return 0;
 801}
 802
 803int __init dmar_dev_scope_init(void)
 804{
 805	struct pci_dev *dev = NULL;
 806	struct dmar_pci_notify_info *info;
 807
 808	if (dmar_dev_scope_status != 1)
 809		return dmar_dev_scope_status;
 810
 811	if (list_empty(&dmar_drhd_units)) {
 812		dmar_dev_scope_status = -ENODEV;
 813	} else {
 814		dmar_dev_scope_status = 0;
 815
 816		dmar_acpi_dev_scope_init();
 817
 818		for_each_pci_dev(dev) {
 819			if (dev->is_virtfn)
 820				continue;
 821
 822			info = dmar_alloc_pci_notify_info(dev,
 823					BUS_NOTIFY_ADD_DEVICE);
 824			if (!info) {
 825				pci_dev_put(dev);
 826				return dmar_dev_scope_status;
 827			} else {
 828				dmar_pci_bus_add_dev(info);
 829				dmar_free_pci_notify_info(info);
 830			}
 831		}
 832	}
 833
 834	return dmar_dev_scope_status;
 835}
 836
 837void __init dmar_register_bus_notifier(void)
 838{
 839	bus_register_notifier(&pci_bus_type, &dmar_pci_bus_nb);
 840}
 841
 842
 843int __init dmar_table_init(void)
 844{
 845	static int dmar_table_initialized;
 846	int ret;
 847
 848	if (dmar_table_initialized == 0) {
 849		ret = parse_dmar_table();
 850		if (ret < 0) {
 851			if (ret != -ENODEV)
 852				pr_info("Parse DMAR table failure.\n");
 853		} else  if (list_empty(&dmar_drhd_units)) {
 854			pr_info("No DMAR devices found\n");
 855			ret = -ENODEV;
 856		}
 857
 858		if (ret < 0)
 859			dmar_table_initialized = ret;
 860		else
 861			dmar_table_initialized = 1;
 862	}
 863
 864	return dmar_table_initialized < 0 ? dmar_table_initialized : 0;
 865}
 866
 867static void warn_invalid_dmar(u64 addr, const char *message)
 868{
 869	pr_warn_once(FW_BUG
 870		"Your BIOS is broken; DMAR reported at address %llx%s!\n"
 871		"BIOS vendor: %s; Ver: %s; Product Version: %s\n",
 872		addr, message,
 873		dmi_get_system_info(DMI_BIOS_VENDOR),
 874		dmi_get_system_info(DMI_BIOS_VERSION),
 875		dmi_get_system_info(DMI_PRODUCT_VERSION));
 876	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
 877}
 878
 879static int __ref
 880dmar_validate_one_drhd(struct acpi_dmar_header *entry, void *arg)
 881{
 882	struct acpi_dmar_hardware_unit *drhd;
 883	void __iomem *addr;
 884	u64 cap, ecap;
 885
 886	drhd = (void *)entry;
 887	if (!drhd->address) {
 888		warn_invalid_dmar(0, "");
 889		return -EINVAL;
 890	}
 891
 892	if (arg)
 893		addr = ioremap(drhd->address, VTD_PAGE_SIZE);
 894	else
 895		addr = early_ioremap(drhd->address, VTD_PAGE_SIZE);
 896	if (!addr) {
 897		pr_warn("Can't validate DRHD address: %llx\n", drhd->address);
 898		return -EINVAL;
 899	}
 900
 901	cap = dmar_readq(addr + DMAR_CAP_REG);
 902	ecap = dmar_readq(addr + DMAR_ECAP_REG);
 903
 904	if (arg)
 905		iounmap(addr);
 906	else
 907		early_iounmap(addr, VTD_PAGE_SIZE);
 908
 909	if (cap == (uint64_t)-1 && ecap == (uint64_t)-1) {
 910		warn_invalid_dmar(drhd->address, " returns all ones");
 911		return -EINVAL;
 912	}
 913
 914	return 0;
 915}
 916
 917void __init detect_intel_iommu(void)
 918{
 919	int ret;
 920	struct dmar_res_callback validate_drhd_cb = {
 921		.cb[ACPI_DMAR_TYPE_HARDWARE_UNIT] = &dmar_validate_one_drhd,
 922		.ignore_unhandled = true,
 923	};
 924
 925	down_write(&dmar_global_lock);
 926	ret = dmar_table_detect();
 927	if (!ret)
 928		ret = dmar_walk_dmar_table((struct acpi_table_dmar *)dmar_tbl,
 929					   &validate_drhd_cb);
 930	if (!ret && !no_iommu && !iommu_detected &&
 931	    (!dmar_disabled || dmar_platform_optin())) {
 932		iommu_detected = 1;
 933		/* Make sure ACS will be enabled */
 934		pci_request_acs();
 935	}
 936
 937#ifdef CONFIG_X86
 938	if (!ret) {
 939		x86_init.iommu.iommu_init = intel_iommu_init;
 940		x86_platform.iommu_shutdown = intel_iommu_shutdown;
 941	}
 942
 943#endif
 944
 945	if (dmar_tbl) {
 946		acpi_put_table(dmar_tbl);
 947		dmar_tbl = NULL;
 948	}
 949	up_write(&dmar_global_lock);
 
 
 950}
 951
 952static void unmap_iommu(struct intel_iommu *iommu)
 953{
 954	iounmap(iommu->reg);
 955	release_mem_region(iommu->reg_phys, iommu->reg_size);
 956}
 957
 958/**
 959 * map_iommu: map the iommu's registers
 960 * @iommu: the iommu to map
 961 * @drhd: DMA remapping hardware definition structure
 962 *
 963 * Memory map the iommu's registers.  Start w/ a single page, and
 964 * possibly expand if that turns out to be insufficent.
 965 */
 966static int map_iommu(struct intel_iommu *iommu, struct dmar_drhd_unit *drhd)
 967{
 968	u64 phys_addr = drhd->reg_base_addr;
 969	int map_size, err=0;
 970
 971	iommu->reg_phys = phys_addr;
 972	iommu->reg_size = drhd->reg_size;
 973
 974	if (!request_mem_region(iommu->reg_phys, iommu->reg_size, iommu->name)) {
 975		pr_err("Can't reserve memory\n");
 976		err = -EBUSY;
 977		goto out;
 978	}
 979
 980	iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
 981	if (!iommu->reg) {
 982		pr_err("Can't map the region\n");
 983		err = -ENOMEM;
 984		goto release;
 985	}
 986
 987	iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
 988	iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
 989
 990	if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) {
 991		err = -EINVAL;
 992		warn_invalid_dmar(phys_addr, " returns all ones");
 993		goto unmap;
 994	}
 
 995
 996	/* the registers might be more than one page */
 997	map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
 998			 cap_max_fault_reg_offset(iommu->cap));
 999	map_size = VTD_PAGE_ALIGN(map_size);
1000	if (map_size > iommu->reg_size) {
1001		iounmap(iommu->reg);
1002		release_mem_region(iommu->reg_phys, iommu->reg_size);
1003		iommu->reg_size = map_size;
1004		if (!request_mem_region(iommu->reg_phys, iommu->reg_size,
1005					iommu->name)) {
1006			pr_err("Can't reserve memory\n");
1007			err = -EBUSY;
1008			goto out;
1009		}
1010		iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size);
1011		if (!iommu->reg) {
1012			pr_err("Can't map the region\n");
1013			err = -ENOMEM;
1014			goto release;
1015		}
1016	}
1017
1018	if (cap_ecmds(iommu->cap)) {
1019		int i;
1020
1021		for (i = 0; i < DMA_MAX_NUM_ECMDCAP; i++) {
1022			iommu->ecmdcap[i] = dmar_readq(iommu->reg + DMAR_ECCAP_REG +
1023						       i * DMA_ECMD_REG_STEP);
1024		}
1025	}
1026
1027	err = 0;
1028	goto out;
1029
1030unmap:
1031	iounmap(iommu->reg);
1032release:
1033	release_mem_region(iommu->reg_phys, iommu->reg_size);
1034out:
1035	return err;
1036}
1037
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1038static int alloc_iommu(struct dmar_drhd_unit *drhd)
1039{
1040	struct intel_iommu *iommu;
1041	u32 ver, sts;
1042	int agaw = -1;
1043	int msagaw = -1;
1044	int err;
1045
1046	if (!drhd->reg_base_addr) {
1047		warn_invalid_dmar(0, "");
1048		return -EINVAL;
1049	}
1050
1051	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
1052	if (!iommu)
1053		return -ENOMEM;
1054
1055	iommu->seq_id = ida_alloc_range(&dmar_seq_ids, 0,
1056					DMAR_UNITS_SUPPORTED - 1, GFP_KERNEL);
1057	if (iommu->seq_id < 0) {
1058		pr_err("Failed to allocate seq_id\n");
1059		err = iommu->seq_id;
1060		goto error;
1061	}
1062	sprintf(iommu->name, "dmar%d", iommu->seq_id);
1063
1064	err = map_iommu(iommu, drhd);
1065	if (err) {
1066		pr_err("Failed to map %s\n", iommu->name);
1067		goto error_free_seq_id;
1068	}
1069
1070	err = -EINVAL;
1071	if (!cap_sagaw(iommu->cap) &&
1072	    (!ecap_smts(iommu->ecap) || ecap_slts(iommu->ecap))) {
1073		pr_info("%s: No supported address widths. Not attempting DMA translation.\n",
1074			iommu->name);
1075		drhd->ignored = 1;
1076	}
1077
1078	if (!drhd->ignored) {
1079		agaw = iommu_calculate_agaw(iommu);
1080		if (agaw < 0) {
1081			pr_err("Cannot get a valid agaw for iommu (seq_id = %d)\n",
1082			       iommu->seq_id);
1083			drhd->ignored = 1;
1084		}
1085	}
1086	if (!drhd->ignored) {
1087		msagaw = iommu_calculate_max_sagaw(iommu);
1088		if (msagaw < 0) {
1089			pr_err("Cannot get a valid max agaw for iommu (seq_id = %d)\n",
1090			       iommu->seq_id);
1091			drhd->ignored = 1;
1092			agaw = -1;
1093		}
1094	}
1095	iommu->agaw = agaw;
1096	iommu->msagaw = msagaw;
1097	iommu->segment = drhd->segment;
1098	iommu->device_rbtree = RB_ROOT;
1099	spin_lock_init(&iommu->device_rbtree_lock);
1100	mutex_init(&iommu->iopf_lock);
1101	iommu->node = NUMA_NO_NODE;
1102
1103	ver = readl(iommu->reg + DMAR_VER_REG);
1104	pr_info("%s: reg_base_addr %llx ver %d:%d cap %llx ecap %llx\n",
1105		iommu->name,
1106		(unsigned long long)drhd->reg_base_addr,
1107		DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
1108		(unsigned long long)iommu->cap,
1109		(unsigned long long)iommu->ecap);
1110
1111	/* Reflect status in gcmd */
1112	sts = readl(iommu->reg + DMAR_GSTS_REG);
1113	if (sts & DMA_GSTS_IRES)
1114		iommu->gcmd |= DMA_GCMD_IRE;
1115	if (sts & DMA_GSTS_TES)
1116		iommu->gcmd |= DMA_GCMD_TE;
1117	if (sts & DMA_GSTS_QIES)
1118		iommu->gcmd |= DMA_GCMD_QIE;
1119
1120	if (alloc_iommu_pmu(iommu))
1121		pr_debug("Cannot alloc PMU for iommu (seq_id = %d)\n", iommu->seq_id);
1122
1123	raw_spin_lock_init(&iommu->register_lock);
1124
1125	/*
1126	 * A value of N in PSS field of eCap register indicates hardware
1127	 * supports PASID field of N+1 bits.
1128	 */
1129	if (pasid_supported(iommu))
1130		iommu->iommu.max_pasids = 2UL << ecap_pss(iommu->ecap);
1131
1132	/*
1133	 * This is only for hotplug; at boot time intel_iommu_enabled won't
1134	 * be set yet. When intel_iommu_init() runs, it registers the units
1135	 * present at boot time, then sets intel_iommu_enabled.
1136	 */
1137	if (intel_iommu_enabled && !drhd->ignored) {
1138		err = iommu_device_sysfs_add(&iommu->iommu, NULL,
1139					     intel_iommu_groups,
1140					     "%s", iommu->name);
1141		if (err)
1142			goto err_unmap;
1143
1144		err = iommu_device_register(&iommu->iommu, &intel_iommu_ops, NULL);
 
 
1145		if (err)
1146			goto err_sysfs;
1147
1148		iommu_pmu_register(iommu);
1149	}
1150
1151	drhd->iommu = iommu;
1152	iommu->drhd = drhd;
1153
1154	return 0;
1155
1156err_sysfs:
1157	iommu_device_sysfs_remove(&iommu->iommu);
1158err_unmap:
1159	free_iommu_pmu(iommu);
1160	unmap_iommu(iommu);
1161error_free_seq_id:
1162	ida_free(&dmar_seq_ids, iommu->seq_id);
1163error:
1164	kfree(iommu);
1165	return err;
1166}
1167
1168static void free_iommu(struct intel_iommu *iommu)
1169{
1170	if (intel_iommu_enabled && !iommu->drhd->ignored) {
1171		iommu_pmu_unregister(iommu);
1172		iommu_device_unregister(&iommu->iommu);
1173		iommu_device_sysfs_remove(&iommu->iommu);
1174	}
1175
1176	free_iommu_pmu(iommu);
1177
1178	if (iommu->irq) {
1179		if (iommu->pr_irq) {
1180			free_irq(iommu->pr_irq, iommu);
1181			dmar_free_hwirq(iommu->pr_irq);
1182			iommu->pr_irq = 0;
1183		}
1184		free_irq(iommu->irq, iommu);
1185		dmar_free_hwirq(iommu->irq);
1186		iommu->irq = 0;
1187	}
1188
1189	if (iommu->qi) {
1190		free_page((unsigned long)iommu->qi->desc);
1191		kfree(iommu->qi->desc_status);
1192		kfree(iommu->qi);
1193	}
1194
1195	if (iommu->reg)
1196		unmap_iommu(iommu);
1197
1198	ida_free(&dmar_seq_ids, iommu->seq_id);
1199	kfree(iommu);
1200}
1201
1202/*
1203 * Reclaim all the submitted descriptors which have completed its work.
1204 */
1205static inline void reclaim_free_desc(struct q_inval *qi)
1206{
1207	while (qi->desc_status[qi->free_tail] == QI_DONE ||
1208	       qi->desc_status[qi->free_tail] == QI_ABORT) {
1209		qi->desc_status[qi->free_tail] = QI_FREE;
1210		qi->free_tail = (qi->free_tail + 1) % QI_LENGTH;
1211		qi->free_cnt++;
1212	}
1213}
1214
1215static const char *qi_type_string(u8 type)
1216{
1217	switch (type) {
1218	case QI_CC_TYPE:
1219		return "Context-cache Invalidation";
1220	case QI_IOTLB_TYPE:
1221		return "IOTLB Invalidation";
1222	case QI_DIOTLB_TYPE:
1223		return "Device-TLB Invalidation";
1224	case QI_IEC_TYPE:
1225		return "Interrupt Entry Cache Invalidation";
1226	case QI_IWD_TYPE:
1227		return "Invalidation Wait";
1228	case QI_EIOTLB_TYPE:
1229		return "PASID-based IOTLB Invalidation";
1230	case QI_PC_TYPE:
1231		return "PASID-cache Invalidation";
1232	case QI_DEIOTLB_TYPE:
1233		return "PASID-based Device-TLB Invalidation";
1234	case QI_PGRP_RESP_TYPE:
1235		return "Page Group Response";
1236	default:
1237		return "UNKNOWN";
1238	}
1239}
1240
1241static void qi_dump_fault(struct intel_iommu *iommu, u32 fault)
1242{
1243	unsigned int head = dmar_readl(iommu->reg + DMAR_IQH_REG);
1244	u64 iqe_err = dmar_readq(iommu->reg + DMAR_IQER_REG);
1245	struct qi_desc *desc = iommu->qi->desc + head;
1246
1247	if (fault & DMA_FSTS_IQE)
1248		pr_err("VT-d detected Invalidation Queue Error: Reason %llx",
1249		       DMAR_IQER_REG_IQEI(iqe_err));
1250	if (fault & DMA_FSTS_ITE)
1251		pr_err("VT-d detected Invalidation Time-out Error: SID %llx",
1252		       DMAR_IQER_REG_ITESID(iqe_err));
1253	if (fault & DMA_FSTS_ICE)
1254		pr_err("VT-d detected Invalidation Completion Error: SID %llx",
1255		       DMAR_IQER_REG_ICESID(iqe_err));
1256
1257	pr_err("QI HEAD: %s qw0 = 0x%llx, qw1 = 0x%llx\n",
1258	       qi_type_string(desc->qw0 & 0xf),
1259	       (unsigned long long)desc->qw0,
1260	       (unsigned long long)desc->qw1);
1261
1262	head = ((head >> qi_shift(iommu)) + QI_LENGTH - 1) % QI_LENGTH;
1263	head <<= qi_shift(iommu);
1264	desc = iommu->qi->desc + head;
1265
1266	pr_err("QI PRIOR: %s qw0 = 0x%llx, qw1 = 0x%llx\n",
1267	       qi_type_string(desc->qw0 & 0xf),
1268	       (unsigned long long)desc->qw0,
1269	       (unsigned long long)desc->qw1);
1270}
1271
1272static int qi_check_fault(struct intel_iommu *iommu, int index, int wait_index)
1273{
1274	u32 fault;
1275	int head, tail;
1276	struct device *dev;
1277	u64 iqe_err, ite_sid;
1278	struct q_inval *qi = iommu->qi;
1279	int shift = qi_shift(iommu);
1280
1281	if (qi->desc_status[wait_index] == QI_ABORT)
1282		return -EAGAIN;
1283
1284	fault = readl(iommu->reg + DMAR_FSTS_REG);
1285	if (fault & (DMA_FSTS_IQE | DMA_FSTS_ITE | DMA_FSTS_ICE))
1286		qi_dump_fault(iommu, fault);
1287
1288	/*
1289	 * If IQE happens, the head points to the descriptor associated
1290	 * with the error. No new descriptors are fetched until the IQE
1291	 * is cleared.
1292	 */
1293	if (fault & DMA_FSTS_IQE) {
1294		head = readl(iommu->reg + DMAR_IQH_REG);
1295		if ((head >> shift) == index) {
1296			struct qi_desc *desc = qi->desc + head;
1297
1298			/*
1299			 * desc->qw2 and desc->qw3 are either reserved or
1300			 * used by software as private data. We won't print
1301			 * out these two qw's for security consideration.
1302			 */
 
 
 
1303			memcpy(desc, qi->desc + (wait_index << shift),
1304			       1 << shift);
1305			writel(DMA_FSTS_IQE, iommu->reg + DMAR_FSTS_REG);
1306			pr_info("Invalidation Queue Error (IQE) cleared\n");
1307			return -EINVAL;
1308		}
1309	}
1310
1311	/*
1312	 * If ITE happens, all pending wait_desc commands are aborted.
1313	 * No new descriptors are fetched until the ITE is cleared.
1314	 */
1315	if (fault & DMA_FSTS_ITE) {
1316		head = readl(iommu->reg + DMAR_IQH_REG);
1317		head = ((head >> shift) - 1 + QI_LENGTH) % QI_LENGTH;
1318		head |= 1;
1319		tail = readl(iommu->reg + DMAR_IQT_REG);
1320		tail = ((tail >> shift) - 1 + QI_LENGTH) % QI_LENGTH;
1321
1322		/*
1323		 * SID field is valid only when the ITE field is Set in FSTS_REG
1324		 * see Intel VT-d spec r4.1, section 11.4.9.9
1325		 */
1326		iqe_err = dmar_readq(iommu->reg + DMAR_IQER_REG);
1327		ite_sid = DMAR_IQER_REG_ITESID(iqe_err);
1328
1329		writel(DMA_FSTS_ITE, iommu->reg + DMAR_FSTS_REG);
1330		pr_info("Invalidation Time-out Error (ITE) cleared\n");
1331
1332		do {
1333			if (qi->desc_status[head] == QI_IN_USE)
1334				qi->desc_status[head] = QI_ABORT;
1335			head = (head - 2 + QI_LENGTH) % QI_LENGTH;
1336		} while (head != tail);
1337
1338		/*
1339		 * If device was released or isn't present, no need to retry
1340		 * the ATS invalidate request anymore.
1341		 *
1342		 * 0 value of ite_sid means old VT-d device, no ite_sid value.
1343		 * see Intel VT-d spec r4.1, section 11.4.9.9
1344		 */
1345		if (ite_sid) {
1346			dev = device_rbtree_find(iommu, ite_sid);
1347			if (!dev || !dev_is_pci(dev) ||
1348			    !pci_device_is_present(to_pci_dev(dev)))
1349				return -ETIMEDOUT;
1350		}
1351		if (qi->desc_status[wait_index] == QI_ABORT)
1352			return -EAGAIN;
1353	}
1354
1355	if (fault & DMA_FSTS_ICE) {
1356		writel(DMA_FSTS_ICE, iommu->reg + DMAR_FSTS_REG);
1357		pr_info("Invalidation Completion Error (ICE) cleared\n");
1358	}
1359
1360	return 0;
1361}
1362
1363/*
1364 * Function to submit invalidation descriptors of all types to the queued
1365 * invalidation interface(QI). Multiple descriptors can be submitted at a
1366 * time, a wait descriptor will be appended to each submission to ensure
1367 * hardware has completed the invalidation before return. Wait descriptors
1368 * can be part of the submission but it will not be polled for completion.
1369 */
1370int qi_submit_sync(struct intel_iommu *iommu, struct qi_desc *desc,
1371		   unsigned int count, unsigned long options)
1372{
1373	struct q_inval *qi = iommu->qi;
1374	s64 devtlb_start_ktime = 0;
1375	s64 iotlb_start_ktime = 0;
1376	s64 iec_start_ktime = 0;
1377	struct qi_desc wait_desc;
1378	int wait_index, index;
1379	unsigned long flags;
1380	int offset, shift;
1381	int rc, i;
1382	u64 type;
1383
1384	if (!qi)
1385		return 0;
1386
1387	type = desc->qw0 & GENMASK_ULL(3, 0);
1388
1389	if ((type == QI_IOTLB_TYPE || type == QI_EIOTLB_TYPE) &&
1390	    dmar_latency_enabled(iommu, DMAR_LATENCY_INV_IOTLB))
1391		iotlb_start_ktime = ktime_to_ns(ktime_get());
1392
1393	if ((type == QI_DIOTLB_TYPE || type == QI_DEIOTLB_TYPE) &&
1394	    dmar_latency_enabled(iommu, DMAR_LATENCY_INV_DEVTLB))
1395		devtlb_start_ktime = ktime_to_ns(ktime_get());
1396
1397	if (type == QI_IEC_TYPE &&
1398	    dmar_latency_enabled(iommu, DMAR_LATENCY_INV_IEC))
1399		iec_start_ktime = ktime_to_ns(ktime_get());
1400
1401restart:
1402	rc = 0;
1403
1404	raw_spin_lock_irqsave(&qi->q_lock, flags);
1405	/*
1406	 * Check if we have enough empty slots in the queue to submit,
1407	 * the calculation is based on:
1408	 * # of desc + 1 wait desc + 1 space between head and tail
1409	 */
1410	while (qi->free_cnt < count + 2) {
1411		raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1412		cpu_relax();
1413		raw_spin_lock_irqsave(&qi->q_lock, flags);
1414	}
1415
1416	index = qi->free_head;
1417	wait_index = (index + count) % QI_LENGTH;
1418	shift = qi_shift(iommu);
1419
1420	for (i = 0; i < count; i++) {
1421		offset = ((index + i) % QI_LENGTH) << shift;
1422		memcpy(qi->desc + offset, &desc[i], 1 << shift);
1423		qi->desc_status[(index + i) % QI_LENGTH] = QI_IN_USE;
1424		trace_qi_submit(iommu, desc[i].qw0, desc[i].qw1,
1425				desc[i].qw2, desc[i].qw3);
1426	}
1427	qi->desc_status[wait_index] = QI_IN_USE;
1428
1429	wait_desc.qw0 = QI_IWD_STATUS_DATA(QI_DONE) |
1430			QI_IWD_STATUS_WRITE | QI_IWD_TYPE;
1431	if (options & QI_OPT_WAIT_DRAIN)
1432		wait_desc.qw0 |= QI_IWD_PRQ_DRAIN;
1433	wait_desc.qw1 = virt_to_phys(&qi->desc_status[wait_index]);
1434	wait_desc.qw2 = 0;
1435	wait_desc.qw3 = 0;
1436
1437	offset = wait_index << shift;
1438	memcpy(qi->desc + offset, &wait_desc, 1 << shift);
1439
1440	qi->free_head = (qi->free_head + count + 1) % QI_LENGTH;
1441	qi->free_cnt -= count + 1;
1442
1443	/*
1444	 * update the HW tail register indicating the presence of
1445	 * new descriptors.
1446	 */
1447	writel(qi->free_head << shift, iommu->reg + DMAR_IQT_REG);
1448
1449	while (qi->desc_status[wait_index] != QI_DONE) {
1450		/*
1451		 * We will leave the interrupts disabled, to prevent interrupt
1452		 * context to queue another cmd while a cmd is already submitted
1453		 * and waiting for completion on this cpu. This is to avoid
1454		 * a deadlock where the interrupt context can wait indefinitely
1455		 * for free slots in the queue.
1456		 */
1457		rc = qi_check_fault(iommu, index, wait_index);
1458		if (rc)
1459			break;
1460
1461		raw_spin_unlock(&qi->q_lock);
1462		cpu_relax();
1463		raw_spin_lock(&qi->q_lock);
1464	}
1465
1466	for (i = 0; i < count; i++)
1467		qi->desc_status[(index + i) % QI_LENGTH] = QI_DONE;
1468
1469	reclaim_free_desc(qi);
1470	raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1471
1472	if (rc == -EAGAIN)
1473		goto restart;
1474
1475	if (iotlb_start_ktime)
1476		dmar_latency_update(iommu, DMAR_LATENCY_INV_IOTLB,
1477				ktime_to_ns(ktime_get()) - iotlb_start_ktime);
1478
1479	if (devtlb_start_ktime)
1480		dmar_latency_update(iommu, DMAR_LATENCY_INV_DEVTLB,
1481				ktime_to_ns(ktime_get()) - devtlb_start_ktime);
1482
1483	if (iec_start_ktime)
1484		dmar_latency_update(iommu, DMAR_LATENCY_INV_IEC,
1485				ktime_to_ns(ktime_get()) - iec_start_ktime);
1486
1487	return rc;
1488}
1489
1490/*
1491 * Flush the global interrupt entry cache.
1492 */
1493void qi_global_iec(struct intel_iommu *iommu)
1494{
1495	struct qi_desc desc;
1496
1497	desc.qw0 = QI_IEC_TYPE;
1498	desc.qw1 = 0;
1499	desc.qw2 = 0;
1500	desc.qw3 = 0;
1501
1502	/* should never fail */
1503	qi_submit_sync(iommu, &desc, 1, 0);
1504}
1505
1506void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm,
1507		      u64 type)
1508{
1509	struct qi_desc desc;
1510
1511	desc.qw0 = QI_CC_FM(fm) | QI_CC_SID(sid) | QI_CC_DID(did)
1512			| QI_CC_GRAN(type) | QI_CC_TYPE;
1513	desc.qw1 = 0;
1514	desc.qw2 = 0;
1515	desc.qw3 = 0;
1516
1517	qi_submit_sync(iommu, &desc, 1, 0);
1518}
1519
1520void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
1521		    unsigned int size_order, u64 type)
1522{
1523	u8 dw = 0, dr = 0;
1524
1525	struct qi_desc desc;
1526	int ih = 0;
1527
1528	if (cap_write_drain(iommu->cap))
1529		dw = 1;
1530
1531	if (cap_read_drain(iommu->cap))
1532		dr = 1;
1533
1534	desc.qw0 = QI_IOTLB_DID(did) | QI_IOTLB_DR(dr) | QI_IOTLB_DW(dw)
1535		| QI_IOTLB_GRAN(type) | QI_IOTLB_TYPE;
1536	desc.qw1 = QI_IOTLB_ADDR(addr) | QI_IOTLB_IH(ih)
1537		| QI_IOTLB_AM(size_order);
1538	desc.qw2 = 0;
1539	desc.qw3 = 0;
1540
1541	qi_submit_sync(iommu, &desc, 1, 0);
1542}
1543
1544void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid,
1545			u16 qdep, u64 addr, unsigned mask)
1546{
1547	struct qi_desc desc;
1548
1549	/*
1550	 * VT-d spec, section 4.3:
1551	 *
1552	 * Software is recommended to not submit any Device-TLB invalidation
1553	 * requests while address remapping hardware is disabled.
1554	 */
1555	if (!(iommu->gcmd & DMA_GCMD_TE))
1556		return;
1557
1558	if (mask) {
1559		addr |= (1ULL << (VTD_PAGE_SHIFT + mask - 1)) - 1;
1560		desc.qw1 = QI_DEV_IOTLB_ADDR(addr) | QI_DEV_IOTLB_SIZE;
1561	} else
1562		desc.qw1 = QI_DEV_IOTLB_ADDR(addr);
1563
1564	if (qdep >= QI_DEV_IOTLB_MAX_INVS)
1565		qdep = 0;
1566
1567	desc.qw0 = QI_DEV_IOTLB_SID(sid) | QI_DEV_IOTLB_QDEP(qdep) |
1568		   QI_DIOTLB_TYPE | QI_DEV_IOTLB_PFSID(pfsid);
1569	desc.qw2 = 0;
1570	desc.qw3 = 0;
1571
1572	qi_submit_sync(iommu, &desc, 1, 0);
1573}
1574
1575/* PASID-based IOTLB invalidation */
1576void qi_flush_piotlb(struct intel_iommu *iommu, u16 did, u32 pasid, u64 addr,
1577		     unsigned long npages, bool ih)
1578{
1579	struct qi_desc desc = {.qw2 = 0, .qw3 = 0};
1580
1581	/*
1582	 * npages == -1 means a PASID-selective invalidation, otherwise,
1583	 * a positive value for Page-selective-within-PASID invalidation.
1584	 * 0 is not a valid input.
1585	 */
1586	if (WARN_ON(!npages)) {
1587		pr_err("Invalid input npages = %ld\n", npages);
1588		return;
1589	}
1590
1591	if (npages == -1) {
1592		desc.qw0 = QI_EIOTLB_PASID(pasid) |
1593				QI_EIOTLB_DID(did) |
1594				QI_EIOTLB_GRAN(QI_GRAN_NONG_PASID) |
1595				QI_EIOTLB_TYPE;
1596		desc.qw1 = 0;
1597	} else {
1598		int mask = ilog2(__roundup_pow_of_two(npages));
1599		unsigned long align = (1ULL << (VTD_PAGE_SHIFT + mask));
1600
1601		if (WARN_ON_ONCE(!IS_ALIGNED(addr, align)))
1602			addr = ALIGN_DOWN(addr, align);
1603
1604		desc.qw0 = QI_EIOTLB_PASID(pasid) |
1605				QI_EIOTLB_DID(did) |
1606				QI_EIOTLB_GRAN(QI_GRAN_PSI_PASID) |
1607				QI_EIOTLB_TYPE;
1608		desc.qw1 = QI_EIOTLB_ADDR(addr) |
1609				QI_EIOTLB_IH(ih) |
1610				QI_EIOTLB_AM(mask);
1611	}
1612
1613	qi_submit_sync(iommu, &desc, 1, 0);
1614}
1615
1616/* PASID-based device IOTLB Invalidate */
1617void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid,
1618			      u32 pasid,  u16 qdep, u64 addr, unsigned int size_order)
1619{
1620	unsigned long mask = 1UL << (VTD_PAGE_SHIFT + size_order - 1);
1621	struct qi_desc desc = {.qw1 = 0, .qw2 = 0, .qw3 = 0};
1622
1623	/*
1624	 * VT-d spec, section 4.3:
1625	 *
1626	 * Software is recommended to not submit any Device-TLB invalidation
1627	 * requests while address remapping hardware is disabled.
1628	 */
1629	if (!(iommu->gcmd & DMA_GCMD_TE))
1630		return;
1631
1632	desc.qw0 = QI_DEV_EIOTLB_PASID(pasid) | QI_DEV_EIOTLB_SID(sid) |
1633		QI_DEV_EIOTLB_QDEP(qdep) | QI_DEIOTLB_TYPE |
1634		QI_DEV_IOTLB_PFSID(pfsid);
1635
1636	/*
1637	 * If S bit is 0, we only flush a single page. If S bit is set,
1638	 * The least significant zero bit indicates the invalidation address
1639	 * range. VT-d spec 6.5.2.6.
1640	 * e.g. address bit 12[0] indicates 8KB, 13[0] indicates 16KB.
1641	 * size order = 0 is PAGE_SIZE 4KB
1642	 * Max Invs Pending (MIP) is set to 0 for now until we have DIT in
1643	 * ECAP.
1644	 */
1645	if (!IS_ALIGNED(addr, VTD_PAGE_SIZE << size_order))
1646		pr_warn_ratelimited("Invalidate non-aligned address %llx, order %d\n",
1647				    addr, size_order);
1648
1649	/* Take page address */
1650	desc.qw1 = QI_DEV_EIOTLB_ADDR(addr);
1651
1652	if (size_order) {
1653		/*
1654		 * Existing 0s in address below size_order may be the least
1655		 * significant bit, we must set them to 1s to avoid having
1656		 * smaller size than desired.
1657		 */
1658		desc.qw1 |= GENMASK_ULL(size_order + VTD_PAGE_SHIFT - 1,
1659					VTD_PAGE_SHIFT);
1660		/* Clear size_order bit to indicate size */
1661		desc.qw1 &= ~mask;
1662		/* Set the S bit to indicate flushing more than 1 page */
1663		desc.qw1 |= QI_DEV_EIOTLB_SIZE;
1664	}
1665
1666	qi_submit_sync(iommu, &desc, 1, 0);
1667}
1668
1669void qi_flush_pasid_cache(struct intel_iommu *iommu, u16 did,
1670			  u64 granu, u32 pasid)
1671{
1672	struct qi_desc desc = {.qw1 = 0, .qw2 = 0, .qw3 = 0};
1673
1674	desc.qw0 = QI_PC_PASID(pasid) | QI_PC_DID(did) |
1675			QI_PC_GRAN(granu) | QI_PC_TYPE;
1676	qi_submit_sync(iommu, &desc, 1, 0);
1677}
1678
1679/*
1680 * Disable Queued Invalidation interface.
1681 */
1682void dmar_disable_qi(struct intel_iommu *iommu)
1683{
1684	unsigned long flags;
1685	u32 sts;
1686	cycles_t start_time = get_cycles();
1687
1688	if (!ecap_qis(iommu->ecap))
1689		return;
1690
1691	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1692
1693	sts =  readl(iommu->reg + DMAR_GSTS_REG);
1694	if (!(sts & DMA_GSTS_QIES))
1695		goto end;
1696
1697	/*
1698	 * Give a chance to HW to complete the pending invalidation requests.
1699	 */
1700	while ((readl(iommu->reg + DMAR_IQT_REG) !=
1701		readl(iommu->reg + DMAR_IQH_REG)) &&
1702		(DMAR_OPERATION_TIMEOUT > (get_cycles() - start_time)))
1703		cpu_relax();
1704
1705	iommu->gcmd &= ~DMA_GCMD_QIE;
1706	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1707
1708	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl,
1709		      !(sts & DMA_GSTS_QIES), sts);
1710end:
1711	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1712}
1713
1714/*
1715 * Enable queued invalidation.
1716 */
1717static void __dmar_enable_qi(struct intel_iommu *iommu)
1718{
1719	u32 sts;
1720	unsigned long flags;
1721	struct q_inval *qi = iommu->qi;
1722	u64 val = virt_to_phys(qi->desc);
1723
1724	qi->free_head = qi->free_tail = 0;
1725	qi->free_cnt = QI_LENGTH;
1726
1727	/*
1728	 * Set DW=1 and QS=1 in IQA_REG when Scalable Mode capability
1729	 * is present.
1730	 */
1731	if (ecap_smts(iommu->ecap))
1732		val |= BIT_ULL(11) | BIT_ULL(0);
1733
1734	raw_spin_lock_irqsave(&iommu->register_lock, flags);
1735
1736	/* write zero to the tail reg */
1737	writel(0, iommu->reg + DMAR_IQT_REG);
1738
1739	dmar_writeq(iommu->reg + DMAR_IQA_REG, val);
1740
1741	iommu->gcmd |= DMA_GCMD_QIE;
1742	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
1743
1744	/* Make sure hardware complete it */
1745	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts);
1746
1747	raw_spin_unlock_irqrestore(&iommu->register_lock, flags);
1748}
1749
1750/*
1751 * Enable Queued Invalidation interface. This is a must to support
1752 * interrupt-remapping. Also used by DMA-remapping, which replaces
1753 * register based IOTLB invalidation.
1754 */
1755int dmar_enable_qi(struct intel_iommu *iommu)
1756{
1757	struct q_inval *qi;
1758	struct page *desc_page;
1759
1760	if (!ecap_qis(iommu->ecap))
1761		return -ENOENT;
1762
1763	/*
1764	 * queued invalidation is already setup and enabled.
1765	 */
1766	if (iommu->qi)
1767		return 0;
1768
1769	iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
1770	if (!iommu->qi)
1771		return -ENOMEM;
1772
1773	qi = iommu->qi;
1774
1775	/*
1776	 * Need two pages to accommodate 256 descriptors of 256 bits each
1777	 * if the remapping hardware supports scalable mode translation.
1778	 */
1779	desc_page = alloc_pages_node(iommu->node, GFP_ATOMIC | __GFP_ZERO,
1780				     !!ecap_smts(iommu->ecap));
1781	if (!desc_page) {
1782		kfree(qi);
1783		iommu->qi = NULL;
1784		return -ENOMEM;
1785	}
1786
1787	qi->desc = page_address(desc_page);
1788
1789	qi->desc_status = kcalloc(QI_LENGTH, sizeof(int), GFP_ATOMIC);
1790	if (!qi->desc_status) {
1791		free_page((unsigned long) qi->desc);
1792		kfree(qi);
1793		iommu->qi = NULL;
1794		return -ENOMEM;
1795	}
1796
1797	raw_spin_lock_init(&qi->q_lock);
1798
1799	__dmar_enable_qi(iommu);
1800
1801	return 0;
1802}
1803
1804/* iommu interrupt handling. Most stuff are MSI-like. */
1805
1806enum faulttype {
1807	DMA_REMAP,
1808	INTR_REMAP,
1809	UNKNOWN,
1810};
1811
1812static const char *dma_remap_fault_reasons[] =
1813{
1814	"Software",
1815	"Present bit in root entry is clear",
1816	"Present bit in context entry is clear",
1817	"Invalid context entry",
1818	"Access beyond MGAW",
1819	"PTE Write access is not set",
1820	"PTE Read access is not set",
1821	"Next page table ptr is invalid",
1822	"Root table address invalid",
1823	"Context table ptr is invalid",
1824	"non-zero reserved fields in RTP",
1825	"non-zero reserved fields in CTP",
1826	"non-zero reserved fields in PTE",
1827	"PCE for translation request specifies blocking",
1828};
1829
1830static const char * const dma_remap_sm_fault_reasons[] = {
1831	"SM: Invalid Root Table Address",
1832	"SM: TTM 0 for request with PASID",
1833	"SM: TTM 0 for page group request",
1834	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x33-0x37 */
1835	"SM: Error attempting to access Root Entry",
1836	"SM: Present bit in Root Entry is clear",
1837	"SM: Non-zero reserved field set in Root Entry",
1838	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x3B-0x3F */
1839	"SM: Error attempting to access Context Entry",
1840	"SM: Present bit in Context Entry is clear",
1841	"SM: Non-zero reserved field set in the Context Entry",
1842	"SM: Invalid Context Entry",
1843	"SM: DTE field in Context Entry is clear",
1844	"SM: PASID Enable field in Context Entry is clear",
1845	"SM: PASID is larger than the max in Context Entry",
1846	"SM: PRE field in Context-Entry is clear",
1847	"SM: RID_PASID field error in Context-Entry",
1848	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x49-0x4F */
1849	"SM: Error attempting to access the PASID Directory Entry",
1850	"SM: Present bit in Directory Entry is clear",
1851	"SM: Non-zero reserved field set in PASID Directory Entry",
1852	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x53-0x57 */
1853	"SM: Error attempting to access PASID Table Entry",
1854	"SM: Present bit in PASID Table Entry is clear",
1855	"SM: Non-zero reserved field set in PASID Table Entry",
1856	"SM: Invalid Scalable-Mode PASID Table Entry",
1857	"SM: ERE field is clear in PASID Table Entry",
1858	"SM: SRE field is clear in PASID Table Entry",
1859	"Unknown", "Unknown",/* 0x5E-0x5F */
1860	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x60-0x67 */
1861	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x68-0x6F */
1862	"SM: Error attempting to access first-level paging entry",
1863	"SM: Present bit in first-level paging entry is clear",
1864	"SM: Non-zero reserved field set in first-level paging entry",
1865	"SM: Error attempting to access FL-PML4 entry",
1866	"SM: First-level entry address beyond MGAW in Nested translation",
1867	"SM: Read permission error in FL-PML4 entry in Nested translation",
1868	"SM: Read permission error in first-level paging entry in Nested translation",
1869	"SM: Write permission error in first-level paging entry in Nested translation",
1870	"SM: Error attempting to access second-level paging entry",
1871	"SM: Read/Write permission error in second-level paging entry",
1872	"SM: Non-zero reserved field set in second-level paging entry",
1873	"SM: Invalid second-level page table pointer",
1874	"SM: A/D bit update needed in second-level entry when set up in no snoop",
1875	"Unknown", "Unknown", "Unknown", /* 0x7D-0x7F */
1876	"SM: Address in first-level translation is not canonical",
1877	"SM: U/S set 0 for first-level translation with user privilege",
1878	"SM: No execute permission for request with PASID and ER=1",
1879	"SM: Address beyond the DMA hardware max",
1880	"SM: Second-level entry address beyond the max",
1881	"SM: No write permission for Write/AtomicOp request",
1882	"SM: No read permission for Read/AtomicOp request",
1883	"SM: Invalid address-interrupt address",
1884	"Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", /* 0x88-0x8F */
1885	"SM: A/D bit update needed in first-level entry when set up in no snoop",
1886};
1887
1888static const char *irq_remap_fault_reasons[] =
1889{
1890	"Detected reserved fields in the decoded interrupt-remapped request",
1891	"Interrupt index exceeded the interrupt-remapping table size",
1892	"Present field in the IRTE entry is clear",
1893	"Error accessing interrupt-remapping table pointed by IRTA_REG",
1894	"Detected reserved fields in the IRTE entry",
1895	"Blocked a compatibility format interrupt request",
1896	"Blocked an interrupt request due to source-id verification failure",
1897};
1898
1899static const char *dmar_get_fault_reason(u8 fault_reason, int *fault_type)
1900{
1901	if (fault_reason >= 0x20 && (fault_reason - 0x20 <
1902					ARRAY_SIZE(irq_remap_fault_reasons))) {
1903		*fault_type = INTR_REMAP;
1904		return irq_remap_fault_reasons[fault_reason - 0x20];
1905	} else if (fault_reason >= 0x30 && (fault_reason - 0x30 <
1906			ARRAY_SIZE(dma_remap_sm_fault_reasons))) {
1907		*fault_type = DMA_REMAP;
1908		return dma_remap_sm_fault_reasons[fault_reason - 0x30];
1909	} else if (fault_reason < ARRAY_SIZE(dma_remap_fault_reasons)) {
1910		*fault_type = DMA_REMAP;
1911		return dma_remap_fault_reasons[fault_reason];
1912	} else {
1913		*fault_type = UNKNOWN;
1914		return "Unknown";
1915	}
1916}
1917
1918
1919static inline int dmar_msi_reg(struct intel_iommu *iommu, int irq)
1920{
1921	if (iommu->irq == irq)
1922		return DMAR_FECTL_REG;
1923	else if (iommu->pr_irq == irq)
1924		return DMAR_PECTL_REG;
1925	else if (iommu->perf_irq == irq)
1926		return DMAR_PERFINTRCTL_REG;
1927	else
1928		BUG();
1929}
1930
1931void dmar_msi_unmask(struct irq_data *data)
1932{
1933	struct intel_iommu *iommu = irq_data_get_irq_handler_data(data);
1934	int reg = dmar_msi_reg(iommu, data->irq);
1935	unsigned long flag;
1936
1937	/* unmask it */
1938	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1939	writel(0, iommu->reg + reg);
1940	/* Read a reg to force flush the post write */
1941	readl(iommu->reg + reg);
1942	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1943}
1944
1945void dmar_msi_mask(struct irq_data *data)
1946{
1947	struct intel_iommu *iommu = irq_data_get_irq_handler_data(data);
1948	int reg = dmar_msi_reg(iommu, data->irq);
1949	unsigned long flag;
1950
1951	/* mask it */
1952	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1953	writel(DMA_FECTL_IM, iommu->reg + reg);
1954	/* Read a reg to force flush the post write */
1955	readl(iommu->reg + reg);
1956	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1957}
1958
1959void dmar_msi_write(int irq, struct msi_msg *msg)
1960{
1961	struct intel_iommu *iommu = irq_get_handler_data(irq);
1962	int reg = dmar_msi_reg(iommu, irq);
1963	unsigned long flag;
1964
1965	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1966	writel(msg->data, iommu->reg + reg + 4);
1967	writel(msg->address_lo, iommu->reg + reg + 8);
1968	writel(msg->address_hi, iommu->reg + reg + 12);
1969	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1970}
1971
1972void dmar_msi_read(int irq, struct msi_msg *msg)
1973{
1974	struct intel_iommu *iommu = irq_get_handler_data(irq);
1975	int reg = dmar_msi_reg(iommu, irq);
1976	unsigned long flag;
1977
1978	raw_spin_lock_irqsave(&iommu->register_lock, flag);
1979	msg->data = readl(iommu->reg + reg + 4);
1980	msg->address_lo = readl(iommu->reg + reg + 8);
1981	msg->address_hi = readl(iommu->reg + reg + 12);
1982	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
1983}
1984
1985static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
1986		u8 fault_reason, u32 pasid, u16 source_id,
1987		unsigned long long addr)
1988{
1989	const char *reason;
1990	int fault_type;
1991
1992	reason = dmar_get_fault_reason(fault_reason, &fault_type);
1993
1994	if (fault_type == INTR_REMAP) {
1995		pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
1996		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
1997		       PCI_FUNC(source_id & 0xFF), addr >> 48,
1998		       fault_reason, reason);
1999
2000		return 0;
2001	}
2002
2003	if (pasid == IOMMU_PASID_INVALID)
2004		pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
2005		       type ? "DMA Read" : "DMA Write",
2006		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
2007		       PCI_FUNC(source_id & 0xFF), addr,
2008		       fault_reason, reason);
2009	else
2010		pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
2011		       type ? "DMA Read" : "DMA Write", pasid,
2012		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
2013		       PCI_FUNC(source_id & 0xFF), addr,
2014		       fault_reason, reason);
2015
2016	dmar_fault_dump_ptes(iommu, source_id, addr, pasid);
2017
2018	return 0;
2019}
2020
2021#define PRIMARY_FAULT_REG_LEN (16)
2022irqreturn_t dmar_fault(int irq, void *dev_id)
2023{
2024	struct intel_iommu *iommu = dev_id;
2025	int reg, fault_index;
2026	u32 fault_status;
2027	unsigned long flag;
2028	static DEFINE_RATELIMIT_STATE(rs,
2029				      DEFAULT_RATELIMIT_INTERVAL,
2030				      DEFAULT_RATELIMIT_BURST);
2031
2032	raw_spin_lock_irqsave(&iommu->register_lock, flag);
2033	fault_status = readl(iommu->reg + DMAR_FSTS_REG);
2034	if (fault_status && __ratelimit(&rs))
2035		pr_err("DRHD: handling fault status reg %x\n", fault_status);
2036
2037	/* TBD: ignore advanced fault log currently */
2038	if (!(fault_status & DMA_FSTS_PPF))
2039		goto unlock_exit;
2040
2041	fault_index = dma_fsts_fault_record_index(fault_status);
2042	reg = cap_fault_reg_offset(iommu->cap);
2043	while (1) {
2044		/* Disable printing, simply clear the fault when ratelimited */
2045		bool ratelimited = !__ratelimit(&rs);
2046		u8 fault_reason;
2047		u16 source_id;
2048		u64 guest_addr;
2049		u32 pasid;
2050		int type;
2051		u32 data;
2052		bool pasid_present;
2053
2054		/* highest 32 bits */
2055		data = readl(iommu->reg + reg +
2056				fault_index * PRIMARY_FAULT_REG_LEN + 12);
2057		if (!(data & DMA_FRCD_F))
2058			break;
2059
2060		if (!ratelimited) {
2061			fault_reason = dma_frcd_fault_reason(data);
2062			type = dma_frcd_type(data);
2063
2064			pasid = dma_frcd_pasid_value(data);
2065			data = readl(iommu->reg + reg +
2066				     fault_index * PRIMARY_FAULT_REG_LEN + 8);
2067			source_id = dma_frcd_source_id(data);
2068
2069			pasid_present = dma_frcd_pasid_present(data);
2070			guest_addr = dmar_readq(iommu->reg + reg +
2071					fault_index * PRIMARY_FAULT_REG_LEN);
2072			guest_addr = dma_frcd_page_addr(guest_addr);
2073		}
2074
2075		/* clear the fault */
2076		writel(DMA_FRCD_F, iommu->reg + reg +
2077			fault_index * PRIMARY_FAULT_REG_LEN + 12);
2078
2079		raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
2080
2081		if (!ratelimited)
2082			/* Using pasid -1 if pasid is not present */
2083			dmar_fault_do_one(iommu, type, fault_reason,
2084					  pasid_present ? pasid : IOMMU_PASID_INVALID,
2085					  source_id, guest_addr);
2086
2087		fault_index++;
2088		if (fault_index >= cap_num_fault_regs(iommu->cap))
2089			fault_index = 0;
2090		raw_spin_lock_irqsave(&iommu->register_lock, flag);
2091	}
2092
2093	writel(DMA_FSTS_PFO | DMA_FSTS_PPF | DMA_FSTS_PRO,
2094	       iommu->reg + DMAR_FSTS_REG);
2095
2096unlock_exit:
2097	raw_spin_unlock_irqrestore(&iommu->register_lock, flag);
2098	return IRQ_HANDLED;
2099}
2100
2101int dmar_set_interrupt(struct intel_iommu *iommu)
2102{
2103	int irq, ret;
2104
2105	/*
2106	 * Check if the fault interrupt is already initialized.
2107	 */
2108	if (iommu->irq)
2109		return 0;
2110
2111	irq = dmar_alloc_hwirq(iommu->seq_id, iommu->node, iommu);
2112	if (irq > 0) {
2113		iommu->irq = irq;
2114	} else {
2115		pr_err("No free IRQ vectors\n");
2116		return -EINVAL;
2117	}
2118
2119	ret = request_irq(irq, dmar_fault, IRQF_NO_THREAD, iommu->name, iommu);
2120	if (ret)
2121		pr_err("Can't request irq\n");
2122	return ret;
2123}
2124
2125int __init enable_drhd_fault_handling(void)
2126{
2127	struct dmar_drhd_unit *drhd;
2128	struct intel_iommu *iommu;
2129
2130	/*
2131	 * Enable fault control interrupt.
2132	 */
2133	for_each_iommu(iommu, drhd) {
2134		u32 fault_status;
2135		int ret = dmar_set_interrupt(iommu);
2136
2137		if (ret) {
2138			pr_err("DRHD %Lx: failed to enable fault, interrupt, ret %d\n",
2139			       (unsigned long long)drhd->reg_base_addr, ret);
2140			return -1;
2141		}
2142
2143		/*
2144		 * Clear any previous faults.
2145		 */
2146		dmar_fault(iommu->irq, iommu);
2147		fault_status = readl(iommu->reg + DMAR_FSTS_REG);
2148		writel(fault_status, iommu->reg + DMAR_FSTS_REG);
2149	}
2150
2151	return 0;
2152}
2153
2154/*
2155 * Re-enable Queued Invalidation interface.
2156 */
2157int dmar_reenable_qi(struct intel_iommu *iommu)
2158{
2159	if (!ecap_qis(iommu->ecap))
2160		return -ENOENT;
2161
2162	if (!iommu->qi)
2163		return -ENOENT;
2164
2165	/*
2166	 * First disable queued invalidation.
2167	 */
2168	dmar_disable_qi(iommu);
2169	/*
2170	 * Then enable queued invalidation again. Since there is no pending
2171	 * invalidation requests now, it's safe to re-enable queued
2172	 * invalidation.
2173	 */
2174	__dmar_enable_qi(iommu);
2175
2176	return 0;
2177}
2178
2179/*
2180 * Check interrupt remapping support in DMAR table description.
2181 */
2182int __init dmar_ir_support(void)
2183{
2184	struct acpi_table_dmar *dmar;
2185	dmar = (struct acpi_table_dmar *)dmar_tbl;
2186	if (!dmar)
2187		return 0;
2188	return dmar->flags & 0x1;
2189}
2190
2191/* Check whether DMAR units are in use */
2192static inline bool dmar_in_use(void)
2193{
2194	return irq_remapping_enabled || intel_iommu_enabled;
2195}
2196
2197static int __init dmar_free_unused_resources(void)
2198{
2199	struct dmar_drhd_unit *dmaru, *dmaru_n;
2200
2201	if (dmar_in_use())
2202		return 0;
2203
2204	if (dmar_dev_scope_status != 1 && !list_empty(&dmar_drhd_units))
2205		bus_unregister_notifier(&pci_bus_type, &dmar_pci_bus_nb);
2206
2207	down_write(&dmar_global_lock);
2208	list_for_each_entry_safe(dmaru, dmaru_n, &dmar_drhd_units, list) {
2209		list_del(&dmaru->list);
2210		dmar_free_drhd(dmaru);
2211	}
2212	up_write(&dmar_global_lock);
2213
2214	return 0;
2215}
2216
2217late_initcall(dmar_free_unused_resources);
 
2218
2219/*
2220 * DMAR Hotplug Support
2221 * For more details, please refer to Intel(R) Virtualization Technology
2222 * for Directed-IO Architecture Specifiction, Rev 2.2, Section 8.8
2223 * "Remapping Hardware Unit Hot Plug".
2224 */
2225static guid_t dmar_hp_guid =
2226	GUID_INIT(0xD8C1A3A6, 0xBE9B, 0x4C9B,
2227		  0x91, 0xBF, 0xC3, 0xCB, 0x81, 0xFC, 0x5D, 0xAF);
2228
2229/*
2230 * Currently there's only one revision and BIOS will not check the revision id,
2231 * so use 0 for safety.
2232 */
2233#define	DMAR_DSM_REV_ID			0
2234#define	DMAR_DSM_FUNC_DRHD		1
2235#define	DMAR_DSM_FUNC_ATSR		2
2236#define	DMAR_DSM_FUNC_RHSA		3
2237#define	DMAR_DSM_FUNC_SATC		4
2238
2239static inline bool dmar_detect_dsm(acpi_handle handle, int func)
2240{
2241	return acpi_check_dsm(handle, &dmar_hp_guid, DMAR_DSM_REV_ID, 1 << func);
2242}
2243
2244static int dmar_walk_dsm_resource(acpi_handle handle, int func,
2245				  dmar_res_handler_t handler, void *arg)
2246{
2247	int ret = -ENODEV;
2248	union acpi_object *obj;
2249	struct acpi_dmar_header *start;
2250	struct dmar_res_callback callback;
2251	static int res_type[] = {
2252		[DMAR_DSM_FUNC_DRHD] = ACPI_DMAR_TYPE_HARDWARE_UNIT,
2253		[DMAR_DSM_FUNC_ATSR] = ACPI_DMAR_TYPE_ROOT_ATS,
2254		[DMAR_DSM_FUNC_RHSA] = ACPI_DMAR_TYPE_HARDWARE_AFFINITY,
2255		[DMAR_DSM_FUNC_SATC] = ACPI_DMAR_TYPE_SATC,
2256	};
2257
2258	if (!dmar_detect_dsm(handle, func))
2259		return 0;
2260
2261	obj = acpi_evaluate_dsm_typed(handle, &dmar_hp_guid, DMAR_DSM_REV_ID,
2262				      func, NULL, ACPI_TYPE_BUFFER);
2263	if (!obj)
2264		return -ENODEV;
2265
2266	memset(&callback, 0, sizeof(callback));
2267	callback.cb[res_type[func]] = handler;
2268	callback.arg[res_type[func]] = arg;
2269	start = (struct acpi_dmar_header *)obj->buffer.pointer;
2270	ret = dmar_walk_remapping_entries(start, obj->buffer.length, &callback);
2271
2272	ACPI_FREE(obj);
2273
2274	return ret;
2275}
2276
2277static int dmar_hp_add_drhd(struct acpi_dmar_header *header, void *arg)
2278{
2279	int ret;
2280	struct dmar_drhd_unit *dmaru;
2281
2282	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2283	if (!dmaru)
2284		return -ENODEV;
2285
2286	ret = dmar_ir_hotplug(dmaru, true);
2287	if (ret == 0)
2288		ret = dmar_iommu_hotplug(dmaru, true);
2289
2290	return ret;
2291}
2292
2293static int dmar_hp_remove_drhd(struct acpi_dmar_header *header, void *arg)
2294{
2295	int i, ret;
2296	struct device *dev;
2297	struct dmar_drhd_unit *dmaru;
2298
2299	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2300	if (!dmaru)
2301		return 0;
2302
2303	/*
2304	 * All PCI devices managed by this unit should have been destroyed.
2305	 */
2306	if (!dmaru->include_all && dmaru->devices && dmaru->devices_cnt) {
2307		for_each_active_dev_scope(dmaru->devices,
2308					  dmaru->devices_cnt, i, dev)
2309			return -EBUSY;
2310	}
2311
2312	ret = dmar_ir_hotplug(dmaru, false);
2313	if (ret == 0)
2314		ret = dmar_iommu_hotplug(dmaru, false);
2315
2316	return ret;
2317}
2318
2319static int dmar_hp_release_drhd(struct acpi_dmar_header *header, void *arg)
2320{
2321	struct dmar_drhd_unit *dmaru;
2322
2323	dmaru = dmar_find_dmaru((struct acpi_dmar_hardware_unit *)header);
2324	if (dmaru) {
2325		list_del_rcu(&dmaru->list);
2326		synchronize_rcu();
2327		dmar_free_drhd(dmaru);
2328	}
2329
2330	return 0;
2331}
2332
2333static int dmar_hotplug_insert(acpi_handle handle)
2334{
2335	int ret;
2336	int drhd_count = 0;
2337
2338	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2339				     &dmar_validate_one_drhd, (void *)1);
2340	if (ret)
2341		goto out;
2342
2343	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2344				     &dmar_parse_one_drhd, (void *)&drhd_count);
2345	if (ret == 0 && drhd_count == 0) {
2346		pr_warn(FW_BUG "No DRHD structures in buffer returned by _DSM method\n");
2347		goto out;
2348	} else if (ret) {
2349		goto release_drhd;
2350	}
2351
2352	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_RHSA,
2353				     &dmar_parse_one_rhsa, NULL);
2354	if (ret)
2355		goto release_drhd;
2356
2357	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2358				     &dmar_parse_one_atsr, NULL);
2359	if (ret)
2360		goto release_atsr;
2361
2362	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2363				     &dmar_hp_add_drhd, NULL);
2364	if (!ret)
2365		return 0;
2366
2367	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2368			       &dmar_hp_remove_drhd, NULL);
2369release_atsr:
2370	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2371			       &dmar_release_one_atsr, NULL);
2372release_drhd:
2373	dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2374			       &dmar_hp_release_drhd, NULL);
2375out:
2376	return ret;
2377}
2378
2379static int dmar_hotplug_remove(acpi_handle handle)
2380{
2381	int ret;
2382
2383	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2384				     &dmar_check_one_atsr, NULL);
2385	if (ret)
2386		return ret;
2387
2388	ret = dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2389				     &dmar_hp_remove_drhd, NULL);
2390	if (ret == 0) {
2391		WARN_ON(dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_ATSR,
2392					       &dmar_release_one_atsr, NULL));
2393		WARN_ON(dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2394					       &dmar_hp_release_drhd, NULL));
2395	} else {
2396		dmar_walk_dsm_resource(handle, DMAR_DSM_FUNC_DRHD,
2397				       &dmar_hp_add_drhd, NULL);
2398	}
2399
2400	return ret;
2401}
2402
2403static acpi_status dmar_get_dsm_handle(acpi_handle handle, u32 lvl,
2404				       void *context, void **retval)
2405{
2406	acpi_handle *phdl = retval;
2407
2408	if (dmar_detect_dsm(handle, DMAR_DSM_FUNC_DRHD)) {
2409		*phdl = handle;
2410		return AE_CTRL_TERMINATE;
2411	}
2412
2413	return AE_OK;
2414}
2415
2416static int dmar_device_hotplug(acpi_handle handle, bool insert)
2417{
2418	int ret;
2419	acpi_handle tmp = NULL;
2420	acpi_status status;
2421
2422	if (!dmar_in_use())
2423		return 0;
2424
2425	if (dmar_detect_dsm(handle, DMAR_DSM_FUNC_DRHD)) {
2426		tmp = handle;
2427	} else {
2428		status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
2429					     ACPI_UINT32_MAX,
2430					     dmar_get_dsm_handle,
2431					     NULL, NULL, &tmp);
2432		if (ACPI_FAILURE(status)) {
2433			pr_warn("Failed to locate _DSM method.\n");
2434			return -ENXIO;
2435		}
2436	}
2437	if (tmp == NULL)
2438		return 0;
2439
2440	down_write(&dmar_global_lock);
2441	if (insert)
2442		ret = dmar_hotplug_insert(tmp);
2443	else
2444		ret = dmar_hotplug_remove(tmp);
2445	up_write(&dmar_global_lock);
2446
2447	return ret;
2448}
2449
2450int dmar_device_add(acpi_handle handle)
2451{
2452	return dmar_device_hotplug(handle, true);
2453}
2454
2455int dmar_device_remove(acpi_handle handle)
2456{
2457	return dmar_device_hotplug(handle, false);
2458}
2459
2460/*
2461 * dmar_platform_optin - Is %DMA_CTRL_PLATFORM_OPT_IN_FLAG set in DMAR table
2462 *
2463 * Returns true if the platform has %DMA_CTRL_PLATFORM_OPT_IN_FLAG set in
2464 * the ACPI DMAR table. This means that the platform boot firmware has made
2465 * sure no device can issue DMA outside of RMRR regions.
2466 */
2467bool dmar_platform_optin(void)
2468{
2469	struct acpi_table_dmar *dmar;
2470	acpi_status status;
2471	bool ret;
2472
2473	status = acpi_get_table(ACPI_SIG_DMAR, 0,
2474				(struct acpi_table_header **)&dmar);
2475	if (ACPI_FAILURE(status))
2476		return false;
2477
2478	ret = !!(dmar->flags & DMAR_PLATFORM_OPT_IN);
2479	acpi_put_table((struct acpi_table_header *)dmar);
2480
2481	return ret;
2482}
2483EXPORT_SYMBOL_GPL(dmar_platform_optin);