Linux Audio

Check our new training course

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