> From: Felix Kuehling [mailto:Felix.Kuehling@xxxxxxx] > Sent: Friday, January 05, 2018 2:45 AM > > Use common helper function pci_enable_atomic_ops_to_root to enable > atomic capability. > > CC: Bjorn Helgaas <helgaas@xxxxxxxxxx> > CC: Ram Amrani <Ram.Amrani@xxxxxxxxxx> > CC: Doug Ledford <dledford@xxxxxxxxxx> > Signed-off-by: Felix Kuehling <Felix.Kuehling@xxxxxxx> > --- > drivers/infiniband/hw/qedr/main.c | 59 > ++++++--------------------------------- > 1 file changed, 8 insertions(+), 51 deletions(-) > > diff --git a/drivers/infiniband/hw/qedr/main.c > b/drivers/infiniband/hw/qedr/main.c > index 50812b3..b378647 100644 > --- a/drivers/infiniband/hw/qedr/main.c > +++ b/drivers/infiniband/hw/qedr/main.c > @@ -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; > -- > 2.7.4 Thanks, Acked-by: Michal Kalderon <michal.kalderon@xxxxxxxxxx>