diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index fa2c06fd48..28a921960e 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -7805,7 +7805,6 @@ QDF_STATUS hdd_start_all_adapters(struct hdd_context *hdd_ctx) struct hdd_adapter *adapter; eConnectionState conn_state; bool value; - uint8_t chan; struct wlan_objmgr_vdev *vdev; hdd_enter(); @@ -7908,12 +7907,22 @@ QDF_STATUS hdd_start_all_adapters(struct hdd_context *hdd_ctx) } break; } - chan = wlan_reg_freq_to_chan(hdd_ctx->pdev, - adapter->mon_chan_freq); hdd_start_station_adapter(adapter); hdd_set_mon_rx_cb(adapter->dev); - wlan_hdd_set_mon_chan(adapter, adapter->mon_chan_freq, - adapter->mon_bandwidth); + + /* + * Do not set channel for monitor mode if monitor iface + * went down during SSR, as for set channels host sends + * vdev start command to FW. For the interfaces went + * down during SSR, host stops those adapters by sending + * vdev stop/down/delete commands to FW. So FW doesn't + * sends response for vdev start and vdev start response + * timer expires and thus host triggers ASSERT. + */ + if (!test_bit(DOWN_DURING_SSR, &adapter->event_flags)) + wlan_hdd_set_mon_chan( + adapter, adapter->mon_chan_freq, + adapter->mon_bandwidth); break; default: break;