public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] wifi: rtw89: retry efuse physical map dump on transient failure
@ 2026-03-01  4:24 Christian Hewitt
  2026-03-02  5:47 ` Ping-Ke Shih
  2026-03-16  5:32 ` Ping-Ke Shih
  0 siblings, 2 replies; 18+ messages in thread
From: Christian Hewitt @ 2026-03-01  4:24 UTC (permalink / raw)
  To: Ping-Ke Shih, Bitterblue Smith, linux-wireless, linux-kernel

On Radxa Rock 5B with a RTL8852BE combo WiFi/BT card, the efuse
physical map dump intermittently fails with -EBUSY during probe.
The failure occurs in rtw89_dump_physical_efuse_map_ddv() where
read_poll_timeout_atomic() times out waiting for the B_AX_EF_RDY
bit after 1 second.

The root cause is a timing race during boot: the WiFi driver's
chip initialization (firmware download via PCIe) overlaps with the
Bluetooth firmware download to the same combo chip over USB. This
can leave the efuse controller temporarily unavailable when the
WiFi driver attempts to read the efuse map.

Add a retry loop (up to 3 attempts with 500ms delays) around the
physical efuse map dump in rtw89_parse_efuse_map_ax(). The firmware
download path already retries up to 5 times, but the efuse read
that follows has no retry logic, making it the weak link in the
probe sequence.

Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
---
The LibreELEC distro is minimalist and fast-booting with some
history of exposing racy probing and timing issues that don't
show up on the mainstream distros. Below are some before/after
dmesg prints to support the patch:

Before:

ROCK5B:~ # dmesg | grep rtw89
[    6.575383] rtw89_8852be 0002:21:00.0: loaded firmware rtw89/rtw8852b_fw-1.bin
[    6.575538] rtw89_8852be 0002:21:00.0: enabling device (0000 -> 0003)
[    6.585763] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 5
[    6.585779] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 3
[   10.174946] rtw89_8852be 0002:21:00.0: failed to dump efuse physical map
[   10.176584] rtw89_8852be 0002:21:00.0: failed to setup chip information
[   10.178173] rtw89_8852be 0002:21:00.0: probe with driver rtw89_8852be failed with error -16

After:

ROCK5B:~ # dmesg | grep rtw89
[    7.393558] rtw89_8852be 0002:21:00.0: loaded firmware rtw89/rtw8852b_fw-1.bin
[    7.393729] rtw89_8852be 0002:21:00.0: enabling device (0000 -> 0003)
[    7.406341] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 5
[    7.406363] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 3
[   11.041563] rtw89_8852be 0002:21:00.0: efuse dump failed, retrying (1)
[   11.798390] rtw89_8852be 0002:21:00.0: chip info CID: 0, CV: 1, AID: 0, ACV: 1, RFE: 1
[   11.801013] rtw89_8852be 0002:21:00.0: rfkill hardware state changed to enable

For context, firmware also fails (and recovers) sometimes:

ROCK5B:~ # dmesg | grep rtw89
[    6.436873] rtw89_8852be 0002:21:00.0: loaded firmware rtw89/rtw8852b_fw-1.bin
[    6.437165] rtw89_8852be 0002:21:00.0: enabling device (0000 -> 0003)
[    6.450228] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 5
[    6.450239] rtw89_8852be 0002:21:00.0: Firmware version 0.29.29.15 (6fb3ec41), cmd version 0, type 3
[    7.864148] rtw89_8852be 0002:21:00.0: fw security fail
[    7.864154] rtw89_8852be 0002:21:00.0: download firmware fail
[    7.864160] rtw89_8852be 0002:21:00.0: [ERR]fwdl 0x1E0 = 0x62
[    7.864165] rtw89_8852be 0002:21:00.0: [ERR]fwdl 0x83F0 = 0x80011
[    7.864173] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864188] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864203] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864219] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864234] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864250] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864265] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864281] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864296] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864311] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864327] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864342] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931150
[    7.864358] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864373] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    7.864387] rtw89_8852be 0002:21:00.0: [ERR]fw PC = 0xb8931154
[    8.181342] rtw89_8852be 0002:21:00.0: chip info CID: 0, CV: 1, AID: 0, ACV: 1, RFE: 1
[    8.184322] rtw89_8852be 0002:21:00.0: rfkill hardware state changed to enable

 drivers/net/wireless/realtek/rtw89/efuse.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/efuse.c b/drivers/net/wireless/realtek/rtw89/efuse.c
index a2757a88d55d..d506f04ffd6c 100644
--- a/drivers/net/wireless/realtek/rtw89/efuse.c
+++ b/drivers/net/wireless/realtek/rtw89/efuse.c
@@ -270,6 +270,7 @@ int rtw89_parse_efuse_map_ax(struct rtw89_dev *rtwdev)
 	u8 *log_map = NULL;
 	u8 *dav_phy_map = NULL;
 	u8 *dav_log_map = NULL;
+	int retry;
 	int ret;
 
 	if (rtw89_read16(rtwdev, R_AX_SYS_WL_EFUSE_CTRL) & B_AX_AUTOLOAD_SUS)
@@ -289,7 +290,17 @@ int rtw89_parse_efuse_map_ax(struct rtw89_dev *rtwdev)
 		goto out_free;
 	}
 
-	ret = rtw89_dump_physical_efuse_map(rtwdev, phy_map, 0, phy_size, false);
+	for (retry = 0; retry < 3; retry++) {
+		if (retry) {
+			rtw89_warn(rtwdev, "efuse dump failed, retrying (%d)\n",
+				   retry);
+			fsleep(500000);
+		}
+		ret = rtw89_dump_physical_efuse_map(rtwdev, phy_map, 0,
+						    phy_size, false);
+		if (!ret)
+			break;
+	}
 	if (ret) {
 		rtw89_warn(rtwdev, "failed to dump efuse physical map\n");
 		goto out_free;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2026-03-17  6:15 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-01  4:24 [PATCH] wifi: rtw89: retry efuse physical map dump on transient failure Christian Hewitt
2026-03-02  5:47 ` Ping-Ke Shih
2026-03-02  5:55   ` Christian Hewitt
2026-03-02  6:04     ` Ping-Ke Shih
2026-03-02  6:17       ` Christian Hewitt
2026-03-09  2:35         ` Ping-Ke Shih
2026-03-10 17:16           ` Christian Hewitt
2026-03-11  3:05             ` Ping-Ke Shih
2026-03-11  4:20               ` Christian Hewitt
2026-03-12  2:22                 ` Ping-Ke Shih
2026-03-12  5:58                   ` Christian Hewitt
2026-03-12  7:39                     ` Ping-Ke Shih
2026-03-12  8:11                       ` Christian Hewitt
2026-03-12  8:28                         ` Ping-Ke Shih
2026-03-16  5:32 ` Ping-Ke Shih
2026-03-16 11:03   ` Christian Hewitt
2026-03-17  1:37     ` Ping-Ke Shih
2026-03-17  6:15       ` Christian Hewitt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox