xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] VTD/Intremap: Disable Intremap on Chipset 5500/5520/X58 due to errata
@ 2013-01-15 23:27 Malcolm Crossley
  2013-01-16  8:00 ` Zhang, Xiantao
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Malcolm Crossley @ 2013-01-15 23:27 UTC (permalink / raw)
  To: xen-devel; +Cc: andrew.cooper3, xiantao.zhang

http://www.intel.com/content/www/us/en/chipsets/5520-and-5500-chipset-ioh-specification-update.html

Stepping B-3 has two errata (#47 and #53) related to Interrupt
remapping, to which the workaround is for the BIOS to completely disable
interrupt remapping.  These errata are fixed in stepping C-2.

Unfortunately this chipset is very common and many BIOSes are not
disabling remapping.  We can detect this in Xen and prevent turning on
remapping in the first place.  However, this will turn VT-d off on many
systems by default.

Users who still wish to use VT-d can use iommu=force if they are happy
exposing the associated security risk.

Signed-off-by: Malcolm Crossley <malcolm.crossley@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

diff -r 35a0556a7f76 -r ee475f0e6aeb xen/drivers/passthrough/vtd/quirks.c
--- a/xen/drivers/passthrough/vtd/quirks.c
+++ b/xen/drivers/passthrough/vtd/quirks.c
@@ -244,6 +244,29 @@ void vtd_ops_postamble_quirk(struct iomm
     }
 }
 
+/* 5500/5520/X58 Chipset Interrupt remapping errata, for stepping B-3.
+ * Fixed in stepping C-2. */
+void __init tylersburg_intremap_quirk(void)
+{
+    uint32_t bus, device;
+    uint8_t rev;
+
+    for ( bus = 0; bus < 0x100; bus++ )
+    {
+        /* Match on System Management Registers on Device 20 Function 0 */
+        device = pci_conf_read32(0, bus, 20, 0, PCI_VENDOR_ID);
+        rev = pci_conf_read8(0, bus, 20, 0, PCI_REVISION_ID);
+
+        if ( rev == 0x13 && device == 0x342e8086 )
+        {
+            dprintk(XENLOG_INFO VTDPREFIX,
+                    "Disabling Interrupt Remapping due to Intel 5500/5520/X58 Chipset errata #47, #53\n");
+            iommu_intremap = 0;
+            break;
+        }
+    }
+}
+
 /* initialize platform identification flags */
 void __init platform_quirks_init(void)
 {
@@ -264,6 +287,9 @@ void __init platform_quirks_init(void)
 
     /* ioremap IGD MMIO+0x2000 page */
     map_igd_reg();
+
+    /* Tylersburg interrupt remap quirk */
+    tylersburg_intremap_quirk();
 }
 
 /*

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2013-01-17 10:41 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-15 23:27 [PATCH] VTD/Intremap: Disable Intremap on Chipset 5500/5520/X58 due to errata Malcolm Crossley
2013-01-16  8:00 ` Zhang, Xiantao
2013-01-16 13:57 ` Jan Beulich
2013-01-16 21:09   ` Malcolm Crossley
2013-01-17  8:49     ` Jan Beulich
2013-01-17  9:01       ` Ian Campbell
2013-01-17  9:09         ` Jan Beulich
2013-01-17  9:15           ` Ian Campbell
2013-01-17  9:33             ` Jan Beulich
2013-01-17  9:51               ` Ian Campbell
2013-01-17 10:01                 ` Jan Beulich
2013-01-17 10:02       ` Malcolm Crossley
2013-01-17 10:41         ` Jan Beulich
2013-01-16 14:14 ` Jan Beulich
2013-01-16 14:33   ` Malcolm Crossley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).