Commit 20c3ff61 authored by Felix Kuehling's avatar Felix Kuehling Committed by Bjorn Helgaas

RDMA/qedr: Use pci_enable_atomic_ops_to_root()

Use PCI core interface pci_enable_atomic_ops_to_root() to enable atomic
capability.
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Acked-by: default avatarMichal Kalderon <michal.kalderon@cavium.com>
CC: Ram Amrani <Ram.Amrani@cavium.com>
CC: Doug Ledford <dledford@redhat.com>
parent 430a2368
...@@ -430,59 +430,16 @@ static void qedr_remove_sysfiles(struct qedr_dev *dev) ...@@ -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) static void qedr_pci_set_atomic(struct qedr_dev *dev, struct pci_dev *pdev)
{ {
struct pci_dev *bridge; int rc = pci_enable_atomic_ops_to_root(pdev,
u32 ctl2, cap2; PCI_EXP_DEVCAP2_ATOMIC_COMP64);
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) {
if (rc) dev->atomic_cap = IB_ATOMIC_NONE;
goto disable; DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability disabled\n");
} else {
if (!(cap2 & PCI_EXP_DEVCAP2_ATOMIC_ROUTE) || dev->atomic_cap = IB_ATOMIC_GLOB;
(ctl2 & PCI_EXP_DEVCTL2_ATOMIC_EGRESS_BLOCK)) DP_DEBUG(dev, QEDR_MSG_INIT, "Atomic capability enabled\n");
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");
} }
static const struct qed_rdma_ops *qed_ops; static const struct qed_rdma_ops *qed_ops;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment