[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen stable-4.2] VT-d: deal with 5500/5520/X58 errata



commit 144d1b5c4647d829080e32d7887c33795bf4c326
Author:     Malcolm Crossley <malcolm.crossley@xxxxxxxxxx>
AuthorDate: Tue Apr 2 10:51:40 2013 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Apr 2 10:51:40 2013 +0200

    VT-d: deal with 5500/5520/X58 errata
    
    
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 stepping is very common and many BIOSes are
    not disabling interrupt remapping on this stepping .  We can detect this in
    Xen and prevent Xen from using the problematic interrupt remapping feature.
    
    The Intel 5500/5520/X58 chipset does not support VT-d
    Extended Interrupt Mode(EIM). This means the iommu_supports_eim() check
    always fails and so x2apic mode cannot be enabled in Xen before this quirk
    disables the interrupt remapping feature.
    
    Signed-off-by: Malcolm Crossley <malcolm.crossley@xxxxxxxxxx>
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    
    Gate the function call to check the quirk on interrupt remapping being
    requested to get enabled, and upon failure disable the IOMMU to be in
    line with what the changes for XSA-36 (plus follow-ups) did.
    
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: "Zhang, Xiantao" <xiantao.zhang@xxxxxxxxx>
    master changeset: 6890cebc6a987d0e896f5d23a8de11a3934101cf
    master date: 2013-03-25 14:31:27 +0100
---
 xen/drivers/passthrough/vtd/iommu.c  |    5 +++++
 xen/drivers/passthrough/vtd/quirks.c |   27 +++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/xen/drivers/passthrough/vtd/iommu.c 
b/xen/drivers/passthrough/vtd/iommu.c
index f38a62c..071a91b 100644
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -2143,6 +2143,11 @@ int __init intel_vtd_setup(void)
     }
 
     platform_quirks_init();
+    if ( !iommu_enabled )
+    {
+        ret = -ENODEV;
+        goto error;
+    }
 
     /* We enable the following features only if they are supported by all VT-d
      * engines: Snoop Control, DMA passthrough, Queued Invalidation and
diff --git a/xen/drivers/passthrough/vtd/quirks.c 
b/xen/drivers/passthrough/vtd/quirks.c
index 6b92164..ee87d10 100644
--- a/xen/drivers/passthrough/vtd/quirks.c
+++ b/xen/drivers/passthrough/vtd/quirks.c
@@ -248,6 +248,29 @@ void vtd_ops_postamble_quirk(struct iommu* iommu)
     }
 }
 
+/* 5500/5520/X58 Chipset Interrupt remapping errata, for stepping B-3.
+ * Fixed in stepping C-2. */
+static 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 )
+        {
+            printk(XENLOG_WARNING VTDPREFIX
+                   "Disabling IOMMU due to Intel 5500/5520/X58 Chipset errata 
#47, #53\n");
+            iommu_enabled = 0;
+            break;
+        }
+    }
+}
+
 /* initialize platform identification flags */
 void __init platform_quirks_init(void)
 {
@@ -268,6 +291,10 @@ void __init platform_quirks_init(void)
 
     /* ioremap IGD MMIO+0x2000 page */
     map_igd_reg();
+
+    /* Tylersburg interrupt remap quirk */
+    if ( iommu_intremap )
+        tylersburg_intremap_quirk();
 }
 
 /*
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.2

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.