wifi: ath12k: rearrange IRQ enable/disable in reset path
authorBaochen Qiang <quic_bqiang@quicinc.com>
Mon, 22 Apr 2024 12:11:44 +0000 (15:11 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Tue, 23 Apr 2024 09:27:13 +0000 (12:27 +0300)
For non-WoW suspend/resume, ath12k host powers down whole hardware
when suspend and powers up it when resume, the code path it goes
through is very like the ath12k reset logic.

In order to reuse that logic, rearrange IRQ handling in the reset
path.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240412060620.27519-2-quic_bqiang@quicinc.com
drivers/net/wireless/ath/ath12k/core.c

index 6f0d6b639b43250fb40c1e0737af923de3059a52..90e04d6028226df4ae81cc8a66701152411f6d92 100644 (file)
@@ -879,9 +879,8 @@ static int ath12k_core_reconfigure_on_crash(struct ath12k_base *ab)
        int ret;
 
        mutex_lock(&ab->core_lock);
-       ath12k_hif_irq_disable(ab);
        ath12k_dp_pdev_free(ab);
-       ath12k_hif_stop(ab);
+       ath12k_ce_cleanup_pipes(ab);
        ath12k_wmi_detach(ab);
        ath12k_dp_rx_pdev_reo_cleanup(ab);
        mutex_unlock(&ab->core_lock);
@@ -1136,6 +1135,9 @@ static void ath12k_core_reset(struct work_struct *work)
        time_left = wait_for_completion_timeout(&ab->recovery_start,
                                                ATH12K_RECOVER_START_TIMEOUT_HZ);
 
+       ath12k_hif_irq_disable(ab);
+       ath12k_hif_ce_irq_disable(ab);
+
        ath12k_hif_power_down(ab);
        ath12k_hif_power_up(ab);