rtw88: use read_poll_timeout instead of fixed sleep
[linux-2.6-microblaze.git] / drivers / net / wireless / realtek / rtw88 / wow.c
index fc9544f..bdccfa7 100644 (file)
@@ -283,15 +283,26 @@ static void rtw_wow_rx_dma_start(struct rtw_dev *rtwdev)
 
 static int rtw_wow_check_fw_status(struct rtw_dev *rtwdev, bool wow_enable)
 {
-       /* wait 100ms for wow firmware to finish work */
-       msleep(100);
+       int ret;
+       u8 check;
+       u32 check_dis;
 
        if (wow_enable) {
-               if (rtw_read8(rtwdev, REG_WOWLAN_WAKE_REASON))
+               ret = read_poll_timeout(rtw_read8, check, !check, 1000,
+                                       100000, true, rtwdev,
+                                       REG_WOWLAN_WAKE_REASON);
+               if (ret)
                        goto wow_fail;
        } else {
-               if (rtw_read32_mask(rtwdev, REG_FE1IMR, BIT_FS_RXDONE) ||
-                   rtw_read32_mask(rtwdev, REG_RXPKT_NUM, BIT_RW_RELEASE))
+               ret = read_poll_timeout(rtw_read32_mask, check_dis,
+                                       !check_dis, 1000, 100000, true, rtwdev,
+                                       REG_FE1IMR, BIT_FS_RXDONE);
+               if (ret)
+                       goto wow_fail;
+               ret = read_poll_timeout(rtw_read32_mask, check_dis,
+                                       !check_dis, 1000, 100000, false, rtwdev,
+                                       REG_RXPKT_NUM, BIT_RW_RELEASE);
+               if (ret)
                        goto wow_fail;
        }