]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/pci/quirks.c
PCI: modify SB700 SATA MSI quirk
[linux-2.6-omap-h63xx.git] / drivers / pci / quirks.c
index f925e47bdad59231f109566b496c961d437ef63b..0a953d43b9a207961a6d41dbb1872d105f978982 100644 (file)
@@ -1779,6 +1779,23 @@ static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev)
 {
        dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
 }
+static void __devinit quirk_msi_intx_disable_ati_bug(struct pci_dev *dev)
+{
+       struct pci_dev *p;
+
+       /* SB700 MSI issue will be fixed at HW level from revision A21,
+        * we need check PCI REVISION ID of SMBus controller to get SB700
+        * revision.
+        */
+       p = pci_get_device(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
+                          NULL);
+       if (!p)
+               return;
+
+       if ((p->revision < 0x3B) && (p->revision >= 0x30))
+               dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
+       pci_dev_put(p);
+}
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        PCI_DEVICE_ID_TIGON3_5780,
                        quirk_msi_intx_disable_bug);
@@ -1799,17 +1816,15 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
                        quirk_msi_intx_disable_bug);
 
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4390,
-                       quirk_msi_intx_disable_bug);
+                       quirk_msi_intx_disable_ati_bug);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4391,
-                       quirk_msi_intx_disable_bug);
+                       quirk_msi_intx_disable_ati_bug);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4392,
-                       quirk_msi_intx_disable_bug);
+                       quirk_msi_intx_disable_ati_bug);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4393,
-                       quirk_msi_intx_disable_bug);
+                       quirk_msi_intx_disable_ati_bug);
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4394,
-                       quirk_msi_intx_disable_bug);
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4395,
-                       quirk_msi_intx_disable_bug);
+                       quirk_msi_intx_disable_ati_bug);
 
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4373,
                        quirk_msi_intx_disable_bug);