diff --git a/hal/wifi3.0/hal_rx.c b/hal/wifi3.0/hal_rx.c index c982b346d07d..cf27b47665d2 100644 --- a/hal/wifi3.0/hal_rx.c +++ b/hal/wifi3.0/hal_rx.c @@ -243,13 +243,23 @@ void hal_reo_setup(void *hal_soc, struct hal_reo_params *reo_params) { struct hal_soc *soc = (struct hal_soc *)hal_soc; + uint32_t reg_val; - HAL_REG_WRITE(soc, HWIO_REO_R0_GENERAL_ENABLE_ADDR( - SEQ_WCSS_UMAC_REO_REG_OFFSET), - HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, + reg_val = HAL_REG_READ(soc, HWIO_REO_R0_GENERAL_ENABLE_ADDR( + SEQ_WCSS_UMAC_REO_REG_OFFSET)); + + reg_val &= ~(HWIO_REO_R0_GENERAL_ENABLE_FRAGMENT_DEST_RING_BMSK | + HWIO_REO_R0_GENERAL_ENABLE_AGING_LIST_ENABLE_BMSK | + HWIO_REO_R0_GENERAL_ENABLE_AGING_FLUSH_ENABLE_BMSK); + + reg_val |= HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, FRAGMENT_DEST_RING, reo_params->frag_dst_ring) | HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, AGING_LIST_ENABLE, 1) | - HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, AGING_FLUSH_ENABLE, 1)); + HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, AGING_FLUSH_ENABLE, 1); + + HAL_REG_WRITE(soc, HWIO_REO_R0_GENERAL_ENABLE_ADDR( + SEQ_WCSS_UMAC_REO_REG_OFFSET), reg_val); + /* Other ring enable bits and REO_ENABLE will be set by FW */ /* TODO: Setup destination ring mapping if enabled */