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>
36 #include <linux/tboot.h>
37 #include <linux/dmi.h>
38 #include <linux/slab.h>
39 #include <asm/iommu_table.h>
41 #define PREFIX "DMAR: "
43 /* No locks are needed as DMA remapping hardware unit
44 * list is constructed at boot time and hotplug of
45 * these units are not supported by the architecture.
47 LIST_HEAD(dmar_drhd_units
);
49 static struct acpi_table_header
* __initdata dmar_tbl
;
50 static acpi_size dmar_tbl_size
;
52 static void __init
dmar_register_drhd_unit(struct dmar_drhd_unit
*drhd
)
55 * add INCLUDE_ALL at the tail, so scan the list will find it at
58 if (drhd
->include_all
)
59 list_add_tail(&drhd
->list
, &dmar_drhd_units
);
61 list_add(&drhd
->list
, &dmar_drhd_units
);
64 static int __init
dmar_parse_one_dev_scope(struct acpi_dmar_device_scope
*scope
,
65 struct pci_dev
**dev
, u16 segment
)
68 struct pci_dev
*pdev
= NULL
;
69 struct acpi_dmar_pci_path
*path
;
72 bus
= pci_find_bus(segment
, scope
->bus
);
73 path
= (struct acpi_dmar_pci_path
*)(scope
+ 1);
74 count
= (scope
->length
- sizeof(struct acpi_dmar_device_scope
))
75 / sizeof(struct acpi_dmar_pci_path
);
81 * Some BIOSes list non-exist devices in DMAR table, just
86 PREFIX
"Device scope bus [%d] not found\n",
90 pdev
= pci_get_slot(bus
, PCI_DEVFN(path
->dev
, path
->fn
));
92 printk(KERN_WARNING PREFIX
93 "Device scope device [%04x:%02x:%02x.%02x] not found\n",
94 segment
, bus
->number
, path
->dev
, path
->fn
);
99 bus
= pdev
->subordinate
;
102 printk(KERN_WARNING PREFIX
103 "Device scope device [%04x:%02x:%02x.%02x] not found\n",
104 segment
, scope
->bus
, path
->dev
, path
->fn
);
108 if ((scope
->entry_type
== ACPI_DMAR_SCOPE_TYPE_ENDPOINT
&& \
109 pdev
->subordinate
) || (scope
->entry_type
== \
110 ACPI_DMAR_SCOPE_TYPE_BRIDGE
&& !pdev
->subordinate
)) {
112 printk(KERN_WARNING PREFIX
113 "Device scope type does not match for %s\n",
121 static int __init
dmar_parse_dev_scope(void *start
, void *end
, int *cnt
,
122 struct pci_dev
***devices
, u16 segment
)
124 struct acpi_dmar_device_scope
*scope
;
130 while (start
< end
) {
132 if (scope
->entry_type
== ACPI_DMAR_SCOPE_TYPE_ENDPOINT
||
133 scope
->entry_type
== ACPI_DMAR_SCOPE_TYPE_BRIDGE
)
135 else if (scope
->entry_type
!= ACPI_DMAR_SCOPE_TYPE_IOAPIC
) {
136 printk(KERN_WARNING PREFIX
137 "Unsupported device scope\n");
139 start
+= scope
->length
;
144 *devices
= kcalloc(*cnt
, sizeof(struct pci_dev
*), GFP_KERNEL
);
150 while (start
< end
) {
152 if (scope
->entry_type
== ACPI_DMAR_SCOPE_TYPE_ENDPOINT
||
153 scope
->entry_type
== ACPI_DMAR_SCOPE_TYPE_BRIDGE
) {
154 ret
= dmar_parse_one_dev_scope(scope
,
155 &(*devices
)[index
], segment
);
162 start
+= scope
->length
;
169 * dmar_parse_one_drhd - parses exactly one DMA remapping hardware definition
170 * structure which uniquely represent one DMA remapping hardware unit
171 * present in the platform
174 dmar_parse_one_drhd(struct acpi_dmar_header
*header
)
176 struct acpi_dmar_hardware_unit
*drhd
;
177 struct dmar_drhd_unit
*dmaru
;
180 drhd
= (struct acpi_dmar_hardware_unit
*)header
;
181 dmaru
= kzalloc(sizeof(*dmaru
), GFP_KERNEL
);
186 dmaru
->reg_base_addr
= drhd
->address
;
187 dmaru
->segment
= drhd
->segment
;
188 dmaru
->include_all
= drhd
->flags
& 0x1; /* BIT0: INCLUDE_ALL */
190 ret
= alloc_iommu(dmaru
);
195 dmar_register_drhd_unit(dmaru
);
199 static int __init
dmar_parse_dev(struct dmar_drhd_unit
*dmaru
)
201 struct acpi_dmar_hardware_unit
*drhd
;
204 drhd
= (struct acpi_dmar_hardware_unit
*) dmaru
->hdr
;
206 if (dmaru
->include_all
)
209 ret
= dmar_parse_dev_scope((void *)(drhd
+ 1),
210 ((void *)drhd
) + drhd
->header
.length
,
211 &dmaru
->devices_cnt
, &dmaru
->devices
,
214 list_del(&dmaru
->list
);
221 LIST_HEAD(dmar_rmrr_units
);
223 static void __init
dmar_register_rmrr_unit(struct dmar_rmrr_unit
*rmrr
)
225 list_add(&rmrr
->list
, &dmar_rmrr_units
);
230 dmar_parse_one_rmrr(struct acpi_dmar_header
*header
)
232 struct acpi_dmar_reserved_memory
*rmrr
;
233 struct dmar_rmrr_unit
*rmrru
;
235 rmrru
= kzalloc(sizeof(*rmrru
), GFP_KERNEL
);
240 rmrr
= (struct acpi_dmar_reserved_memory
*)header
;
241 rmrru
->base_address
= rmrr
->base_address
;
242 rmrru
->end_address
= rmrr
->end_address
;
244 dmar_register_rmrr_unit(rmrru
);
249 rmrr_parse_dev(struct dmar_rmrr_unit
*rmrru
)
251 struct acpi_dmar_reserved_memory
*rmrr
;
254 rmrr
= (struct acpi_dmar_reserved_memory
*) rmrru
->hdr
;
255 ret
= dmar_parse_dev_scope((void *)(rmrr
+ 1),
256 ((void *)rmrr
) + rmrr
->header
.length
,
257 &rmrru
->devices_cnt
, &rmrru
->devices
, rmrr
->segment
);
259 if (ret
|| (rmrru
->devices_cnt
== 0)) {
260 list_del(&rmrru
->list
);
266 LIST_HEAD(dmar_atsr_units
);
268 static int __init
dmar_parse_one_atsr(struct acpi_dmar_header
*hdr
)
270 struct acpi_dmar_atsr
*atsr
;
271 struct dmar_atsr_unit
*atsru
;
273 atsr
= container_of(hdr
, struct acpi_dmar_atsr
, header
);
274 atsru
= kzalloc(sizeof(*atsru
), GFP_KERNEL
);
279 atsru
->include_all
= atsr
->flags
& 0x1;
280 atsru
->segment
= atsr
->segment
;
282 list_add(&atsru
->list
, &dmar_atsr_units
);
287 static int __init
atsr_parse_dev(struct dmar_atsr_unit
*atsru
)
290 struct acpi_dmar_atsr
*atsr
;
292 if (atsru
->include_all
)
295 atsr
= container_of(atsru
->hdr
, struct acpi_dmar_atsr
, header
);
296 rc
= dmar_parse_dev_scope((void *)(atsr
+ 1),
297 (void *)atsr
+ atsr
->header
.length
,
298 &atsru
->devices_cnt
, &atsru
->devices
,
300 if (rc
|| !atsru
->devices_cnt
) {
301 list_del(&atsru
->list
);
308 int dmar_find_matched_atsr_unit(struct pci_dev
*dev
)
312 struct dmar_atsr_unit
*atsru
;
314 dev
= pci_physfn(dev
);
316 list_for_each_entry(atsru
, &dmar_atsr_units
, list
) {
317 if (atsru
->segment
== pci_domain_nr(dev
->bus
))
324 for (bus
= dev
->bus
; bus
; bus
= bus
->parent
) {
325 struct pci_dev
*bridge
= bus
->self
;
327 if (!bridge
|| !pci_is_pcie(bridge
) ||
328 bridge
->pcie_type
== PCI_EXP_TYPE_PCI_BRIDGE
)
331 if (bridge
->pcie_type
== PCI_EXP_TYPE_ROOT_PORT
) {
332 for (i
= 0; i
< atsru
->devices_cnt
; i
++)
333 if (atsru
->devices
[i
] == bridge
)
339 if (atsru
->include_all
)
346 #ifdef CONFIG_ACPI_NUMA
348 dmar_parse_one_rhsa(struct acpi_dmar_header
*header
)
350 struct acpi_dmar_rhsa
*rhsa
;
351 struct dmar_drhd_unit
*drhd
;
353 rhsa
= (struct acpi_dmar_rhsa
*)header
;
354 for_each_drhd_unit(drhd
) {
355 if (drhd
->reg_base_addr
== rhsa
->base_address
) {
356 int node
= acpi_map_pxm_to_node(rhsa
->proximity_domain
);
358 if (!node_online(node
))
360 drhd
->iommu
->node
= node
;
365 1, TAINT_FIRMWARE_WORKAROUND
,
366 "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n"
367 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
369 dmi_get_system_info(DMI_BIOS_VENDOR
),
370 dmi_get_system_info(DMI_BIOS_VERSION
),
371 dmi_get_system_info(DMI_PRODUCT_VERSION
));
378 dmar_table_print_dmar_entry(struct acpi_dmar_header
*header
)
380 struct acpi_dmar_hardware_unit
*drhd
;
381 struct acpi_dmar_reserved_memory
*rmrr
;
382 struct acpi_dmar_atsr
*atsr
;
383 struct acpi_dmar_rhsa
*rhsa
;
385 switch (header
->type
) {
386 case ACPI_DMAR_TYPE_HARDWARE_UNIT
:
387 drhd
= container_of(header
, struct acpi_dmar_hardware_unit
,
389 printk (KERN_INFO PREFIX
390 "DRHD base: %#016Lx flags: %#x\n",
391 (unsigned long long)drhd
->address
, drhd
->flags
);
393 case ACPI_DMAR_TYPE_RESERVED_MEMORY
:
394 rmrr
= container_of(header
, struct acpi_dmar_reserved_memory
,
396 printk (KERN_INFO PREFIX
397 "RMRR base: %#016Lx end: %#016Lx\n",
398 (unsigned long long)rmrr
->base_address
,
399 (unsigned long long)rmrr
->end_address
);
401 case ACPI_DMAR_TYPE_ATSR
:
402 atsr
= container_of(header
, struct acpi_dmar_atsr
, header
);
403 printk(KERN_INFO PREFIX
"ATSR flags: %#x\n", atsr
->flags
);
405 case ACPI_DMAR_HARDWARE_AFFINITY
:
406 rhsa
= container_of(header
, struct acpi_dmar_rhsa
, header
);
407 printk(KERN_INFO PREFIX
"RHSA base: %#016Lx proximity domain: %#x\n",
408 (unsigned long long)rhsa
->base_address
,
409 rhsa
->proximity_domain
);
415 * dmar_table_detect - checks to see if the platform supports DMAR devices
417 static int __init
dmar_table_detect(void)
419 acpi_status status
= AE_OK
;
421 /* if we could find DMAR table, then there are DMAR devices */
422 status
= acpi_get_table_with_size(ACPI_SIG_DMAR
, 0,
423 (struct acpi_table_header
**)&dmar_tbl
,
426 if (ACPI_SUCCESS(status
) && !dmar_tbl
) {
427 printk (KERN_WARNING PREFIX
"Unable to map DMAR\n");
428 status
= AE_NOT_FOUND
;
431 return (ACPI_SUCCESS(status
) ? 1 : 0);
435 * parse_dmar_table - parses the DMA reporting table
438 parse_dmar_table(void)
440 struct acpi_table_dmar
*dmar
;
441 struct acpi_dmar_header
*entry_header
;
445 * Do it again, earlier dmar_tbl mapping could be mapped with
451 * ACPI tables may not be DMA protected by tboot, so use DMAR copy
452 * SINIT saved in SinitMleData in TXT heap (which is DMA protected)
454 dmar_tbl
= tboot_get_dmar_table(dmar_tbl
);
456 dmar
= (struct acpi_table_dmar
*)dmar_tbl
;
460 if (dmar
->width
< PAGE_SHIFT
- 1) {
461 printk(KERN_WARNING PREFIX
"Invalid DMAR haw\n");
465 printk (KERN_INFO PREFIX
"Host address width %d\n",
468 entry_header
= (struct acpi_dmar_header
*)(dmar
+ 1);
469 while (((unsigned long)entry_header
) <
470 (((unsigned long)dmar
) + dmar_tbl
->length
)) {
471 /* Avoid looping forever on bad ACPI tables */
472 if (entry_header
->length
== 0) {
473 printk(KERN_WARNING PREFIX
474 "Invalid 0-length structure\n");
479 dmar_table_print_dmar_entry(entry_header
);
481 switch (entry_header
->type
) {
482 case ACPI_DMAR_TYPE_HARDWARE_UNIT
:
483 ret
= dmar_parse_one_drhd(entry_header
);
485 case ACPI_DMAR_TYPE_RESERVED_MEMORY
:
487 ret
= dmar_parse_one_rmrr(entry_header
);
490 case ACPI_DMAR_TYPE_ATSR
:
492 ret
= dmar_parse_one_atsr(entry_header
);
495 case ACPI_DMAR_HARDWARE_AFFINITY
:
496 #ifdef CONFIG_ACPI_NUMA
497 ret
= dmar_parse_one_rhsa(entry_header
);
501 printk(KERN_WARNING PREFIX
502 "Unknown DMAR structure type %d\n",
504 ret
= 0; /* for forward compatibility */
510 entry_header
= ((void *)entry_header
+ entry_header
->length
);
515 static int dmar_pci_device_match(struct pci_dev
*devices
[], int cnt
,
521 for (index
= 0; index
< cnt
; index
++)
522 if (dev
== devices
[index
])
525 /* Check our parent */
526 dev
= dev
->bus
->self
;
532 struct dmar_drhd_unit
*
533 dmar_find_matched_drhd_unit(struct pci_dev
*dev
)
535 struct dmar_drhd_unit
*dmaru
= NULL
;
536 struct acpi_dmar_hardware_unit
*drhd
;
538 dev
= pci_physfn(dev
);
540 list_for_each_entry(dmaru
, &dmar_drhd_units
, list
) {
541 drhd
= container_of(dmaru
->hdr
,
542 struct acpi_dmar_hardware_unit
,
545 if (dmaru
->include_all
&&
546 drhd
->segment
== pci_domain_nr(dev
->bus
))
549 if (dmar_pci_device_match(dmaru
->devices
,
550 dmaru
->devices_cnt
, dev
))
557 int __init
dmar_dev_scope_init(void)
559 struct dmar_drhd_unit
*drhd
, *drhd_n
;
562 list_for_each_entry_safe(drhd
, drhd_n
, &dmar_drhd_units
, list
) {
563 ret
= dmar_parse_dev(drhd
);
570 struct dmar_rmrr_unit
*rmrr
, *rmrr_n
;
571 struct dmar_atsr_unit
*atsr
, *atsr_n
;
573 list_for_each_entry_safe(rmrr
, rmrr_n
, &dmar_rmrr_units
, list
) {
574 ret
= rmrr_parse_dev(rmrr
);
579 list_for_each_entry_safe(atsr
, atsr_n
, &dmar_atsr_units
, list
) {
580 ret
= atsr_parse_dev(atsr
);
591 int __init
dmar_table_init(void)
593 static int dmar_table_initialized
;
596 if (dmar_table_initialized
)
599 dmar_table_initialized
= 1;
601 ret
= parse_dmar_table();
604 printk(KERN_INFO PREFIX
"parse DMAR table failure.\n");
608 if (list_empty(&dmar_drhd_units
)) {
609 printk(KERN_INFO PREFIX
"No DMAR devices found\n");
614 if (list_empty(&dmar_rmrr_units
))
615 printk(KERN_INFO PREFIX
"No RMRR found\n");
617 if (list_empty(&dmar_atsr_units
))
618 printk(KERN_INFO PREFIX
"No ATSR found\n");
624 static void warn_invalid_dmar(u64 addr
, const char *message
)
627 1, TAINT_FIRMWARE_WORKAROUND
,
628 "Your BIOS is broken; DMAR reported at address %llx%s!\n"
629 "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
631 dmi_get_system_info(DMI_BIOS_VENDOR
),
632 dmi_get_system_info(DMI_BIOS_VERSION
),
633 dmi_get_system_info(DMI_PRODUCT_VERSION
));
636 int __init
check_zero_address(void)
638 struct acpi_table_dmar
*dmar
;
639 struct acpi_dmar_header
*entry_header
;
640 struct acpi_dmar_hardware_unit
*drhd
;
642 dmar
= (struct acpi_table_dmar
*)dmar_tbl
;
643 entry_header
= (struct acpi_dmar_header
*)(dmar
+ 1);
645 while (((unsigned long)entry_header
) <
646 (((unsigned long)dmar
) + dmar_tbl
->length
)) {
647 /* Avoid looping forever on bad ACPI tables */
648 if (entry_header
->length
== 0) {
649 printk(KERN_WARNING PREFIX
650 "Invalid 0-length structure\n");
654 if (entry_header
->type
== ACPI_DMAR_TYPE_HARDWARE_UNIT
) {
658 drhd
= (void *)entry_header
;
659 if (!drhd
->address
) {
660 warn_invalid_dmar(0, "");
664 addr
= early_ioremap(drhd
->address
, VTD_PAGE_SIZE
);
666 printk("IOMMU: can't validate: %llx\n", drhd
->address
);
669 cap
= dmar_readq(addr
+ DMAR_CAP_REG
);
670 ecap
= dmar_readq(addr
+ DMAR_ECAP_REG
);
671 early_iounmap(addr
, VTD_PAGE_SIZE
);
672 if (cap
== (uint64_t)-1 && ecap
== (uint64_t)-1) {
673 warn_invalid_dmar(drhd
->address
,
674 " returns all ones");
679 entry_header
= ((void *)entry_header
+ entry_header
->length
);
690 int __init
detect_intel_iommu(void)
694 ret
= dmar_table_detect();
696 ret
= check_zero_address();
698 #ifdef CONFIG_INTR_REMAP
699 struct acpi_table_dmar
*dmar
;
701 dmar
= (struct acpi_table_dmar
*) dmar_tbl
;
702 if (ret
&& cpu_has_x2apic
&& dmar
->flags
& 0x1)
704 "Queued invalidation will be enabled to support "
705 "x2apic and Intr-remapping.\n");
708 if (ret
&& !no_iommu
&& !iommu_detected
&& !dmar_disabled
) {
710 /* Make sure ACS will be enabled */
716 x86_init
.iommu
.iommu_init
= intel_iommu_init
;
719 early_acpi_os_unmap_memory(dmar_tbl
, dmar_tbl_size
);
722 return ret
? 1 : -ENODEV
;
726 int alloc_iommu(struct dmar_drhd_unit
*drhd
)
728 struct intel_iommu
*iommu
;
731 static int iommu_allocated
= 0;
735 if (!drhd
->reg_base_addr
) {
736 warn_invalid_dmar(0, "");
740 iommu
= kzalloc(sizeof(*iommu
), GFP_KERNEL
);
744 iommu
->seq_id
= iommu_allocated
++;
745 sprintf (iommu
->name
, "dmar%d", iommu
->seq_id
);
747 iommu
->reg
= ioremap(drhd
->reg_base_addr
, VTD_PAGE_SIZE
);
749 printk(KERN_ERR
"IOMMU: can't map the region\n");
752 iommu
->cap
= dmar_readq(iommu
->reg
+ DMAR_CAP_REG
);
753 iommu
->ecap
= dmar_readq(iommu
->reg
+ DMAR_ECAP_REG
);
755 if (iommu
->cap
== (uint64_t)-1 && iommu
->ecap
== (uint64_t)-1) {
756 warn_invalid_dmar(drhd
->reg_base_addr
, " returns all ones");
761 agaw
= iommu_calculate_agaw(iommu
);
764 "Cannot get a valid agaw for iommu (seq_id = %d)\n",
768 msagaw
= iommu_calculate_max_sagaw(iommu
);
771 "Cannot get a valid max agaw for iommu (seq_id = %d)\n",
777 iommu
->msagaw
= msagaw
;
781 /* the registers might be more than one page */
782 map_size
= max_t(int, ecap_max_iotlb_offset(iommu
->ecap
),
783 cap_max_fault_reg_offset(iommu
->cap
));
784 map_size
= VTD_PAGE_ALIGN(map_size
);
785 if (map_size
> VTD_PAGE_SIZE
) {
787 iommu
->reg
= ioremap(drhd
->reg_base_addr
, map_size
);
789 printk(KERN_ERR
"IOMMU: can't map the region\n");
794 ver
= readl(iommu
->reg
+ DMAR_VER_REG
);
795 pr_info("IOMMU %d: reg_base_addr %llx ver %d:%d cap %llx ecap %llx\n",
797 (unsigned long long)drhd
->reg_base_addr
,
798 DMAR_VER_MAJOR(ver
), DMAR_VER_MINOR(ver
),
799 (unsigned long long)iommu
->cap
,
800 (unsigned long long)iommu
->ecap
);
802 spin_lock_init(&iommu
->register_lock
);
814 void free_iommu(struct intel_iommu
*iommu
)
820 free_dmar_iommu(iommu
);
829 * Reclaim all the submitted descriptors which have completed its work.
831 static inline void reclaim_free_desc(struct q_inval
*qi
)
833 while (qi
->desc_status
[qi
->free_tail
] == QI_DONE
||
834 qi
->desc_status
[qi
->free_tail
] == QI_ABORT
) {
835 qi
->desc_status
[qi
->free_tail
] = QI_FREE
;
836 qi
->free_tail
= (qi
->free_tail
+ 1) % QI_LENGTH
;
841 static int qi_check_fault(struct intel_iommu
*iommu
, int index
)
845 struct q_inval
*qi
= iommu
->qi
;
846 int wait_index
= (index
+ 1) % QI_LENGTH
;
848 if (qi
->desc_status
[wait_index
] == QI_ABORT
)
851 fault
= readl(iommu
->reg
+ DMAR_FSTS_REG
);
854 * If IQE happens, the head points to the descriptor associated
855 * with the error. No new descriptors are fetched until the IQE
858 if (fault
& DMA_FSTS_IQE
) {
859 head
= readl(iommu
->reg
+ DMAR_IQH_REG
);
860 if ((head
>> DMAR_IQ_SHIFT
) == index
) {
861 printk(KERN_ERR
"VT-d detected invalid descriptor: "
862 "low=%llx, high=%llx\n",
863 (unsigned long long)qi
->desc
[index
].low
,
864 (unsigned long long)qi
->desc
[index
].high
);
865 memcpy(&qi
->desc
[index
], &qi
->desc
[wait_index
],
866 sizeof(struct qi_desc
));
867 __iommu_flush_cache(iommu
, &qi
->desc
[index
],
868 sizeof(struct qi_desc
));
869 writel(DMA_FSTS_IQE
, iommu
->reg
+ DMAR_FSTS_REG
);
875 * If ITE happens, all pending wait_desc commands are aborted.
876 * No new descriptors are fetched until the ITE is cleared.
878 if (fault
& DMA_FSTS_ITE
) {
879 head
= readl(iommu
->reg
+ DMAR_IQH_REG
);
880 head
= ((head
>> DMAR_IQ_SHIFT
) - 1 + QI_LENGTH
) % QI_LENGTH
;
882 tail
= readl(iommu
->reg
+ DMAR_IQT_REG
);
883 tail
= ((tail
>> DMAR_IQ_SHIFT
) - 1 + QI_LENGTH
) % QI_LENGTH
;
885 writel(DMA_FSTS_ITE
, iommu
->reg
+ DMAR_FSTS_REG
);
888 if (qi
->desc_status
[head
] == QI_IN_USE
)
889 qi
->desc_status
[head
] = QI_ABORT
;
890 head
= (head
- 2 + QI_LENGTH
) % QI_LENGTH
;
891 } while (head
!= tail
);
893 if (qi
->desc_status
[wait_index
] == QI_ABORT
)
897 if (fault
& DMA_FSTS_ICE
)
898 writel(DMA_FSTS_ICE
, iommu
->reg
+ DMAR_FSTS_REG
);
904 * Submit the queued invalidation descriptor to the remapping
905 * hardware unit and wait for its completion.
907 int qi_submit_sync(struct qi_desc
*desc
, struct intel_iommu
*iommu
)
910 struct q_inval
*qi
= iommu
->qi
;
911 struct qi_desc
*hw
, wait_desc
;
912 int wait_index
, index
;
923 spin_lock_irqsave(&qi
->q_lock
, flags
);
924 while (qi
->free_cnt
< 3) {
925 spin_unlock_irqrestore(&qi
->q_lock
, flags
);
927 spin_lock_irqsave(&qi
->q_lock
, flags
);
930 index
= qi
->free_head
;
931 wait_index
= (index
+ 1) % QI_LENGTH
;
933 qi
->desc_status
[index
] = qi
->desc_status
[wait_index
] = QI_IN_USE
;
937 wait_desc
.low
= QI_IWD_STATUS_DATA(QI_DONE
) |
938 QI_IWD_STATUS_WRITE
| QI_IWD_TYPE
;
939 wait_desc
.high
= virt_to_phys(&qi
->desc_status
[wait_index
]);
941 hw
[wait_index
] = wait_desc
;
943 __iommu_flush_cache(iommu
, &hw
[index
], sizeof(struct qi_desc
));
944 __iommu_flush_cache(iommu
, &hw
[wait_index
], sizeof(struct qi_desc
));
946 qi
->free_head
= (qi
->free_head
+ 2) % QI_LENGTH
;
950 * update the HW tail register indicating the presence of
953 writel(qi
->free_head
<< DMAR_IQ_SHIFT
, iommu
->reg
+ DMAR_IQT_REG
);
955 while (qi
->desc_status
[wait_index
] != QI_DONE
) {
957 * We will leave the interrupts disabled, to prevent interrupt
958 * context to queue another cmd while a cmd is already submitted
959 * and waiting for completion on this cpu. This is to avoid
960 * a deadlock where the interrupt context can wait indefinitely
961 * for free slots in the queue.
963 rc
= qi_check_fault(iommu
, index
);
967 spin_unlock(&qi
->q_lock
);
969 spin_lock(&qi
->q_lock
);
972 qi
->desc_status
[index
] = QI_DONE
;
974 reclaim_free_desc(qi
);
975 spin_unlock_irqrestore(&qi
->q_lock
, flags
);
984 * Flush the global interrupt entry cache.
986 void qi_global_iec(struct intel_iommu
*iommu
)
990 desc
.low
= QI_IEC_TYPE
;
993 /* should never fail */
994 qi_submit_sync(&desc
, iommu
);
997 void qi_flush_context(struct intel_iommu
*iommu
, u16 did
, u16 sid
, u8 fm
,
1000 struct qi_desc desc
;
1002 desc
.low
= QI_CC_FM(fm
) | QI_CC_SID(sid
) | QI_CC_DID(did
)
1003 | QI_CC_GRAN(type
) | QI_CC_TYPE
;
1006 qi_submit_sync(&desc
, iommu
);
1009 void qi_flush_iotlb(struct intel_iommu
*iommu
, u16 did
, u64 addr
,
1010 unsigned int size_order
, u64 type
)
1014 struct qi_desc desc
;
1017 if (cap_write_drain(iommu
->cap
))
1020 if (cap_read_drain(iommu
->cap
))
1023 desc
.low
= QI_IOTLB_DID(did
) | QI_IOTLB_DR(dr
) | QI_IOTLB_DW(dw
)
1024 | QI_IOTLB_GRAN(type
) | QI_IOTLB_TYPE
;
1025 desc
.high
= QI_IOTLB_ADDR(addr
) | QI_IOTLB_IH(ih
)
1026 | QI_IOTLB_AM(size_order
);
1028 qi_submit_sync(&desc
, iommu
);
1031 void qi_flush_dev_iotlb(struct intel_iommu
*iommu
, u16 sid
, u16 qdep
,
1032 u64 addr
, unsigned mask
)
1034 struct qi_desc desc
;
1037 BUG_ON(addr
& ((1 << (VTD_PAGE_SHIFT
+ mask
)) - 1));
1038 addr
|= (1 << (VTD_PAGE_SHIFT
+ mask
- 1)) - 1;
1039 desc
.high
= QI_DEV_IOTLB_ADDR(addr
) | QI_DEV_IOTLB_SIZE
;
1041 desc
.high
= QI_DEV_IOTLB_ADDR(addr
);
1043 if (qdep
>= QI_DEV_IOTLB_MAX_INVS
)
1046 desc
.low
= QI_DEV_IOTLB_SID(sid
) | QI_DEV_IOTLB_QDEP(qdep
) |
1049 qi_submit_sync(&desc
, iommu
);
1053 * Disable Queued Invalidation interface.
1055 void dmar_disable_qi(struct intel_iommu
*iommu
)
1057 unsigned long flags
;
1059 cycles_t start_time
= get_cycles();
1061 if (!ecap_qis(iommu
->ecap
))
1064 spin_lock_irqsave(&iommu
->register_lock
, flags
);
1066 sts
= dmar_readq(iommu
->reg
+ DMAR_GSTS_REG
);
1067 if (!(sts
& DMA_GSTS_QIES
))
1071 * Give a chance to HW to complete the pending invalidation requests.
1073 while ((readl(iommu
->reg
+ DMAR_IQT_REG
) !=
1074 readl(iommu
->reg
+ DMAR_IQH_REG
)) &&
1075 (DMAR_OPERATION_TIMEOUT
> (get_cycles() - start_time
)))
1078 iommu
->gcmd
&= ~DMA_GCMD_QIE
;
1079 writel(iommu
->gcmd
, iommu
->reg
+ DMAR_GCMD_REG
);
1081 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
, readl
,
1082 !(sts
& DMA_GSTS_QIES
), sts
);
1084 spin_unlock_irqrestore(&iommu
->register_lock
, flags
);
1088 * Enable queued invalidation.
1090 static void __dmar_enable_qi(struct intel_iommu
*iommu
)
1093 unsigned long flags
;
1094 struct q_inval
*qi
= iommu
->qi
;
1096 qi
->free_head
= qi
->free_tail
= 0;
1097 qi
->free_cnt
= QI_LENGTH
;
1099 spin_lock_irqsave(&iommu
->register_lock
, flags
);
1101 /* write zero to the tail reg */
1102 writel(0, iommu
->reg
+ DMAR_IQT_REG
);
1104 dmar_writeq(iommu
->reg
+ DMAR_IQA_REG
, virt_to_phys(qi
->desc
));
1106 iommu
->gcmd
|= DMA_GCMD_QIE
;
1107 writel(iommu
->gcmd
, iommu
->reg
+ DMAR_GCMD_REG
);
1109 /* Make sure hardware complete it */
1110 IOMMU_WAIT_OP(iommu
, DMAR_GSTS_REG
, readl
, (sts
& DMA_GSTS_QIES
), sts
);
1112 spin_unlock_irqrestore(&iommu
->register_lock
, flags
);
1116 * Enable Queued Invalidation interface. This is a must to support
1117 * interrupt-remapping. Also used by DMA-remapping, which replaces
1118 * register based IOTLB invalidation.
1120 int dmar_enable_qi(struct intel_iommu
*iommu
)
1123 struct page
*desc_page
;
1125 if (!ecap_qis(iommu
->ecap
))
1129 * queued invalidation is already setup and enabled.
1134 iommu
->qi
= kmalloc(sizeof(*qi
), GFP_ATOMIC
);
1141 desc_page
= alloc_pages_node(iommu
->node
, GFP_ATOMIC
| __GFP_ZERO
, 0);
1148 qi
->desc
= page_address(desc_page
);
1150 qi
->desc_status
= kmalloc(QI_LENGTH
* sizeof(int), GFP_ATOMIC
);
1151 if (!qi
->desc_status
) {
1152 free_page((unsigned long) qi
->desc
);
1158 qi
->free_head
= qi
->free_tail
= 0;
1159 qi
->free_cnt
= QI_LENGTH
;
1161 spin_lock_init(&qi
->q_lock
);
1163 __dmar_enable_qi(iommu
);
1168 /* iommu interrupt handling. Most stuff are MSI-like. */
1176 static const char *dma_remap_fault_reasons
[] =
1179 "Present bit in root entry is clear",
1180 "Present bit in context entry is clear",
1181 "Invalid context entry",
1182 "Access beyond MGAW",
1183 "PTE Write access is not set",
1184 "PTE Read access is not set",
1185 "Next page table ptr is invalid",
1186 "Root table address invalid",
1187 "Context table ptr is invalid",
1188 "non-zero reserved fields in RTP",
1189 "non-zero reserved fields in CTP",
1190 "non-zero reserved fields in PTE",
1193 static const char *intr_remap_fault_reasons
[] =
1195 "Detected reserved fields in the decoded interrupt-remapped request",
1196 "Interrupt index exceeded the interrupt-remapping table size",
1197 "Present field in the IRTE entry is clear",
1198 "Error accessing interrupt-remapping table pointed by IRTA_REG",
1199 "Detected reserved fields in the IRTE entry",
1200 "Blocked a compatibility format interrupt request",
1201 "Blocked an interrupt request due to source-id verification failure",
1204 #define MAX_FAULT_REASON_IDX (ARRAY_SIZE(fault_reason_strings) - 1)
1206 const char *dmar_get_fault_reason(u8 fault_reason
, int *fault_type
)
1208 if (fault_reason
>= 0x20 && (fault_reason
<= 0x20 +
1209 ARRAY_SIZE(intr_remap_fault_reasons
))) {
1210 *fault_type
= INTR_REMAP
;
1211 return intr_remap_fault_reasons
[fault_reason
- 0x20];
1212 } else if (fault_reason
< ARRAY_SIZE(dma_remap_fault_reasons
)) {
1213 *fault_type
= DMA_REMAP
;
1214 return dma_remap_fault_reasons
[fault_reason
];
1216 *fault_type
= UNKNOWN
;
1221 void dmar_msi_unmask(struct irq_data
*data
)
1223 struct intel_iommu
*iommu
= irq_data_get_irq_handler_data(data
);
1227 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1228 writel(0, iommu
->reg
+ DMAR_FECTL_REG
);
1229 /* Read a reg to force flush the post write */
1230 readl(iommu
->reg
+ DMAR_FECTL_REG
);
1231 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1234 void dmar_msi_mask(struct irq_data
*data
)
1237 struct intel_iommu
*iommu
= irq_data_get_irq_handler_data(data
);
1240 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1241 writel(DMA_FECTL_IM
, iommu
->reg
+ DMAR_FECTL_REG
);
1242 /* Read a reg to force flush the post write */
1243 readl(iommu
->reg
+ DMAR_FECTL_REG
);
1244 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1247 void dmar_msi_write(int irq
, struct msi_msg
*msg
)
1249 struct intel_iommu
*iommu
= irq_get_handler_data(irq
);
1252 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1253 writel(msg
->data
, iommu
->reg
+ DMAR_FEDATA_REG
);
1254 writel(msg
->address_lo
, iommu
->reg
+ DMAR_FEADDR_REG
);
1255 writel(msg
->address_hi
, iommu
->reg
+ DMAR_FEUADDR_REG
);
1256 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1259 void dmar_msi_read(int irq
, struct msi_msg
*msg
)
1261 struct intel_iommu
*iommu
= irq_get_handler_data(irq
);
1264 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1265 msg
->data
= readl(iommu
->reg
+ DMAR_FEDATA_REG
);
1266 msg
->address_lo
= readl(iommu
->reg
+ DMAR_FEADDR_REG
);
1267 msg
->address_hi
= readl(iommu
->reg
+ DMAR_FEUADDR_REG
);
1268 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1271 static int dmar_fault_do_one(struct intel_iommu
*iommu
, int type
,
1272 u8 fault_reason
, u16 source_id
, unsigned long long addr
)
1277 reason
= dmar_get_fault_reason(fault_reason
, &fault_type
);
1279 if (fault_type
== INTR_REMAP
)
1280 printk(KERN_ERR
"INTR-REMAP: Request device [[%02x:%02x.%d] "
1281 "fault index %llx\n"
1282 "INTR-REMAP:[fault reason %02d] %s\n",
1283 (source_id
>> 8), PCI_SLOT(source_id
& 0xFF),
1284 PCI_FUNC(source_id
& 0xFF), addr
>> 48,
1285 fault_reason
, reason
);
1288 "DMAR:[%s] Request device [%02x:%02x.%d] "
1289 "fault addr %llx \n"
1290 "DMAR:[fault reason %02d] %s\n",
1291 (type
? "DMA Read" : "DMA Write"),
1292 (source_id
>> 8), PCI_SLOT(source_id
& 0xFF),
1293 PCI_FUNC(source_id
& 0xFF), addr
, fault_reason
, reason
);
1297 #define PRIMARY_FAULT_REG_LEN (16)
1298 irqreturn_t
dmar_fault(int irq
, void *dev_id
)
1300 struct intel_iommu
*iommu
= dev_id
;
1301 int reg
, fault_index
;
1305 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1306 fault_status
= readl(iommu
->reg
+ DMAR_FSTS_REG
);
1308 printk(KERN_ERR
"DRHD: handling fault status reg %x\n",
1311 /* TBD: ignore advanced fault log currently */
1312 if (!(fault_status
& DMA_FSTS_PPF
))
1315 fault_index
= dma_fsts_fault_record_index(fault_status
);
1316 reg
= cap_fault_reg_offset(iommu
->cap
);
1324 /* highest 32 bits */
1325 data
= readl(iommu
->reg
+ reg
+
1326 fault_index
* PRIMARY_FAULT_REG_LEN
+ 12);
1327 if (!(data
& DMA_FRCD_F
))
1330 fault_reason
= dma_frcd_fault_reason(data
);
1331 type
= dma_frcd_type(data
);
1333 data
= readl(iommu
->reg
+ reg
+
1334 fault_index
* PRIMARY_FAULT_REG_LEN
+ 8);
1335 source_id
= dma_frcd_source_id(data
);
1337 guest_addr
= dmar_readq(iommu
->reg
+ reg
+
1338 fault_index
* PRIMARY_FAULT_REG_LEN
);
1339 guest_addr
= dma_frcd_page_addr(guest_addr
);
1340 /* clear the fault */
1341 writel(DMA_FRCD_F
, iommu
->reg
+ reg
+
1342 fault_index
* PRIMARY_FAULT_REG_LEN
+ 12);
1344 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1346 dmar_fault_do_one(iommu
, type
, fault_reason
,
1347 source_id
, guest_addr
);
1350 if (fault_index
>= cap_num_fault_regs(iommu
->cap
))
1352 spin_lock_irqsave(&iommu
->register_lock
, flag
);
1355 /* clear all the other faults */
1356 fault_status
= readl(iommu
->reg
+ DMAR_FSTS_REG
);
1357 writel(fault_status
, iommu
->reg
+ DMAR_FSTS_REG
);
1359 spin_unlock_irqrestore(&iommu
->register_lock
, flag
);
1363 int dmar_set_interrupt(struct intel_iommu
*iommu
)
1368 * Check if the fault interrupt is already initialized.
1375 printk(KERN_ERR
"IOMMU: no free vectors\n");
1379 irq_set_handler_data(irq
, iommu
);
1382 ret
= arch_setup_dmar_msi(irq
);
1384 irq_set_handler_data(irq
, NULL
);
1390 ret
= request_irq(irq
, dmar_fault
, 0, iommu
->name
, iommu
);
1392 printk(KERN_ERR
"IOMMU: can't request irq\n");
1396 int __init
enable_drhd_fault_handling(void)
1398 struct dmar_drhd_unit
*drhd
;
1401 * Enable fault control interrupt.
1403 for_each_drhd_unit(drhd
) {
1405 struct intel_iommu
*iommu
= drhd
->iommu
;
1406 ret
= dmar_set_interrupt(iommu
);
1409 printk(KERN_ERR
"DRHD %Lx: failed to enable fault, "
1410 " interrupt, ret %d\n",
1411 (unsigned long long)drhd
->reg_base_addr
, ret
);
1416 * Clear any previous faults.
1418 dmar_fault(iommu
->irq
, iommu
);
1425 * Re-enable Queued Invalidation interface.
1427 int dmar_reenable_qi(struct intel_iommu
*iommu
)
1429 if (!ecap_qis(iommu
->ecap
))
1436 * First disable queued invalidation.
1438 dmar_disable_qi(iommu
);
1440 * Then enable queued invalidation again. Since there is no pending
1441 * invalidation requests now, it's safe to re-enable queued
1444 __dmar_enable_qi(iommu
);
1450 * Check interrupt remapping support in DMAR table description.
1452 int __init
dmar_ir_support(void)
1454 struct acpi_table_dmar
*dmar
;
1455 dmar
= (struct acpi_table_dmar
*)dmar_tbl
;
1458 return dmar
->flags
& 0x1;
1460 IOMMU_INIT_POST(detect_intel_iommu
);