Skip to content

Commit eeee3b5

Browse files
khfengbjorn-helgaas
authored andcommitted
PCI: Mask Replay Timer Timeout errors for Genesys GL975x SD host controller
Due to a hardware defect in GL975x, config accesses when ASPM is enabled frequently cause Replay Timer Timeouts in the Port leading to the device. These are Correctable Errors, so the Downstream Port logs it in its AER Correctable Error Status register and, when the error is not masked, sends an ERR_COR message upstream. The message terminates at a Root Port, which may generate an AER interrupt so the OS can log it. The Correctable Error logging is an annoyance but not a major issue itself. But when the AER interrupt happens during suspend, it can prevent the system from suspending. 015c9cb ("mmc: sdhci-pci-gli: GL9750: Mask the replay timer timeout of AER") masked these errors in the GL975x itself. Mask these errors in the Port leading to GL975x as well. Note that Replay Timer Timeouts will still be logged in the AER Correctable Error Status register, but they will not cause AER interrupts. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Kai-Heng Feng <[email protected]> [bhelgaas: commit log, update dmesg note] Signed-off-by: Bjorn Helgaas <[email protected]> Cc: Victor Shih <[email protected]> Cc: Ben Chuang <[email protected]>
1 parent 4cece76 commit eeee3b5

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

drivers/pci/quirks.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6261,3 +6261,23 @@ static void pci_fixup_d3cold_delay_1sec(struct pci_dev *pdev)
62616261
pdev->d3cold_delay = 1000;
62626262
}
62636263
DECLARE_PCI_FIXUP_FINAL(0x5555, 0x0004, pci_fixup_d3cold_delay_1sec);
6264+
6265+
#ifdef CONFIG_PCIEAER
6266+
static void pci_mask_replay_timer_timeout(struct pci_dev *pdev)
6267+
{
6268+
struct pci_dev *parent = pci_upstream_bridge(pdev);
6269+
u32 val;
6270+
6271+
if (!parent || !parent->aer_cap)
6272+
return;
6273+
6274+
pci_info(parent, "mask Replay Timer Timeout Correctable Errors due to %s hardware defect",
6275+
pci_name(pdev));
6276+
6277+
pci_read_config_dword(parent, parent->aer_cap + PCI_ERR_COR_MASK, &val);
6278+
val |= PCI_ERR_COR_REP_TIMER;
6279+
pci_write_config_dword(parent, parent->aer_cap + PCI_ERR_COR_MASK, val);
6280+
}
6281+
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9750, pci_mask_replay_timer_timeout);
6282+
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_GLI, 0x9755, pci_mask_replay_timer_timeout);
6283+
#endif

0 commit comments

Comments
 (0)