From 140eba50894062f0b50d83c5738771c37bf7c6ba Mon Sep 17 00:00:00 2001 From: Michal Kalderon Date: Sun, 8 Jul 2018 20:08:37 +0300 Subject: [PATCH] Added RHEL7.5 support for qedr Signed-off-by: Michal Kalderon --- patches/0007-BACKPORT-qedr.patch | 77 ++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 patches/0007-BACKPORT-qedr.patch diff --git a/patches/0007-BACKPORT-qedr.patch b/patches/0007-BACKPORT-qedr.patch new file mode 100644 index 0000000..acfaf9d --- /dev/null +++ b/patches/0007-BACKPORT-qedr.patch @@ -0,0 +1,77 @@ +diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c +index f4cb60b..e0e8230 100644 +--- a/drivers/infiniband/hw/qedr/main.c ++++ b/drivers/infiniband/hw/qedr/main.c +@@ -425,6 +425,7 @@ static void qedr_remove_sysfiles(struct qedr_dev *dev) + device_remove_file(&dev->ibdev.dev, qedr_attributes[i]); + } + ++#ifdef HAVE_PCI_ENABLE_ATOMIC + static void qedr_pci_set_atomic(struct qedr_dev *dev, struct pci_dev *pdev) + { + int rc = pci_enable_atomic_ops_to_root(pdev, +@@ -438,6 +439,64 @@ static void qedr_pci_set_atomic(struct qedr_dev *dev, struct pci_dev *pdev) + DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability enabled\n"); + } + } ++#else ++static void qedr_pci_set_atomic(struct qedr_dev *dev, struct pci_dev *pdev) ++{ ++ struct pci_dev *bridge; ++ u32 ctl2, cap2; ++ u16 flags; ++ int rc; ++ ++ bridge = pdev->bus->self; ++ if (!bridge) ++ goto disable; ++ ++ /* Check atomic routing support all the way to root complex */ ++ while (bridge->bus->parent) { ++ rc = pcie_capability_read_word(bridge, PCI_EXP_FLAGS, &flags); ++ if (rc || ((flags & PCI_EXP_FLAGS_VERS) < 2)) ++ goto disable; ++ ++ rc = pcie_capability_read_dword(bridge, PCI_EXP_DEVCAP2, &cap2); ++ if (rc) ++ goto disable; ++ ++ rc = pcie_capability_read_dword(bridge, PCI_EXP_DEVCTL2, &ctl2); ++ if (rc) ++ goto disable; ++ ++ if (!(cap2 & PCI_EXP_DEVCAP2_ATOMIC_ROUTE) || ++ (ctl2 & PCI_EXP_DEVCTL2_ATOMIC_EGRESS_BLOCK)) ++ goto disable; ++ bridge = bridge->bus->parent->self; ++ } ++ ++ rc = pcie_capability_read_word(bridge, PCI_EXP_FLAGS, &flags); ++ if (rc || ((flags & PCI_EXP_FLAGS_VERS) < 2)) ++ goto disable; ++ ++ rc = pcie_capability_read_dword(bridge, PCI_EXP_DEVCAP2, &cap2); ++ if (rc || !(cap2 & PCI_EXP_DEVCAP2_ATOMIC_COMP64)) ++ goto disable; ++ ++ /* Set atomic operations */ ++ pcie_capability_set_word(pdev, PCI_EXP_DEVCTL2, ++ PCI_EXP_DEVCTL2_ATOMIC_REQ); ++ dev->atomic_cap = IB_ATOMIC_GLOB; ++ ++ DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability enabled\n"); ++ ++ return; ++ ++disable: ++ pcie_capability_clear_word(pdev, PCI_EXP_DEVCTL2, ++ PCI_EXP_DEVCTL2_ATOMIC_REQ); ++ dev->atomic_cap = IB_ATOMIC_NONE; ++ ++ DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability disabled\n"); ++ ++} ++#endif + + static const struct qed_rdma_ops *qed_ops; + -- 2.41.0