summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wcn36xx/pmc.c
diff options
context:
space:
mode:
authorLoic Poulain <loic.poulain@linaro.org>2020-08-25 15:45:27 +0200
committerKalle Valo <kvalo@codeaurora.org>2020-08-27 13:14:54 +0300
commitc6522a5076e1a65877c51cfee313a74ef61cabf8 (patch)
tree7d3bfb03c20dab7bcd39f67017b9577df535001d /drivers/net/wireless/ath/wcn36xx/pmc.c
parent1fcdb567df1b850b751887caf1dc5ab6106e1104 (diff)
wcn36xx: Disable bmps when encryption is disabled
For whatever reason, when connected to an open/no-security BSS, the wcn36xx controller in bmps mode does not forward 'wake-up' beacons despite AP sends DTIM with station AID. Meaning that AP is not able to wakeup the station and needs to wait for the station to wakeup by its own (TX data, keep alive pkt...), causing serious latency issues and unexpected deauth. When connected to AP with encryption enabled, this issue does not occur. So a simple workaround is to only enable bmps support in that case. Ideally, it should be propertly fixed to allow bmps support with open BSS, whatever the issue is at driver or firmware level. Tested on wcn3620 and wcn3680. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/1598363127-26066-1-git-send-email-loic.poulain@linaro.org
Diffstat (limited to 'drivers/net/wireless/ath/wcn36xx/pmc.c')
-rw-r--r--drivers/net/wireless/ath/wcn36xx/pmc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c
index 1976b80c235f..8441031b667c 100644
--- a/drivers/net/wireless/ath/wcn36xx/pmc.c
+++ b/drivers/net/wireless/ath/wcn36xx/pmc.c
@@ -23,7 +23,10 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
{
int ret = 0;
struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
- /* TODO: Make sure the TX chain clean */
+
+ if (!vif_priv->allow_bmps)
+ return -ENOTSUPP;
+
ret = wcn36xx_smd_enter_bmps(wcn, vif);
if (!ret) {
wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n");