diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index 8c3b39ae39..ba8d58f0d2 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -1784,6 +1784,29 @@ void hal_get_hw_hptp_generic(struct hal_soc *hal_soc, } } +#if defined(WBM_IDLE_LSB_WRITE_CONFIRM_WAR) +/** + * hal_wbm_idle_lsb_write_confirm() - Check and update WBM_IDLE_LINK ring LSB + * @srng: srng handle + * + * Return: None + */ +static void hal_wbm_idle_lsb_write_confirm(struct hal_srng *srng) +{ + if (srng->ring_id == HAL_SRNG_WBM_IDLE_LINK) { + while (SRNG_SRC_REG_READ(srng, BASE_LSB) != + ((unsigned int)srng->ring_base_paddr & 0xffffffff)) + SRNG_SRC_REG_WRITE(srng, BASE_LSB, + srng->ring_base_paddr & + 0xffffffff); + } +} +#else +static void hal_wbm_idle_lsb_write_confirm(struct hal_srng *srng) +{ +} +#endif + /** * hal_srng_src_hw_init - Private function to initialize SRNG * source ring HW @@ -1811,6 +1834,8 @@ void hal_srng_src_hw_init_generic(struct hal_soc *hal, } SRNG_SRC_REG_WRITE(srng, BASE_LSB, srng->ring_base_paddr & 0xffffffff); + hal_wbm_idle_lsb_write_confirm(srng); + reg_val = SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_BASE_ADDR_MSB), ((uint64_t)(srng->ring_base_paddr) >> 32)) | SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_SIZE),