diff --git a/core/dp/txrx3.0/dp_swlm.c b/core/dp/txrx3.0/dp_swlm.c index 32c022807d7d..a874e899c301 100644 --- a/core/dp/txrx3.0/dp_swlm.c +++ b/core/dp/txrx3.0/dp_swlm.c @@ -159,13 +159,26 @@ static void dp_swlm_tcl_flush_timer(void *arg) hal_ring_handle_t hal_ring_hdl = soc->tcl_data_ring[0].hal_srng; - if (hal_srng_try_access_start(soc->hal_soc, hal_ring_hdl) < 0) { - DP_STATS_INC(swlm, tcl.timer_flush_fail, 1); - return; + if (hal_srng_try_access_start(soc->hal_soc, hal_ring_hdl) < 0) + goto fail; + + if (hif_pm_runtime_get(soc->hif_handle, RTPM_ID_DW_TX_HW_ENQUEUE)) { + hal_srng_access_end_reap(soc->hal_soc, hal_ring_hdl); + hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT); + hal_srng_inc_flush_cnt(hal_ring_hdl); + goto fail; } DP_STATS_INC(swlm, tcl.timer_flush_success, 1); hal_srng_access_end(soc->hal_soc, hal_ring_hdl); + hif_pm_runtime_put(soc->hif_handle, RTPM_ID_DW_TX_HW_ENQUEUE); + + return; + +fail: + DP_STATS_INC(swlm, tcl.timer_flush_fail, 1); + + return; } /**