From 126fba94c01304f18148703575cad3e53594e04b Mon Sep 17 00:00:00 2001 From: Arjun Vynipadath Date: Wed, 11 Jul 2018 11:56:08 +0530 Subject: [PATCH] cxgb4: Use pci_set_vpd_size() for kernels < 4.16 - Fixes adapter initialization issues when using OFED-4.17 on lower kernels(< 4.16). --- ...se-pci_set_vpd_size-for-kernels-4.16.patch | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 patches/0013-cxgb4-Use-pci_set_vpd_size-for-kernels-4.16.patch diff --git a/patches/0013-cxgb4-Use-pci_set_vpd_size-for-kernels-4.16.patch b/patches/0013-cxgb4-Use-pci_set_vpd_size-for-kernels-4.16.patch new file mode 100644 index 0000000..aadbe01 --- /dev/null +++ b/patches/0013-cxgb4-Use-pci_set_vpd_size-for-kernels-4.16.patch @@ -0,0 +1,50 @@ +From 63664de9287a2f3e709d60e6e6b7973da78ae70a Mon Sep 17 00:00:00 2001 +From: Arjun Vynipadath +Date: Tue, 26 Jun 2018 12:11:30 +0530 +Subject: [PATCH] cxgb4: Use pci_set_vpd_size() for kernels < 4.16 + +Kernels > 4.16 removed pci_set_vpd_size() from cxgb4 driver and +moved VPD size setting to PCI(pci/quirks.c). +However, for OFED-4.17, when used with distros that doesn't +have this PCI fix, adapter initialization fails due to +incorrect VPD size. Fix that by adding pci_set_vpd_size() +back for kernels < 4.16. +--- + drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +index 7cb3ef4..981f035 100644 +--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c ++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +@@ -2692,6 +2692,9 @@ void t4_get_regs(struct adapter *adap, void *buf, size_t buf_size) + } + + #define EEPROM_STAT_ADDR 0x7bfc ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0) ++#define VPD_SIZE 0x800 ++#endif + #define VPD_BASE 0x400 + #define VPD_BASE_OLD 0 + #define VPD_LEN 1024 +@@ -2758,6 +2761,17 @@ int t4_get_raw_vpd_params(struct adapter *adapter, struct vpd_params *p) + if (!vpd) + return -ENOMEM; + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0) ++ /* We have two VPD data structures stored in the adapter VPD area. ++ * By default, Linux calculates the size of the VPD area by traversing ++ * the first VPD area at offset 0x0, so we need to tell the OS what ++ * our real VPD size is. ++ */ ++ ret = pci_set_vpd_size(adapter->pdev, VPD_SIZE); ++ if (ret < 0) ++ goto out; ++#endif ++ + /* Card information normally starts at VPD_BASE but early cards had + * it at 0. + */ +-- +1.8.3.1 + -- 2.41.0