* [PATCH rtw-next] wifi: rtw89: 8852be: disable PCI D3Cold by quirk for certain platform
@ 2025-08-12 0:43 Ping-Ke Shih
0 siblings, 0 replies; only message in thread
From: Ping-Ke Shih @ 2025-08-12 0:43 UTC (permalink / raw)
To: linux-wireless; +Cc: wojcikmarcin49
On a platform, RTL8852BE gets lost from suspending, and kernel throws
Unable to change power state from D3cold to D0, device inaccessible
then driver throws
0000:39:00.0: failed to write DBI register, addr=0xB48
0000:39:00.0: failed to write DBI register, addr=0xB48
0000:39:00.0: failed to read PCI cap, ret=134
0000:39:00.0: xtal si not ready(W): offset=90 val=10 mask=10
0000:39:00.0: mac init fail, ret:-110
An solution is to disable d3cold via sysfs to write 1 to
/sys/bus/pci/devices/0000:39:00.0/d3cold_allowed
Since it's hard to measure hardware signals to find cause, add a quirk to
disable d3cold for the platform.
Reported-by: Marcin Wojcik <wojcikmarcin49@gmail.com>
Closes: https://lore.kernel.org/linux-wireless/CAE3x6Qi8Nku26B4aWE+jtJmHb=hO8C743_myNrrBzUAGyuUw9A@mail.gmail.com/
Closes: https://github.com/morrownr/rtw89/issues/18
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
drivers/net/wireless/realtek/rtw89/core.h | 1 +
drivers/net/wireless/realtek/rtw89/pci.c | 3 +++
drivers/net/wireless/realtek/rtw89/rtw8852be.c | 14 +++++++++++++-
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index 43e10278e14d..39085c9589da 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -5028,6 +5028,7 @@ enum rtw89_flags {
enum rtw89_quirks {
RTW89_QUIRK_PCI_BER,
+ RTW89_QUIRK_PCI_NO_D3COLD,
RTW89_QUIRK_THERMAL_PROT_120C,
RTW89_QUIRK_THERMAL_PROT_110C,
diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
index a669f2f843aa..c9b93191805d 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.c
+++ b/drivers/net/wireless/realtek/rtw89/pci.c
@@ -3060,6 +3060,9 @@ static int rtw89_pci_claim_device(struct rtw89_dev *rtwdev,
pci_set_master(pdev);
pci_set_drvdata(pdev, rtwdev->hw);
+ if (test_bit(RTW89_QUIRK_PCI_NO_D3COLD, rtwdev->quirks))
+ pci_d3cold_disable(pdev);
+
rtwpci->pdev = pdev;
return 0;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852be.c b/drivers/net/wireless/realtek/rtw89/rtw8852be.c
index b0726f590ca2..ea6c129a3422 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852be.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852be.c
@@ -65,10 +65,22 @@ static const struct rtw89_pci_info rtw8852b_pci_info = {
.ssid_quirks = NULL,
};
+static const struct dmi_system_id rtw8852b_pci_quirks[] = {
+ {
+ .ident = "ASUS TUF Gaming F16 FX607VUR_FX607VU",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "ASUS TUF Gaming F16 FX607VUR_FX607VU"),
+ },
+ .driver_data = (void *)RTW89_QUIRK_PCI_NO_D3COLD,
+ },
+ {},
+};
+
static const struct rtw89_driver_info rtw89_8852be_info = {
.chip = &rtw8852b_chip_info,
.variant = NULL,
- .quirks = NULL,
+ .quirks = rtw8852b_pci_quirks,
.bus = {
.pci = &rtw8852b_pci_info,
},
--
2.25.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2025-08-12 0:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-12 0:43 [PATCH rtw-next] wifi: rtw89: 8852be: disable PCI D3Cold by quirk for certain platform Ping-Ke Shih
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).