Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40a914fa authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller
Browse files

igb: Add support for pci-e Advanced Error Reporting



Add the calls necessary to enable advanced error reporting for igb on
systems with AER enabled.

Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f4113030
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/if_ether.h>
#include <linux/aer.h>
#ifdef CONFIG_IGB_DCA
#include <linux/dca.h>
#endif
@@ -1049,6 +1050,8 @@ static int __devinit igb_probe(struct pci_dev *pdev,
	if (err)
		goto err_pci_reg;

	pci_enable_pcie_error_reporting(pdev);

	pci_set_master(pdev);
	pci_save_state(pdev);

@@ -1379,6 +1382,8 @@ static void __devexit igb_remove(struct pci_dev *pdev)

	free_netdev(netdev);

	pci_disable_pcie_error_reporting(pdev);

	pci_disable_device(pdev);
}

@@ -4470,17 +4475,19 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)
	struct net_device *netdev = pci_get_drvdata(pdev);
	struct igb_adapter *adapter = netdev_priv(netdev);
	struct e1000_hw *hw = &adapter->hw;
	pci_ers_result_t result;
	int err;

	if (adapter->need_ioport)
		err = pci_enable_device(pdev);
	else
		err = pci_enable_device_mem(pdev);

	if (err) {
		dev_err(&pdev->dev,
			"Cannot re-enable PCI device after reset.\n");
		return PCI_ERS_RESULT_DISCONNECT;
	}
		result = PCI_ERS_RESULT_DISCONNECT;
	} else {
		pci_set_master(pdev);
		pci_restore_state(pdev);

@@ -4489,8 +4496,12 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)

		igb_reset(adapter);
		wr32(E1000_WUS, ~0);
		result = PCI_ERS_RESULT_RECOVERED;
	}

	return PCI_ERS_RESULT_RECOVERED;
	pci_cleanup_aer_uncorrect_error_status(pdev);

	return result;
}

/**
@@ -4518,7 +4529,6 @@ static void igb_io_resume(struct pci_dev *pdev)
	/* let the f/w know that the h/w is now under the control of the
	 * driver. */
	igb_get_hw_control(adapter);

}

/* igb_main.c */