RE: [PATCH 2/2] wifi: rtw88: ps: Trigger firmware recovery when failing to leave LPS state

From: Ping-Ke Shih

Date: Mon Nov 02 2026 - 00:54:15 EST


Kalpesh Solanki <skalpesh942@xxxxxxxxx> wrote:
> When rtw_fw_leave_lps_check() fails, the firmware has locked up or
> failed to exit its low power state. Currently, the driver only logs
> 'firmware failed to leave lps state' and clears REG_TCR, leaving the
> hardware in an unresponsive state where subsequent H2C commands fail
> and TX traffic hangs indefinitely.

After patch 1/2, does it still happen?

Is it helpful if you enlarge timeout time of __rtw_fw_leave_lps_check_c2h()
or __rtw_fw_leave_lps_check_reg()?

or retry 3 times to leave PS with below three steps?

rtw_fw_leave_lps_check_prepare(rtwdev);
rtw_fw_set_pwr_mode(rtwdev);
rtw_fw_leave_lps_check(rtwdev);

>
> Call rtw_fw_recovery() when rtw_fw_leave_lps_check() fails so the driver
> can automatically reset the hardware and re-sync without requiring manual
> user intervention.

Is this a real case? I'd just want to confirm this is real case it can help.

>
> Signed-off-by: Kalpesh Solanki <skalpesh942@xxxxxxxxx>
> ---
> drivers/net/wireless/realtek/rtw88/ps.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c
> index c6360cf..db1e9e7 100644
> --- a/drivers/net/wireless/realtek/rtw88/ps.c
> +++ b/drivers/net/wireless/realtek/rtw88/ps.c
> @@ -166,6 +166,7 @@ static void rtw_fw_leave_lps_check(struct rtw_dev *rtwdev)
> rtw_write32_clr(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN);
> rtw_warn_once(rtwdev, "firmware failed to leave lps state\n");
> rtw_fw_dump_dbg_info(rtwdev);
> + rtw_fw_recovery(rtwdev);

failed to apply, because rebase to rtw-next.

https://github.com/pkshih/rtw.git

> }
> }
>
> --
> 2.53.0
>