diff options
Diffstat (limited to 'drivers/pci/quirks.c')
| -rw-r--r-- | drivers/pci/quirks.c | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index eff7f5df08e2..568410e64ce6 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -6253,3 +6253,23 @@ static void pci_fixup_d3cold_delay_1sec(struct pci_dev *pdev)  	pdev->d3cold_delay = 1000;  }  DECLARE_PCI_FIXUP_FINAL(0x5555, 0x0004, pci_fixup_d3cold_delay_1sec); + +#ifdef CONFIG_PCIEAER +static void pci_mask_replay_timer_timeout(struct pci_dev *pdev) +{ +	struct pci_dev *parent = pci_upstream_bridge(pdev); +	u32 val; + +	if (!parent || !parent->aer_cap) +		return; + +	pci_info(parent, "mask Replay Timer Timeout Correctable Errors due to %s hardware defect", +		 pci_name(pdev)); + +	pci_read_config_dword(parent, parent->aer_cap + PCI_ERR_COR_MASK, &val); +	val |= PCI_ERR_COR_REP_TIMER; +	pci_write_config_dword(parent, parent->aer_cap + PCI_ERR_COR_MASK, val); +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9750, pci_mask_replay_timer_timeout); +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9755, pci_mask_replay_timer_timeout); +#endif | 
