diff mbox series

UBUNTU: SAUCE: Redpine: fix for firmware assert upon assoc

Message ID 1542778727-4105-1-git-send-email-siva8118@gmail.com
State New
Headers show
Series UBUNTU: SAUCE: Redpine: fix for firmware assert upon assoc | expand

Commit Message

Siva Rebbagondla Nov. 21, 2018, 5:38 a.m. UTC
From: Siva Rebbagondla <siva.rebbagondla@redpinesignals.com>

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@redpinesignals.com>
---
 ubuntu/rsi/rsi_91x_mac80211.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
diff mbox series

Patch

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,
 };
 
 /**