> > * Reizer, Eyal <eyalr@xxxxxx> [180522 13:28]: > > Actually the below patch removing the call to wlcore_fw_sleep() avoids this > error. > > The downside is that the wl8 firmware remains fully active during supend, so > we > > Would need to find the root cause why the last call allowing the wilink8 > firmware > > To go into ELP mode during suspend is only completing on resume and not > during > > Suspend enter. > > > > diff --git a/drivers/net/wireless/ti/wlcore/main.c > > b/drivers/net/wireless/ti/wlcore/main.c > > index 4c297aa..8df1ae6 100644 > > --- a/drivers/net/wireless/ti/wlcore/main.c > > +++ b/drivers/net/wireless/ti/wlcore/main.c > > @@ -1789,7 +1789,6 @@ static int wl1271_op_suspend(struct > ieee80211_hw *hw, > > goto out_sleep; > > > > out_sleep: > > - pm_runtime_put_noidle(wl->dev); > > mutex_unlock(&wl->mutex); > > > > if (ret < 0) { > > @@ -1821,15 +1820,7 @@ static int wl1271_op_suspend(struct > ieee80211_hw *hw, > > */ > > cancel_delayed_work(&wl->tx_watchdog_work); > > > > - /* > > - * Use an immediate call for allowing the firmware to go into power > > - * save during suspend. > > - * Using a workque for this last write was only hapenning on resume > > - * leaving the firmware with power save disabled during suspend, > > - * while consuming full power during wowlan suspend. > > - */ > > - wlcore_fw_sleep(wl); > > - > > + pm_runtime_put_noidle(wl->dev); > > return 0; > > } > > OK try replacing the pm_runtime_put_noidle() above with just > pm_runtime_put_sync(). The reason why I put noidle there was the > wlcore_fw_sleep() call, with that gone put_sync should do the trick. > I have tried that already. Same problem. The last call to: ret = wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_SLEEP) which allows the firmware to get into ELP state during wowlan suspend is only completing after system resume for some unknown reason... Best Regards, Eyal