|
@@ -3419,22 +3419,29 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE,
|
|
|
|
|
|
static void quirk_chelsio_extend_vpd(struct pci_dev *dev)
|
|
|
{
|
|
|
- pci_set_vpd_size(dev, 8192);
|
|
|
-}
|
|
|
-
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x20, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x21, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x22, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x23, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x24, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x25, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x26, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x30, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x31, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x32, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x35, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x36, quirk_chelsio_extend_vpd);
|
|
|
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x37, quirk_chelsio_extend_vpd);
|
|
|
+ int chip = (dev->device & 0xf000) >> 12;
|
|
|
+ int func = (dev->device & 0x0f00) >> 8;
|
|
|
+ int prod = (dev->device & 0x00ff) >> 0;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If this is a T3-based adapter, there's a 1KB VPD area at offset
|
|
|
+ * 0xc00 which contains the preferred VPD values. If this is a T4 or
|
|
|
+ * later based adapter, the special VPD is at offset 0x400 for the
|
|
|
+ * Physical Functions (the SR-IOV Virtual Functions have no VPD
|
|
|
+ * Capabilities). The PCI VPD Access core routines will normally
|
|
|
+ * compute the size of the VPD by parsing the VPD Data Structure at
|
|
|
+ * offset 0x000. This will result in silent failures when attempting
|
|
|
+ * to accesses these other VPD areas which are beyond those computed
|
|
|
+ * limits.
|
|
|
+ */
|
|
|
+ if (chip == 0x0 && prod >= 0x20)
|
|
|
+ pci_set_vpd_size(dev, 8192);
|
|
|
+ else if (chip >= 0x4 && func < 0x8)
|
|
|
+ pci_set_vpd_size(dev, 2048);
|
|
|
+}
|
|
|
+
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
|
|
|
+ quirk_chelsio_extend_vpd);
|
|
|
|
|
|
#ifdef CONFIG_ACPI
|
|
|
/*
|