does the BBGW wifi hardware have a power saving mode?

Does the BBGW or the wifi hardware on the BBGW have some sort of power saving mode?

Something interesting I noticed about those “wlcore: ERROR SW watchdog interrupt received! starting recovery” messages that fill up my serial console: I get one almost every time the BBGW sends out a packet. This corresponds to my ~95% packet loss.

But if I run this command on my BBGW to frequently ping the wifi router, I never see the error message, and wifi networking works correctly:

sudo ping -i 0.1 192.168.1.1

If I increase the length of time to 0.2 seconds or longer, then the problem happens and I lose wifi connectivity. But as long as there is a steady stream of packets every 0.1 seconds or shorter, wifi works perfectly. Which is why I was wondering – could the wifi hardware be trying to go into some sort of power saving mode?

$ uname -a
Linux beaglebone 4.4.27-ti-r63 #1 SMP Thu Nov 3 19:58:15 UTC 2016 armv7l GNU/Linux

Stéphane

Hi Stephane,
Yes WL18xx does have a power save mode which is on by default. It can be disabled with

echo 0 > /sys/kernel/debug/ieee80211/phy0/wlcore/sleep_auth

The SW interrupt message means that the linux driver did not get a response from the WL18xx firmware within a defined time and so represents the fact that WL18xx has gone off into the weeds. It is often related to power management changes in the MMC driver.

Iain

Yes WL18xx does have a power save mode which is on by default. It can be disabled with
echo 0 > /sys/kernel/debug/ieee80211/phy0/wlcore/sleep_auth

That seems to have made a difference, Iain. My BBGW doesn’t do it every time, so I cannot yet say for certain, but so far today the 2 times the BBGW boots up with those error messages and a non-working wlan0, I login through the serial console interface, run that command, and everything then starts working again.

The default value for /sys/kernel/debug/ieee80211/phy0/wlcore/sleep_auth seems to be 2. I eventually found WL1271_PSM_ELP = 2 (power saving move, extreme low power) in acx.h. If anyone else is curious, the possible values 0, 1, and 2 are defined as:

/* Active mode */

WL1271_PSM_CAM = 0,

/* Power save mode */
WL1271_PSM_PS = 1,

/* Extreme low power */
WL1271_PSM_ELP = 2

Stéphane