On Tue, Jan 7, 2020 at 10:27 PM <yhchuang@xxxxxxxxxxx> wrote: > > From: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> > > When TX packet arrives, driver should leave deep PS state to make > sure the DMA is working. After requested to leave deep PS state, > driver needs to poll the PS state to check if the mode has been > changed successfully. The driver used to check the state of the > hardware every 20 msecs, which means upon the first failure of > state check, the CPU is delayed 20 msecs for next check. This is > harmful for some time-sensitive applications such as media players. > > So, use shorter delay time each check from 20 msecs to 100 usecs. > The state should be changed in several tries. But we still need > to reserve ~15 msecs in total in case of the state just took too > long to be changed successfully. If the states of driver and the > hardware is not synchronized, the power state could be locked > forever, which mean we could never enter/leave the PS state. > > Signed-off-by: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> Reviewed-by: Chris Chiu <chiu@xxxxxxxxxxxx> > --- > drivers/net/wireless/realtek/rtw88/ps.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c > index 913e6f47130f..7a189a9926fe 100644 > --- a/drivers/net/wireless/realtek/rtw88/ps.c > +++ b/drivers/net/wireless/realtek/rtw88/ps.c > @@ -91,11 +91,11 @@ void rtw_power_mode_change(struct rtw_dev *rtwdev, bool enter) > return; > > /* check confirm power mode has left power save state */ > - for (polling_cnt = 0; polling_cnt < 3; polling_cnt++) { > + for (polling_cnt = 0; polling_cnt < 50; polling_cnt++) { > polling = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr); > if ((polling ^ confirm) & BIT_RPWM_TOGGLE) > return; > - mdelay(20); > + udelay(100); > } > > /* in case of fw/hw missed the request, retry */ > -- > 2.17.1 >