Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote: > On 16/07/2025 03:17, Ping-Ke Shih wrote: > > Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote: > >> This read_poll_timeout_atomic() with a delay of 1 µs and a timeout of > >> 1000000 µs can take ~250 seconds in the worst case because sending a > >> USB control message takes ~250 µs. > >> > >> Lower the timeout to 4000 for USB in order to reduce the maximum polling > >> time to ~1 second. > >> > >> This problem was observed with RTL8851BU while suspending to RAM with > >> WOWLAN enabled. The computer sat for 4 minutes with a black screen > >> before suspending. > >> > >> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> > >> --- > >> v2: > >> - Lower the timeout for USB instead of increasing the delay. > >> --- > >> drivers/net/wireless/realtek/rtw89/fw.c | 9 +++++++-- > >> drivers/net/wireless/realtek/rtw89/fw.h | 2 ++ > >> 2 files changed, 9 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c > >> index 73a4ec988d16..b774a329e7c7 100644 > >> --- a/drivers/net/wireless/realtek/rtw89/fw.c > >> +++ b/drivers/net/wireless/realtek/rtw89/fw.c > >> @@ -6755,13 +6755,18 @@ static int rtw89_fw_read_c2h_reg(struct rtw89_dev *rtwdev, > >> const struct rtw89_chip_info *chip = rtwdev->chip; > >> struct rtw89_fw_info *fw_info = &rtwdev->fw; > >> const u32 *c2h_reg = chip->c2h_regs; > >> - u32 ret; > >> + u32 ret, timeout; > >> u8 i, val; > >> > >> info->id = RTW89_FWCMD_C2HREG_FUNC_NULL; > >> > >> + if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) > >> + timeout = RTW89_C2H_TIMEOUT_USB; > > > > Should we have different timeout times for USB2 and USB3? > > The same question for patch 2/2. > > > > I measured the time it takes to read R_AX_WCPU_FW_CTRL (patch 2/2): > > USB 2 USB 3 > RTL8851BU 125 µs not supported > RTL8852BU 250 µs 40 µs > RTL8852CU 375 µs 40 µs > > In my setup the same timeout works for both. Even with the faster reads > it still waits long enough. Thanks for the info.