[PATCH 1/1][SRU][OEM-5.14/OEM-5.17] UBUNTU: SAUCE: rtw88: pci: 8821c: Disable 21ce completion timeout
Chris Chiu
chris.chiu at canonical.com
Fri Apr 22 03:42:05 UTC 2022
From: Po-Hao Huang <phhuang at realtek.com>
BugLink: https://bugs.launchpad.net/bugs/1969771
Disable this capability to avoid timeout errors on certain platforms.
Without it, pci bus might stuck and leads to disconnection.
Signed-off-by: Po-Hao Huang <phhuang at realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih at realtek.com>
Tested-by: Chris Chiu <chris.chiu at canonical.com>
Link: https://patchwork.kernel.org/project/linux-wireless/patch/20220420093058.31646-2-pkshih@realtek.com/
Signed-off-by: Chris Chiu <chris.chiu at canonical.com>
---
drivers/net/wireless/realtek/rtw88/pci.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
index a0991d3f15c0..e63ca8182807 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -1479,12 +1479,15 @@ static void rtw_pci_interface_cfg(struct rtw_dev *rtwdev)
static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev)
{
+ struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
struct rtw_chip_info *chip = rtwdev->chip;
+ struct pci_dev *pdev = rtwpci->pdev;
const struct rtw_intf_phy_para *para;
u16 cut;
u16 value;
u16 offset;
int i;
+ int ret;
cut = BIT(0) << rtwdev->hal.cut_version;
@@ -1517,6 +1520,15 @@ static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev)
}
rtw_pci_link_cfg(rtwdev);
+
+ /* Disable 8821ce completion timeout by default */
+ if (chip->id == RTW_CHIP_TYPE_8821C) {
+ ret = pcie_capability_set_word(pdev, PCI_EXP_DEVCTL2,
+ PCI_EXP_DEVCTL2_COMP_TMOUT_DIS);
+ if (ret)
+ rtw_err(rtwdev, "failed to set PCI cap, ret = %d\n",
+ ret);
+ }
}
static int __maybe_unused rtw_pci_suspend(struct device *dev)
--
2.25.1
More information about the kernel-team
mailing list