linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).