[PATCH 2/2] wifi: rtw89: phy: make RF calibration timeouts non-fatal on USB

Louis Kotze
2026-04-10T08:00:39Z

On USB adapters, RF calibration timeouts can still occasionally occur
despite the increased timeout values, particularly under system load
or USB bus contention. However, the radio typically continues to
operate correctly despite an incomplete calibration — the timeout
does not indicate a hardware failure.

Make calibration timeouts and bad state returns non-fatal on USB by
logging at debug level and continuing, rather than returning
-ETIMEDOUT/-EFAULT which can cascade into a connection failure or
disconnect.

PCIe error handling is unchanged — timeouts remain fatal on PCIe
where they indicate a real problem.

Signed-off-by: Louis Kotze <loukot@gmail.com>
---
drivers/net/wireless/realtek/rtw89/phy.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtw89/phy.c b/drivers/net/wireless/realtek/rtw89/phy.c
index 4d809df8b..a06bea88e 100644
--- a/drivers/net/wireless/realtek/rtw89/phy.c
+++ b/drivers/net/wireless/realtek/rtw89/phy.c
@@ -3972,9 +3972,21 @@ int rtw89_phy_rfk_report_wait(struct rtw89_dev *rtwdev, const char *rfk_name,
time_left = wait_for_completion_timeout(&wait->completion,
msecs_to_jiffies(ms));
if (time_left == 0) {
+ if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) {
+ rtw89_debug(rtwdev, RTW89_DBG_RFK,
+ "RF %s timeout (non-fatal on USB)\n",
+ rfk_name);
+ goto out;
+ }
rtw89_warn(rtwdev, "failed to wait RF %s\n", rfk_name);
return -ETIMEDOUT;
} else if (wait->state != RTW89_RFK_STATE_OK) {
+ if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) {
+ rtw89_debug(rtwdev, RTW89_DBG_RFK,
+ "RF %s state %d (non-fatal on USB)\n",
+ rfk_name, wait->state);
+ goto out;
+ }
rtw89_warn(rtwdev, "failed to do RF %s result from state %d\n",
rfk_name, wait->state);
return -EFAULT;
--
2.53.0