|
|
@@ -2134,6 +2134,35 @@ static void quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)
|
|
|
}
|
|
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching);
|
|
|
|
|
|
+/*
|
|
|
+ * If a device follows the VPD format spec, the PCI core will not read or
|
|
|
+ * write past the VPD End Tag. But some vendors do not follow the VPD
|
|
|
+ * format spec, so we can't tell how much data is safe to access. Devices
|
|
|
+ * may behave unpredictably if we access too much. Blacklist these devices
|
|
|
+ * so we don't touch VPD at all.
|
|
|
+ */
|
|
|
+static void quirk_blacklist_vpd(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ if (dev->vpd) {
|
|
|
+ dev->vpd->len = 0;
|
|
|
+ dev_warn(&dev->dev, FW_BUG "VPD access disabled\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0060, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x007c, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0413, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0078, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0079, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0073, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x0071, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005b, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x002f, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005d, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005f, quirk_blacklist_vpd);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, PCI_ANY_ID,
|
|
|
+ quirk_blacklist_vpd);
|
|
|
+
|
|
|
/*
|
|
|
* For Broadcom 5706, 5708, 5709 rev. A nics, any read beyond the
|
|
|
* VPD end tag will hang the device. This problem was initially
|