]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: pci: disable PCI completion timeout control
authorChin-Yen Lee <timlee@realtek.com>
Wed, 25 Dec 2024 12:28:04 +0000 (20:28 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 7 Jan 2025 07:40:58 +0000 (15:40 +0800)
Realtek's chips follow suggestion of PCIe spec to design the max timeout of
PCI completion, but some PCIe host reply too slow to meet it and lead PCI
AER. Disable PCI completion timeout function via PCI configuration to
avoid the AER.

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20241225122804.10214-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/pci.c

index c3a027735d0f977d55ba4d2a668f126aad3abe92..516160147191c3f6d50992d54c2f71adc3af92f7 100644 (file)
@@ -4078,6 +4078,15 @@ static void rtw89_pci_l1ss_cfg(struct rtw89_dev *rtwdev)
                rtw89_pci_l1ss_set(rtwdev, true);
 }
 
+static void rtw89_pci_cpl_timeout_cfg(struct rtw89_dev *rtwdev)
+{
+       struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
+       struct pci_dev *pdev = rtwpci->pdev;
+
+       pcie_capability_set_word(pdev, PCI_EXP_DEVCTL2,
+                                PCI_EXP_DEVCTL2_COMP_TMOUT_DIS);
+}
+
 static int rtw89_pci_poll_io_idle_ax(struct rtw89_dev *rtwdev)
 {
        int ret = 0;
@@ -4291,6 +4300,7 @@ void rtw89_pci_basic_cfg(struct rtw89_dev *rtwdev, bool resume)
 
        rtw89_pci_disable_eq(rtwdev);
        rtw89_pci_filter_out(rtwdev);
+       rtw89_pci_cpl_timeout_cfg(rtwdev);
        rtw89_pci_link_cfg(rtwdev);
        rtw89_pci_l1ss_cfg(rtwdev);
 }