We are disabling deep sleep before performing scan. In corner case,
it's observed that probe request is downloaded to firmware before
receiving deep sleep confirmation which leads to a scan stop issue
Race is resolved in this patch by waiting for the confirmation from
firmware
00f807d...
by
Sanjay Kumar Konduri <email address hidden>
UBUNTU: SAUCE: Redpine: resolve power save issue after S4 resume
We are redownloading the firmware after S4 resume. We observed in
stress test that mac80211 sometimes gives power save request after
resume which causes the firmware in bad state.
mac_ops_resumed flag is added to skip that request until initialisation
is done.
UBUNTU: SAUCE: Redpine: rsi: Add deep sleep enable before connection
As in coex mode radio will be shared between BT and WLAN,
we need enable deep sleep before scan. Before scan deep
sleep can be disabled and re-enabed after scan. For any TX
frame before assoc, deep sleep shall be disable.
Disabling power save in coex mode before configuring wowlan
parameters to firmware to avoid radio loss for wlan.
At SDIO restore ieee80211_restart_hw() is getting called to
restart all MAC operations. This step is not required.
eturning 1 from mac80211_resume() will serve this purpose.
Above method adding up some races in calling functions because
of timing issues.
The function cmd52readbyte and cmd52writebyte can take additional
parameter; expected response. This parameter is false in reset
card (To avoid waiting during reset card) and true while
disabling or enabling SDIO interrupts.
Two issues were observed, kernel waring at S4 restore and other
is failing to wakeup at times.
Kernel warning is because, at hibernate resume while mac80211
is resuming, driver is issuing mac80211 detach. The warning is
as below:
This is avoided by callingg ieee80211_restart_hw and reinitializing
device as usual in sdio restore and waiting in mac80211_resume
until device is ready.
Other issue may be due to firmware assertion observed at times for
the length of bgscan probe request at restore. To avoid this,
unnecessary IEs are cut from the frame at end.