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

Commit f0dce411 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Greg Kroah-Hartman
Browse files

PCI aer: add pci_cleanup_aer_correct_aer_status



Function to clear bogus correctable errors. Analog to pci_aer_uncorrect_are_status.
The Marvell chips seem to start out with a bogus value that needs to be
cleared.

Yanmin ported it to 2.6.22-rc4 by fixing a fuzz patch applying info.

Signed-off-by: default avatarStephen Hemminger <shemminger@linux-foundation.org>
Acked-by: default avatarZhang Yanmin <yanmin.zhang@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 65b3bc35
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -117,6 +117,21 @@ int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
	return 0;
}

int pci_cleanup_aer_correct_error_status(struct pci_dev *dev)
{
	int pos;
	u32 status;

	pos = pci_find_aer_capability(dev);
	if (!pos)
		return -EIO;

	pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS, &status);
	pci_write_config_dword(dev, pos + PCI_ERR_COR_STATUS, status);

	return 0;
}

static int find_device_iter(struct device *device, void *data)
{
	struct pci_dev *dev;
@@ -741,4 +756,5 @@ EXPORT_SYMBOL_GPL(pci_find_aer_capability);
EXPORT_SYMBOL_GPL(pci_enable_pcie_error_reporting);
EXPORT_SYMBOL_GPL(pci_disable_pcie_error_reporting);
EXPORT_SYMBOL_GPL(pci_cleanup_aer_uncorrect_error_status);
EXPORT_SYMBOL_GPL(pci_cleanup_aer_correct_error_status);
+2 −0
Original line number Diff line number Diff line
@@ -13,11 +13,13 @@ extern int pci_enable_pcie_error_reporting(struct pci_dev *dev);
extern int pci_find_aer_capability(struct pci_dev *dev);
extern int pci_disable_pcie_error_reporting(struct pci_dev *dev);
extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
extern int pci_cleanup_aer_correct_error_status(struct pci_dev *dev);
#else
#define pci_enable_pcie_error_reporting(dev)		(-EINVAL)
#define pci_find_aer_capability(dev)			(0)
#define pci_disable_pcie_error_reporting(dev)		(-EINVAL)
#define pci_cleanup_aer_uncorrect_error_status(dev)	(-EINVAL)
#define pci_cleanup_aer_correct_error_status(dev)	(-EINVAL)
#endif

#endif //_AER_H_