[SRU Xenial][RESEND][PATCH] UBUNTU: SAUCE: Redpine: fix for firmware assert upon assoc timeout

Siva Rebbagondla siva8118 at gmail.com
Wed Nov 21 06:37:36 UTC 2018


From: Siva Rebbagondla <siva.rebbagondla at redpinesignals.com>

BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1804360

When Association timeout happens and station tries to scan, observed below
firmware assert.

Root cause: When association starts, driver is sending station add peer
notify to firmware but when Association timeout happens, driver is not
sending station peer delete to Firmware. Hence, FW is going into DEEP SLEEP
in associated state, which causes below Firmware assert.

Fix: sending station delete peer notify when assoc timeout happens

...skipping...
wlan0: authenticate with ac:a3:1e:a1:1e:85
wlan0: send auth to ac:a3:1e:a1:1e:85 (try 1/3)
wlan0: authenticated
wlan0: associate with ac:a3:1e:a1:1e:85 (try 1/3)
wlan0: associate with ac:a3:1e:a1:1e:85 (try 2/3)
wlan0: associate with ac:a3:1e:a1:1e:85 (try 3/3)
wlan0: association with ac:a3:1e:a1:1e:85 timed out
ven_rsi_91x: rsi_disable_ps: Cannot accept disable PS in PS_NONE state
ven_rsi_91x: rsi_interrupt_handler: ==> FIRMWARE Assert <==
ven_rsi_91x: rsi_interrupt_handler: Firmware Status is 0xa
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready

Signed-off-by: Siva Rebbagondla <siva.rebbagondla at redpinesignals.com>
---
 ubuntu/rsi/rsi_91x_mac80211.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/ubuntu/rsi/rsi_91x_mac80211.c b/ubuntu/rsi/rsi_91x_mac80211.c
index 696802f..78702ff 100644
--- a/ubuntu/rsi/rsi_91x_mac80211.c
+++ b/ubuntu/rsi/rsi_91x_mac80211.c
@@ -2687,7 +2687,24 @@ out:
 	return status;
 }
 
+static void rsi_mac80211_event_callback(struct ieee80211_hw *hw,
+					struct ieee80211_vif *vif,
+					const struct ieee80211_event *event)
+{
+	struct rsi_hw *adapter = hw->priv;
+	struct rsi_common *common = adapter->priv;
+	struct ieee80211_bss_conf *bss = &adapter->vifs[0]->bss_conf;
 
+	if (event->type == MLME_EVENT && event->u.mlme.data == ASSOC_EVENT &&
+	    event->u.mlme.status == MLME_TIMEOUT) {
+		ven_rsi_dbg(ERR_ZONE, "%s: ASSOC Timeout: reason = %d\n",
+			    __func__, event->u.mlme.reason);
+		rsi_send_sta_notify_frame(common, STA_OPMODE,
+					  STA_DISCONNECTED,
+					  bss->bssid, bss->qos,
+					  bss->aid, 0);
+	}
+}
 
 static struct ieee80211_ops mac80211_ops = {
 	.tx = rsi_mac80211_tx,
@@ -2722,6 +2739,7 @@ static struct ieee80211_ops mac80211_ops = {
 #endif
 	.remain_on_channel = rsi_mac80211_roc,
 	.cancel_remain_on_channel = rsi_mac80211_cancel_roc,
+	.event_callback = rsi_mac80211_event_callback,
 };
 
 /**
-- 
2.7.4




More information about the kernel-team mailing list