RDMA/qedr: Use pci_enable_atomic_ops_to_root()
authorFelix Kuehling <Felix.Kuehling@amd.com>
Fri, 5 Jan 2018 00:45:00 +0000 (19:45 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 24 Jan 2018 21:28:11 +0000 (15:28 -0600)
Use PCI core interface pci_enable_atomic_ops_to_root() to enable atomic
capability.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Michal Kalderon <michal.kalderon@cavium.com>
CC: Ram Amrani <Ram.Amrani@cavium.com>
CC: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/qedr/main.c

index 50812b33291b827306613d58301c0df8c856e238..b3786474e84afee3a9c245b283953adbeeb38f61 100644 (file)
@@ -430,59 +430,16 @@ static void qedr_remove_sysfiles(struct qedr_dev *dev)
 
 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;
+       int rc = pci_enable_atomic_ops_to_root(pdev,
+                                              PCI_EXP_DEVCAP2_ATOMIC_COMP64);
 
-               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;
+       if (rc) {
+               dev->atomic_cap = IB_ATOMIC_NONE;
+               DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability disabled\n");
+       } else {
+               dev->atomic_cap = IB_ATOMIC_GLOB;
+               DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability enabled\n");
        }
-
-       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");
-
 }
 
 static const struct qed_rdma_ops *qed_ops;