qcacmn: Check Tx halt during umac reset

1. Check Tx halt during umac reset and avoid halt if set already.
2. Perform SRNG disable only in case of umac reset

Change-Id: Id364a6460a64e83002b5c96e08031ad2a0bc8fd7
CRs-Fixed: 3459427
这个提交包含在:
syed touqeer pasha
2023-04-06 22:53:56 +05:30
提交者 Madan Koyyalamudi
父节点 499696eab5
当前提交 5b0980f461
修改 10 个文件,包含 64 行新增20 行删除

查看文件

@@ -1711,6 +1711,22 @@ void *hal_srng_setup_idx(void *hal_soc, int ring_type, int ring_num, int mac_id,
}
if (!(ring_config->lmac_ring)) {
/*
* UMAC reset has idle check enabled.
* During UMAC reset Tx ring halt is set
* by Wi-Fi FW during pre-reset stage,
* avoid Tx ring halt again.
*/
if (idle_check && idx) {
if (!hal->ops->hal_tx_ring_halt_get(hal_hdl)) {
qdf_print("\nTx ring halt not set:Ring(%d, %d)",
ring_type, ring_num);
qdf_assert_always(0);
}
hal_srng_hw_init(hal, srng, idle_check, idx);
goto ce_setup;
}
if (idx) {
hal->ops->hal_tx_ring_halt_set(hal_hdl);
do {
@@ -1723,7 +1739,7 @@ void *hal_srng_setup_idx(void *hal_soc, int ring_type, int ring_num, int mac_id,
hal->ops->hal_tx_ring_halt_reset(hal_hdl);
}
ce_setup:
if (ring_type == CE_DST) {
srng->u.dst_ring.max_buffer_length = ring_params->max_buffer_length;
hal_ce_dst_setup(hal, srng, ring_num);
@@ -1769,12 +1785,14 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num,
}
qdf_export_symbol(hal_srng_setup);
void hal_srng_cleanup(void *hal_soc, hal_ring_handle_t hal_ring_hdl)
void hal_srng_cleanup(void *hal_soc, hal_ring_handle_t hal_ring_hdl,
bool umac_reset_inprogress)
{
struct hal_srng *srng = (struct hal_srng *)hal_ring_hdl;
SRNG_LOCK_DESTROY(&srng->lock);
srng->initialized = 0;
hal_srng_hw_disable(hal_soc, srng);
if (umac_reset_inprogress)
hal_srng_hw_disable(hal_soc, srng);
}
qdf_export_symbol(hal_srng_cleanup);