smp_mb__after_atomic();
 }
 
-static int nitrox_reset_device(struct pci_dev *pdev)
+static int nitrox_device_flr(struct pci_dev *pdev)
 {
        int pos = 0;
 
                return -ENOMEM;
        }
 
-       pos = pci_pcie_cap(pdev);
-       if (!pos)
-               return -ENOTTY;
+       /* check flr support */
+       if (pcie_has_flr(pdev))
+               pcie_flr(pdev);
 
-       if (!pci_wait_for_pending_transaction(pdev))
-               dev_err(&pdev->dev, "waiting for pending transaction\n");
-
-       pcie_capability_set_word(pdev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
-       msleep(100);
        pci_restore_state(pdev);
 
        return 0;
                return err;
 
        /* do FLR */
-       err = nitrox_reset_device(pdev);
+       err = nitrox_device_flr(pdev);
        if (err) {
                dev_err(&pdev->dev, "FLR failed\n");
                pci_disable_device(pdev);