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

Ping-Ke Shih
2026-04-14T06:39:44Z

Louis Kotze <loukot@gmail.com> wrote:
> 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

If calibration timeouts, the performance might be bad. How about just
to enlarge timeout time in 1/2 patch?

> returning
> -ETIMEDOUT/-EFAULT which can cascade into a connection failure or
> disconnect.

It seems like we don't actually handle the return code for now.
Could you point out the path you encountered?

>
> 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