2 * Copyright (c) 2006, Intel Corporation.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA.
17 * Copyright (C) 2006-2008 Intel Corporation
18 * Author: Ashok Raj <ashok.raj@intel.com>
19 * Author: Shaohua Li <shaohua.li@intel.com>
20 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
22 * This file implements early detection/parsing of Remapping Devices
23 * reported to OS through BIOS via DMA remapping reporting (DMAR) ACPI
26 * These routines are used by both DMA-remapping and Interrupt-remapping
29 #include <linux/pci.h>
30 #include <linux/dmar.h>
31 #include <linux/iova.h>
32 #include <linux/intel-iommu.h>
33 #include <linux/timer.h>
34 #include <linux/irq.h>
35 #include <linux/interrupt.h>
37 #define PREFIX "DMAR: "
39 /* No locks are needed as DMA remapping hardware unit
40 * list is constructed at boot time and hotplug of
41 * these units are not supported by the architecture.
43 LIST_HEAD(dmar_drhd_units);
45 static struct acpi_table_header * __initdata dmar_tbl;
46 static acpi_size dmar_tbl_size;
48 static void __init dmar_register_drhd_unit(struct dmar_drhd_unit *drhd)
51 * add INCLUDE_ALL at the tail, so scan the list will find it at
54 if (drhd->include_all)
55 list_add_tail(&drhd->list, &dmar_drhd_units);
57 list_add(&drhd->list, &dmar_drhd_units);
60 static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
61 struct pci_dev **dev, u16 segment)
64 struct pci_dev *pdev = NULL;
65 struct acpi_dmar_pci_path *path;
68 bus = pci_find_bus(segment, scope->bus);
69 path = (struct acpi_dmar_pci_path *)(scope + 1);
70 count = (scope->length - sizeof(struct acpi_dmar_device_scope))
71 / sizeof(struct acpi_dmar_pci_path);
77 * Some BIOSes list non-exist devices in DMAR table, just
82 PREFIX "Device scope bus [%d] not found\n",
86 pdev = pci_get_slot(bus, PCI_DEVFN(path->dev, path->fn));
88 printk(KERN_WARNING PREFIX
89 "Device scope device [%04x:%02x:%02x.%02x] not found\n",
90 segment, bus->number, path->dev, path->fn);
95 bus = pdev->subordinate;
98 printk(KERN_WARNING PREFIX
99 "Device scope device [%04x:%02x:%02x.%02x] not found\n",
100 segment, scope->bus, path->dev, path->fn);
104 if ((scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT && \
105 pdev->subordinate) || (scope->entry_type == \
106 ACPI_DMAR_SCOPE_TYPE_BRIDGE && !pdev->subordinate)) {
108 printk(KERN_WARNING PREFIX
109 "Device scope type does not match for %s\n",
117 static int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
118 struct pci_dev ***devices, u16 segment)
120 struct acpi_dmar_device_scope *scope;
126 while (start < end) {
128 if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
129 scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)
132 printk(KERN_WARNING PREFIX
133 "Unsupported device scope\n");
134 start += scope->length;
139 *devices = kcalloc(*cnt, sizeof(struct pci_dev *), GFP_KERNEL);
145 while (start < end) {
147 if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
148 scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE) {
149 ret = dmar_parse_one_dev_scope(scope,
150 &(*devices)[index], segment);
157 start += scope->length;
164 * dmar_parse_one_drhd - parses exactly one DMA remapping hardware definition
165 * structure which uniquely represent one DMA remapping hardware unit
166 * present in the platform
169 dmar_parse_one_drhd(struct acpi_dmar_header *header)
171 struct acpi_dmar_hardware_unit *drhd;
172 struct dmar_drhd_unit *dmaru;
175 drhd = (struct acpi_dmar_hardware_unit *)header;
176 if (!drhd->address) {
177 /* Promote an attitude of violence to a BIOS engineer today */
178 WARN(1, "Your BIOS is broken; DMAR reported at address zero!\n"
179 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
180 dmi_get_system_info(DMI_BIOS_VENDOR),
181 dmi_get_system_info(DMI_BIOS_VERSION),
182 dmi_get_system_info(DMI_PRODUCT_VERSION));
185 dmaru = kzalloc(sizeof(*dmaru), GFP_KERNEL);
190 dmaru->reg_base_addr = drhd->address;
191 dmaru->segment = drhd->segment;
192 dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */
194 ret = alloc_iommu(dmaru);
199 dmar_register_drhd_unit(dmaru);
203 static int __init dmar_parse_dev(struct dmar_drhd_unit *dmaru)
205 struct acpi_dmar_hardware_unit *drhd;
208 drhd = (struct acpi_dmar_hardware_unit *) dmaru->hdr;
210 if (dmaru->include_all)
213 ret = dmar_parse_dev_scope((void *)(drhd + 1),
214 ((void *)drhd) + drhd->header.length,
215 &dmaru->devices_cnt, &dmaru->devices,
218 list_del(&dmaru->list);
225 LIST_HEAD(dmar_rmrr_units);
227 static void __init dmar_register_rmrr_unit(struct dmar_rmrr_unit *rmrr)
229 list_add(&rmrr->list, &dmar_rmrr_units);
234 dmar_parse_one_rmrr(struct acpi_dmar_header *header)
236 struct acpi_dmar_reserved_memory *rmrr;
237 struct dmar_rmrr_unit *rmrru;
239 rmrru = kzalloc(sizeof(*rmrru), GFP_KERNEL);
244 rmrr = (struct acpi_dmar_reserved_memory *)header;
245 rmrru->base_address = rmrr->base_address;
246 rmrru->end_address = rmrr->end_address;
248 dmar_register_rmrr_unit(rmrru);
253 rmrr_parse_dev(struct dmar_rmrr_unit *rmrru)
255 struct acpi_dmar_reserved_memory *rmrr;
258 rmrr = (struct acpi_dmar_reserved_memory *) rmrru->hdr;
259 ret = dmar_parse_dev_scope((void *)(rmrr + 1),
260 ((void *)rmrr) + rmrr->header.length,
261 &rmrru->devices_cnt, &rmrru->devices, rmrr->segment);
263 if (ret || (rmrru->devices_cnt == 0)) {
264 list_del(&rmrru->list);
270 static LIST_HEAD(dmar_atsr_units);
272 static int __init dmar_parse_one_atsr(struct acpi_dmar_header *hdr)
274 struct acpi_dmar_atsr *atsr;
275 struct dmar_atsr_unit *atsru;
277 atsr = container_of(hdr, struct acpi_dmar_atsr, header);
278 atsru = kzalloc(sizeof(*atsru), GFP_KERNEL);
283 atsru->include_all = atsr->flags & 0x1;
285 list_add(&atsru->list, &dmar_atsr_units);
290 static int __init atsr_parse_dev(struct dmar_atsr_unit *atsru)
293 struct acpi_dmar_atsr *atsr;
295 if (atsru->include_all)
298 atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
299 rc = dmar_parse_dev_scope((void *)(atsr + 1),
300 (void *)atsr + atsr->header.length,
301 &atsru->devices_cnt, &atsru->devices,
303 if (rc || !atsru->devices_cnt) {
304 list_del(&atsru->list);
311 int dmar_find_matched_atsr_unit(struct pci_dev *dev)
315 struct acpi_dmar_atsr *atsr;
316 struct dmar_atsr_unit *atsru;
318 list_for_each_entry(atsru, &dmar_atsr_units, list) {
319 atsr = container_of(atsru->hdr, struct acpi_dmar_atsr, header);
320 if (atsr->segment == pci_domain_nr(dev->bus))
327 for (bus = dev->bus; bus; bus = bus->parent) {
328 struct pci_dev *bridge = bus->self;
330 if (!bridge || !bridge->is_pcie ||
331 bridge->pcie_type == PCI_EXP_TYPE_PCI_BRIDGE)
334 if (bridge->pcie_type == PCI_EXP_TYPE_ROOT_PORT) {
335 for (i = 0; i < atsru->devices_cnt; i++)
336 if (atsru->devices[i] == bridge)
342 if (atsru->include_all)
350 dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
352 struct acpi_dmar_hardware_unit *drhd;
353 struct acpi_dmar_reserved_memory *rmrr;
354 struct acpi_dmar_atsr *atsr;
356 switch (header->type) {
357 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
358 drhd = container_of(header, struct acpi_dmar_hardware_unit,
360 printk (KERN_INFO PREFIX
361 "DRHD base: %#016Lx flags: %#x\n",
362 (unsigned long long)drhd->address, drhd->flags);
364 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
365 rmrr = container_of(header, struct acpi_dmar_reserved_memory,
367 printk (KERN_INFO PREFIX
368 "RMRR base: %#016Lx end: %#016Lx\n",
369 (unsigned long long)rmrr->base_address,
370 (unsigned long long)rmrr->end_address);
372 case ACPI_DMAR_TYPE_ATSR:
373 atsr = container_of(header, struct acpi_dmar_atsr, header);
374 printk(KERN_INFO PREFIX "ATSR flags: %#x\n", atsr->flags);
380 * dmar_table_detect - checks to see if the platform supports DMAR devices
382 static int __init dmar_table_detect(void)
384 acpi_status status = AE_OK;
386 /* if we could find DMAR table, then there are DMAR devices */
387 status = acpi_get_table_with_size(ACPI_SIG_DMAR, 0,
388 (struct acpi_table_header **)&dmar_tbl,
391 if (ACPI_SUCCESS(status) && !dmar_tbl) {
392 printk (KERN_WARNING PREFIX "Unable to map DMAR\n");
393 status = AE_NOT_FOUND;
396 return (ACPI_SUCCESS(status) ? 1 : 0);
400 * parse_dmar_table - parses the DMA reporting table
403 parse_dmar_table(void)
405 struct acpi_table_dmar *dmar;
406 struct acpi_dmar_header *entry_header;
410 * Do it again, earlier dmar_tbl mapping could be mapped with
415 dmar = (struct acpi_table_dmar *)dmar_tbl;
419 if (dmar->width < PAGE_SHIFT - 1) {
420 printk(KERN_WARNING PREFIX "Invalid DMAR haw\n");
424 printk (KERN_INFO PREFIX "Host address width %d\n",
427 entry_header = (struct acpi_dmar_header *)(dmar + 1);
428 while (((unsigned long)entry_header) <
429 (((unsigned long)dmar) + dmar_tbl->length)) {
430 /* Avoid looping forever on bad ACPI tables */
431 if (entry_header->length == 0) {
432 printk(KERN_WARNING PREFIX
433 "Invalid 0-length structure\n");
438 dmar_table_print_dmar_entry(entry_header);
440 switch (entry_header->type) {
441 case ACPI_DMAR_TYPE_HARDWARE_UNIT:
442 ret = dmar_parse_one_drhd(entry_header);
444 case ACPI_DMAR_TYPE_RESERVED_MEMORY:
446 ret = dmar_parse_one_rmrr(entry_header);
449 case ACPI_DMAR_TYPE_ATSR:
451 ret = dmar_parse_one_atsr(entry_header);
455 printk(KERN_WARNING PREFIX
456 "Unknown DMAR structure type\n");
457 ret = 0; /* for forward compatibility */
463 entry_header = ((void *)entry_header + entry_header->length);
468 int dmar_pci_device_match(struct pci_dev *devices[], int cnt,
474 for (index = 0; index < cnt; index++)
475 if (dev == devices[index])
478 /* Check our parent */
479 dev = dev->bus->self;
485 struct dmar_drhd_unit *
486 dmar_find_matched_drhd_unit(struct pci_dev *dev)
488 struct dmar_drhd_unit *dmaru = NULL;
489 struct acpi_dmar_hardware_unit *drhd;
491 list_for_each_entry(dmaru, &dmar_drhd_units, list) {
492 drhd = container_of(dmaru->hdr,
493 struct acpi_dmar_hardware_unit,
496 if (dmaru->include_all &&
497 drhd->segment == pci_domain_nr(dev->bus))
500 if (dmar_pci_device_match(dmaru->devices,
501 dmaru->devices_cnt, dev))
508 int __init dmar_dev_scope_init(void)
510 struct dmar_drhd_unit *drhd, *drhd_n;
513 list_for_each_entry_safe(drhd, drhd_n, &dmar_drhd_units, list) {
514 ret = dmar_parse_dev(drhd);
521 struct dmar_rmrr_unit *rmrr, *rmrr_n;
522 struct dmar_atsr_unit *atsr, *atsr_n;
524 list_for_each_entry_safe(rmrr, rmrr_n, &dmar_rmrr_units, list) {
525 ret = rmrr_parse_dev(rmrr);
530 list_for_each_entry_safe(atsr, atsr_n, &dmar_atsr_units, list) {
531 ret = atsr_parse_dev(atsr);
542 int __init dmar_table_init(void)
544 static int dmar_table_initialized;
547 if (dmar_table_initialized)
550 dmar_table_initialized = 1;
552 ret = parse_dmar_table();
555 printk(KERN_INFO PREFIX "parse DMAR table failure.\n");
559 if (list_empty(&dmar_drhd_units)) {
560 printk(KERN_INFO PREFIX "No DMAR devices found\n");
565 if (list_empty(&dmar_rmrr_units))
566 printk(KERN_INFO PREFIX "No RMRR found\n");
568 if (list_empty(&dmar_atsr_units))
569 printk(KERN_INFO PREFIX "No ATSR found\n");
572 #ifdef CONFIG_INTR_REMAP
573 parse_ioapics_under_ir();
578 void __init detect_intel_iommu(void)
582 ret = dmar_table_detect();
585 #ifdef CONFIG_INTR_REMAP
586 struct acpi_table_dmar *dmar;
588 * for now we will disable dma-remapping when interrupt
589 * remapping is enabled.
590 * When support for queued invalidation for IOTLB invalidation
591 * is added, we will not need this any more.
593 dmar = (struct acpi_table_dmar *) dmar_tbl;
594 if (ret && cpu_has_x2apic && dmar->flags & 0x1)
596 "Queued invalidation will be enabled to support "
597 "x2apic and Intr-remapping.\n");
600 if (ret && !no_iommu && !iommu_detected && !swiotlb &&
605 early_acpi_os_unmap_memory(dmar_tbl, dmar_tbl_size);
610 int alloc_iommu(struct dmar_drhd_unit *drhd)
612 struct intel_iommu *iommu;
615 static int iommu_allocated = 0;
619 iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
623 iommu->seq_id = iommu_allocated++;
624 sprintf (iommu->name, "dmar%d", iommu->seq_id);
626 iommu->reg = ioremap(drhd->reg_base_addr, VTD_PAGE_SIZE);
628 printk(KERN_ERR "IOMMU: can't map the region\n");
631 iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG);
632 iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG);
635 agaw = iommu_calculate_agaw(iommu);
638 "Cannot get a valid agaw for iommu (seq_id = %d)\n",
642 msagaw = iommu_calculate_max_sagaw(iommu);
645 "Cannot get a valid max agaw for iommu (seq_id = %d)\n",
651 iommu->msagaw = msagaw;
653 /* the registers might be more than one page */
654 map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap),
655 cap_max_fault_reg_offset(iommu->cap));
656 map_size = VTD_PAGE_ALIGN(map_size);
657 if (map_size > VTD_PAGE_SIZE) {
659 iommu->reg = ioremap(drhd->reg_base_addr, map_size);
661 printk(KERN_ERR "IOMMU: can't map the region\n");
666 ver = readl(iommu->reg + DMAR_VER_REG);
667 pr_debug("IOMMU %llx: ver %d:%d cap %llx ecap %llx\n",
668 (unsigned long long)drhd->reg_base_addr,
669 DMAR_VER_MAJOR(ver), DMAR_VER_MINOR(ver),
670 (unsigned long long)iommu->cap,
671 (unsigned long long)iommu->ecap);
673 spin_lock_init(&iommu->register_lock);
682 void free_iommu(struct intel_iommu *iommu)
688 free_dmar_iommu(iommu);
697 * Reclaim all the submitted descriptors which have completed its work.
699 static inline void reclaim_free_desc(struct q_inval *qi)
701 while (qi->desc_status[qi->free_tail] == QI_DONE ||
702 qi->desc_status[qi->free_tail] == QI_ABORT) {
703 qi->desc_status[qi->free_tail] = QI_FREE;
704 qi->free_tail = (qi->free_tail + 1) % QI_LENGTH;
709 static int qi_check_fault(struct intel_iommu *iommu, int index)
713 struct q_inval *qi = iommu->qi;
714 int wait_index = (index + 1) % QI_LENGTH;
716 if (qi->desc_status[wait_index] == QI_ABORT)
719 fault = readl(iommu->reg + DMAR_FSTS_REG);
722 * If IQE happens, the head points to the descriptor associated
723 * with the error. No new descriptors are fetched until the IQE
726 if (fault & DMA_FSTS_IQE) {
727 head = readl(iommu->reg + DMAR_IQH_REG);
728 if ((head >> DMAR_IQ_SHIFT) == index) {
729 printk(KERN_ERR "VT-d detected invalid descriptor: "
730 "low=%llx, high=%llx\n",
731 (unsigned long long)qi->desc[index].low,
732 (unsigned long long)qi->desc[index].high);
733 memcpy(&qi->desc[index], &qi->desc[wait_index],
734 sizeof(struct qi_desc));
735 __iommu_flush_cache(iommu, &qi->desc[index],
736 sizeof(struct qi_desc));
737 writel(DMA_FSTS_IQE, iommu->reg + DMAR_FSTS_REG);
743 * If ITE happens, all pending wait_desc commands are aborted.
744 * No new descriptors are fetched until the ITE is cleared.
746 if (fault & DMA_FSTS_ITE) {
747 head = readl(iommu->reg + DMAR_IQH_REG);
748 head = ((head >> DMAR_IQ_SHIFT) - 1 + QI_LENGTH) % QI_LENGTH;
750 tail = readl(iommu->reg + DMAR_IQT_REG);
751 tail = ((tail >> DMAR_IQ_SHIFT) - 1 + QI_LENGTH) % QI_LENGTH;
753 writel(DMA_FSTS_ITE, iommu->reg + DMAR_FSTS_REG);
756 if (qi->desc_status[head] == QI_IN_USE)
757 qi->desc_status[head] = QI_ABORT;
758 head = (head - 2 + QI_LENGTH) % QI_LENGTH;
759 } while (head != tail);
761 if (qi->desc_status[wait_index] == QI_ABORT)
765 if (fault & DMA_FSTS_ICE)
766 writel(DMA_FSTS_ICE, iommu->reg + DMAR_FSTS_REG);
772 * Submit the queued invalidation descriptor to the remapping
773 * hardware unit and wait for its completion.
775 int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu)
778 struct q_inval *qi = iommu->qi;
779 struct qi_desc *hw, wait_desc;
780 int wait_index, index;
791 spin_lock_irqsave(&qi->q_lock, flags);
792 while (qi->free_cnt < 3) {
793 spin_unlock_irqrestore(&qi->q_lock, flags);
795 spin_lock_irqsave(&qi->q_lock, flags);
798 index = qi->free_head;
799 wait_index = (index + 1) % QI_LENGTH;
801 qi->desc_status[index] = qi->desc_status[wait_index] = QI_IN_USE;
805 wait_desc.low = QI_IWD_STATUS_DATA(QI_DONE) |
806 QI_IWD_STATUS_WRITE | QI_IWD_TYPE;
807 wait_desc.high = virt_to_phys(&qi->desc_status[wait_index]);
809 hw[wait_index] = wait_desc;
811 __iommu_flush_cache(iommu, &hw[index], sizeof(struct qi_desc));
812 __iommu_flush_cache(iommu, &hw[wait_index], sizeof(struct qi_desc));
814 qi->free_head = (qi->free_head + 2) % QI_LENGTH;
818 * update the HW tail register indicating the presence of
821 writel(qi->free_head << DMAR_IQ_SHIFT, iommu->reg + DMAR_IQT_REG);
823 while (qi->desc_status[wait_index] != QI_DONE) {
825 * We will leave the interrupts disabled, to prevent interrupt
826 * context to queue another cmd while a cmd is already submitted
827 * and waiting for completion on this cpu. This is to avoid
828 * a deadlock where the interrupt context can wait indefinitely
829 * for free slots in the queue.
831 rc = qi_check_fault(iommu, index);
835 spin_unlock(&qi->q_lock);
837 spin_lock(&qi->q_lock);
840 qi->desc_status[index] = QI_DONE;
842 reclaim_free_desc(qi);
843 spin_unlock_irqrestore(&qi->q_lock, flags);
852 * Flush the global interrupt entry cache.
854 void qi_global_iec(struct intel_iommu *iommu)
858 desc.low = QI_IEC_TYPE;
861 /* should never fail */
862 qi_submit_sync(&desc, iommu);
865 void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm,
870 desc.low = QI_CC_FM(fm) | QI_CC_SID(sid) | QI_CC_DID(did)
871 | QI_CC_GRAN(type) | QI_CC_TYPE;
874 qi_submit_sync(&desc, iommu);
877 void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
878 unsigned int size_order, u64 type)
885 if (cap_write_drain(iommu->cap))
888 if (cap_read_drain(iommu->cap))
891 desc.low = QI_IOTLB_DID(did) | QI_IOTLB_DR(dr) | QI_IOTLB_DW(dw)
892 | QI_IOTLB_GRAN(type) | QI_IOTLB_TYPE;
893 desc.high = QI_IOTLB_ADDR(addr) | QI_IOTLB_IH(ih)
894 | QI_IOTLB_AM(size_order);
896 qi_submit_sync(&desc, iommu);
899 void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 qdep,
900 u64 addr, unsigned mask)
905 BUG_ON(addr & ((1 << (VTD_PAGE_SHIFT + mask)) - 1));
906 addr |= (1 << (VTD_PAGE_SHIFT + mask - 1)) - 1;
907 desc.high = QI_DEV_IOTLB_ADDR(addr) | QI_DEV_IOTLB_SIZE;
909 desc.high = QI_DEV_IOTLB_ADDR(addr);
911 if (qdep >= QI_DEV_IOTLB_MAX_INVS)
914 desc.low = QI_DEV_IOTLB_SID(sid) | QI_DEV_IOTLB_QDEP(qdep) |
917 qi_submit_sync(&desc, iommu);
921 * Disable Queued Invalidation interface.
923 void dmar_disable_qi(struct intel_iommu *iommu)
927 cycles_t start_time = get_cycles();
929 if (!ecap_qis(iommu->ecap))
932 spin_lock_irqsave(&iommu->register_lock, flags);
934 sts = dmar_readq(iommu->reg + DMAR_GSTS_REG);
935 if (!(sts & DMA_GSTS_QIES))
939 * Give a chance to HW to complete the pending invalidation requests.
941 while ((readl(iommu->reg + DMAR_IQT_REG) !=
942 readl(iommu->reg + DMAR_IQH_REG)) &&
943 (DMAR_OPERATION_TIMEOUT > (get_cycles() - start_time)))
946 iommu->gcmd &= ~DMA_GCMD_QIE;
947 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
949 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl,
950 !(sts & DMA_GSTS_QIES), sts);
952 spin_unlock_irqrestore(&iommu->register_lock, flags);
956 * Enable queued invalidation.
958 static void __dmar_enable_qi(struct intel_iommu *iommu)
962 struct q_inval *qi = iommu->qi;
964 qi->free_head = qi->free_tail = 0;
965 qi->free_cnt = QI_LENGTH;
967 spin_lock_irqsave(&iommu->register_lock, flags);
969 /* write zero to the tail reg */
970 writel(0, iommu->reg + DMAR_IQT_REG);
972 dmar_writeq(iommu->reg + DMAR_IQA_REG, virt_to_phys(qi->desc));
974 iommu->gcmd |= DMA_GCMD_QIE;
975 writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
977 /* Make sure hardware complete it */
978 IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts);
980 spin_unlock_irqrestore(&iommu->register_lock, flags);
984 * Enable Queued Invalidation interface. This is a must to support
985 * interrupt-remapping. Also used by DMA-remapping, which replaces
986 * register based IOTLB invalidation.
988 int dmar_enable_qi(struct intel_iommu *iommu)
992 if (!ecap_qis(iommu->ecap))
996 * queued invalidation is already setup and enabled.
1001 iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
1007 qi->desc = (void *)(get_zeroed_page(GFP_ATOMIC));
1014 qi->desc_status = kmalloc(QI_LENGTH * sizeof(int), GFP_ATOMIC);
1015 if (!qi->desc_status) {
1016 free_page((unsigned long) qi->desc);
1022 qi->free_head = qi->free_tail = 0;
1023 qi->free_cnt = QI_LENGTH;
1025 spin_lock_init(&qi->q_lock);
1027 __dmar_enable_qi(iommu);
1032 /* iommu interrupt handling. Most stuff are MSI-like. */
1040 static const char *dma_remap_fault_reasons[] =
1043 "Present bit in root entry is clear",
1044 "Present bit in context entry is clear",
1045 "Invalid context entry",
1046 "Access beyond MGAW",
1047 "PTE Write access is not set",
1048 "PTE Read access is not set",
1049 "Next page table ptr is invalid",
1050 "Root table address invalid",
1051 "Context table ptr is invalid",
1052 "non-zero reserved fields in RTP",
1053 "non-zero reserved fields in CTP",
1054 "non-zero reserved fields in PTE",
1057 static const char *intr_remap_fault_reasons[] =
1059 "Detected reserved fields in the decoded interrupt-remapped request",
1060 "Interrupt index exceeded the interrupt-remapping table size",
1061 "Present field in the IRTE entry is clear",
1062 "Error accessing interrupt-remapping table pointed by IRTA_REG",
1063 "Detected reserved fields in the IRTE entry",
1064 "Blocked a compatibility format interrupt request",
1065 "Blocked an interrupt request due to source-id verification failure",
1068 #define MAX_FAULT_REASON_IDX (ARRAY_SIZE(fault_reason_strings) - 1)
1070 const char *dmar_get_fault_reason(u8 fault_reason, int *fault_type)
1072 if (fault_reason >= 0x20 && (fault_reason <= 0x20 +
1073 ARRAY_SIZE(intr_remap_fault_reasons))) {
1074 *fault_type = INTR_REMAP;
1075 return intr_remap_fault_reasons[fault_reason - 0x20];
1076 } else if (fault_reason < ARRAY_SIZE(dma_remap_fault_reasons)) {
1077 *fault_type = DMA_REMAP;
1078 return dma_remap_fault_reasons[fault_reason];
1080 *fault_type = UNKNOWN;
1085 void dmar_msi_unmask(unsigned int irq)
1087 struct intel_iommu *iommu = get_irq_data(irq);
1091 spin_lock_irqsave(&iommu->register_lock, flag);
1092 writel(0, iommu->reg + DMAR_FECTL_REG);
1093 /* Read a reg to force flush the post write */
1094 readl(iommu->reg + DMAR_FECTL_REG);
1095 spin_unlock_irqrestore(&iommu->register_lock, flag);
1098 void dmar_msi_mask(unsigned int irq)
1101 struct intel_iommu *iommu = get_irq_data(irq);
1104 spin_lock_irqsave(&iommu->register_lock, flag);
1105 writel(DMA_FECTL_IM, iommu->reg + DMAR_FECTL_REG);
1106 /* Read a reg to force flush the post write */
1107 readl(iommu->reg + DMAR_FECTL_REG);
1108 spin_unlock_irqrestore(&iommu->register_lock, flag);
1111 void dmar_msi_write(int irq, struct msi_msg *msg)
1113 struct intel_iommu *iommu = get_irq_data(irq);
1116 spin_lock_irqsave(&iommu->register_lock, flag);
1117 writel(msg->data, iommu->reg + DMAR_FEDATA_REG);
1118 writel(msg->address_lo, iommu->reg + DMAR_FEADDR_REG);
1119 writel(msg->address_hi, iommu->reg + DMAR_FEUADDR_REG);
1120 spin_unlock_irqrestore(&iommu->register_lock, flag);
1123 void dmar_msi_read(int irq, struct msi_msg *msg)
1125 struct intel_iommu *iommu = get_irq_data(irq);
1128 spin_lock_irqsave(&iommu->register_lock, flag);
1129 msg->data = readl(iommu->reg + DMAR_FEDATA_REG);
1130 msg->address_lo = readl(iommu->reg + DMAR_FEADDR_REG);
1131 msg->address_hi = readl(iommu->reg + DMAR_FEUADDR_REG);
1132 spin_unlock_irqrestore(&iommu->register_lock, flag);
1135 static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
1136 u8 fault_reason, u16 source_id, unsigned long long addr)
1141 reason = dmar_get_fault_reason(fault_reason, &fault_type);
1143 if (fault_type == INTR_REMAP)
1144 printk(KERN_ERR "INTR-REMAP: Request device [[%02x:%02x.%d] "
1145 "fault index %llx\n"
1146 "INTR-REMAP:[fault reason %02d] %s\n",
1147 (source_id >> 8), PCI_SLOT(source_id & 0xFF),
1148 PCI_FUNC(source_id & 0xFF), addr >> 48,
1149 fault_reason, reason);
1152 "DMAR:[%s] Request device [%02x:%02x.%d] "
1153 "fault addr %llx \n"
1154 "DMAR:[fault reason %02d] %s\n",
1155 (type ? "DMA Read" : "DMA Write"),
1156 (source_id >> 8), PCI_SLOT(source_id & 0xFF),
1157 PCI_FUNC(source_id & 0xFF), addr, fault_reason, reason);
1161 #define PRIMARY_FAULT_REG_LEN (16)
1162 irqreturn_t dmar_fault(int irq, void *dev_id)
1164 struct intel_iommu *iommu = dev_id;
1165 int reg, fault_index;
1169 spin_lock_irqsave(&iommu->register_lock, flag);
1170 fault_status = readl(iommu->reg + DMAR_FSTS_REG);
1172 printk(KERN_ERR "DRHD: handling fault status reg %x\n",
1175 /* TBD: ignore advanced fault log currently */
1176 if (!(fault_status & DMA_FSTS_PPF))
1179 fault_index = dma_fsts_fault_record_index(fault_status);
1180 reg = cap_fault_reg_offset(iommu->cap);
1188 /* highest 32 bits */
1189 data = readl(iommu->reg + reg +
1190 fault_index * PRIMARY_FAULT_REG_LEN + 12);
1191 if (!(data & DMA_FRCD_F))
1194 fault_reason = dma_frcd_fault_reason(data);
1195 type = dma_frcd_type(data);
1197 data = readl(iommu->reg + reg +
1198 fault_index * PRIMARY_FAULT_REG_LEN + 8);
1199 source_id = dma_frcd_source_id(data);
1201 guest_addr = dmar_readq(iommu->reg + reg +
1202 fault_index * PRIMARY_FAULT_REG_LEN);
1203 guest_addr = dma_frcd_page_addr(guest_addr);
1204 /* clear the fault */
1205 writel(DMA_FRCD_F, iommu->reg + reg +
1206 fault_index * PRIMARY_FAULT_REG_LEN + 12);
1208 spin_unlock_irqrestore(&iommu->register_lock, flag);
1210 dmar_fault_do_one(iommu, type, fault_reason,
1211 source_id, guest_addr);
1214 if (fault_index > cap_num_fault_regs(iommu->cap))
1216 spin_lock_irqsave(&iommu->register_lock, flag);
1219 /* clear all the other faults */
1220 fault_status = readl(iommu->reg + DMAR_FSTS_REG);
1221 writel(fault_status, iommu->reg + DMAR_FSTS_REG);
1223 spin_unlock_irqrestore(&iommu->register_lock, flag);
1227 int dmar_set_interrupt(struct intel_iommu *iommu)
1232 * Check if the fault interrupt is already initialized.
1239 printk(KERN_ERR "IOMMU: no free vectors\n");
1243 set_irq_data(irq, iommu);
1246 ret = arch_setup_dmar_msi(irq);
1248 set_irq_data(irq, NULL);
1254 ret = request_irq(irq, dmar_fault, 0, iommu->name, iommu);
1256 printk(KERN_ERR "IOMMU: can't request irq\n");
1260 int __init enable_drhd_fault_handling(void)
1262 struct dmar_drhd_unit *drhd;
1265 * Enable fault control interrupt.
1267 for_each_drhd_unit(drhd) {
1269 struct intel_iommu *iommu = drhd->iommu;
1270 ret = dmar_set_interrupt(iommu);
1273 printk(KERN_ERR "DRHD %Lx: failed to enable fault, "
1274 " interrupt, ret %d\n",
1275 (unsigned long long)drhd->reg_base_addr, ret);
1284 * Re-enable Queued Invalidation interface.
1286 int dmar_reenable_qi(struct intel_iommu *iommu)
1288 if (!ecap_qis(iommu->ecap))
1295 * First disable queued invalidation.
1297 dmar_disable_qi(iommu);
1299 * Then enable queued invalidation again. Since there is no pending
1300 * invalidation requests now, it's safe to re-enable queued
1303 __dmar_enable_qi(iommu);