summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath11k/core.c
diff options
context:
space:
mode:
authorVasanthakumar Thiagarajan <vthiagar@codeaurora.org>2019-11-28 08:21:58 +0000
committerKalle Valo <kvalo@codeaurora.org>2019-11-29 09:50:48 +0200
commit9c57d7e3b4882c29bbcf3e555a1f4163d6e55646 (patch)
tree3489b0544e5edba2ff57b0410dc70d89250cf4df /drivers/net/wireless/ath/ath11k/core.c
parent0366f42640a4100198edcf03bf7625ee1c46f42b (diff)
ath11k: Setup REO destination ring before sending wmi_init command
Firmware expects all the required REO destination rings setup while processing wmi_init command. Not doing this causes connected stations getting disconnected and not able to connect back. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath11k/core.c')
-rw-r--r--drivers/net/wireless/ath/ath11k/core.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
index c9c9e4b5ef6b..5cdc9b2aee51 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -10,6 +10,7 @@
#include "ahb.h"
#include "core.h"
#include "dp_tx.h"
+#include "dp_rx.h"
#include "debug.h"
unsigned int ath11k_debug_mask;
@@ -325,6 +326,7 @@ static void ath11k_core_stop(struct ath11k_base *ab)
ath11k_qmi_firmware_stop(ab);
ath11k_ahb_stop(ab);
ath11k_wmi_detach(ab);
+ ath11k_dp_pdev_reo_cleanup(ab);
/* De-Init of components as needed */
}
@@ -476,28 +478,38 @@ static int ath11k_core_start(struct ath11k_base *ab,
goto err_hif_stop;
}
+ ath11k_dp_pdev_pre_alloc(ab);
+
+ ret = ath11k_dp_pdev_reo_setup(ab);
+ if (ret) {
+ ath11k_err(ab, "failed to initialize reo destination rings: %d\n", ret);
+ goto err_mac_destroy;
+ }
+
ret = ath11k_wmi_cmd_init(ab);
if (ret) {
ath11k_err(ab, "failed to send wmi init cmd: %d\n", ret);
- goto err_mac_destroy;
+ goto err_reo_cleanup;
}
ret = ath11k_wmi_wait_for_unified_ready(ab);
if (ret) {
ath11k_err(ab, "failed to receive wmi unified ready event: %d\n",
ret);
- goto err_mac_destroy;
+ goto err_reo_cleanup;
}
ret = ath11k_dp_tx_htt_h2t_ver_req_msg(ab);
if (ret) {
ath11k_err(ab, "failed to send htt version request message: %d\n",
ret);
- goto err_mac_destroy;
+ goto err_reo_cleanup;
}
return 0;
+err_reo_cleanup:
+ ath11k_dp_pdev_reo_cleanup(ab);
err_mac_destroy:
ath11k_mac_destroy(ab);
err_hif_stop:
@@ -561,6 +573,7 @@ static int ath11k_core_reconfigure_on_crash(struct ath11k_base *ab)
ath11k_dp_pdev_free(ab);
ath11k_ahb_stop(ab);
ath11k_wmi_detach(ab);
+ ath11k_dp_pdev_reo_cleanup(ab);
mutex_unlock(&ab->core_lock);
ath11k_dp_free(ab);