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