Commit b0c0e688 authored by Lazar Alexei's avatar Lazar Alexei Committed by Kalle Valo

wil6210: Fix driver down flow

Stations disconnection is executed as part of wil_reset so no
need to do it in wil_down.
Removal of the disconnect operation will also preserve the lock
of wil->mutex during the whole reset flow and prevent handling of
connect event while resetting.
Set wil_status_resetting in earlier stage in the flow to prevent
double resetting call in case communication with FW fails while
bringing the interface down.
Signed-off-by: default avatarLazar Alexei <qca_ailizaro@qca.qualcomm.com>
Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent d35c2b6f
...@@ -1035,10 +1035,10 @@ int wil_up(struct wil6210_priv *wil) ...@@ -1035,10 +1035,10 @@ int wil_up(struct wil6210_priv *wil)
int __wil_down(struct wil6210_priv *wil) int __wil_down(struct wil6210_priv *wil)
{ {
int rc;
WARN_ON(!mutex_is_locked(&wil->mutex)); WARN_ON(!mutex_is_locked(&wil->mutex));
set_bit(wil_status_resetting, wil->status);
if (wil->platform_ops.bus_request) if (wil->platform_ops.bus_request)
wil->platform_ops.bus_request(wil->platform_handle, 0); wil->platform_ops.bus_request(wil->platform_handle, 0);
...@@ -1064,18 +1064,6 @@ int __wil_down(struct wil6210_priv *wil) ...@@ -1064,18 +1064,6 @@ int __wil_down(struct wil6210_priv *wil)
wil->scan_request = NULL; wil->scan_request = NULL;
} }
if (test_bit(wil_status_fwconnected, wil->status) ||
test_bit(wil_status_fwconnecting, wil->status)) {
mutex_unlock(&wil->mutex);
rc = wmi_call(wil, WMI_DISCONNECT_CMDID, NULL, 0,
WMI_DISCONNECT_EVENTID, NULL, 0,
WIL6210_DISCONNECT_TO_MS);
mutex_lock(&wil->mutex);
if (rc)
wil_err(wil, "timeout waiting for disconnect\n");
}
wil_reset(wil, false); wil_reset(wil, false);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment