From 1a98ac54d719aa48b313185e723ba5a0374a9070 Mon Sep 17 00:00:00 2001 From: Vevek Venkatesan Date: Thu, 8 Jul 2021 00:31:58 +0530 Subject: [PATCH] qcacmn: init last_desc_cleared and it should always behind tp Initialize the last_desc_cleared pointer to -1 not 0, and also fix the check it should always behind tp. Change-Id: I281e066d45a99ac99d4f3c4e0bcc3f65f14bb589 CRs-Fixed: 2987029 --- hal/wifi3.0/hal_api.h | 3 +-- hal/wifi3.0/hal_srng.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/hal/wifi3.0/hal_api.h b/hal/wifi3.0/hal_api.h index 902487a468..a02894fe90 100644 --- a/hal/wifi3.0/hal_api.h +++ b/hal/wifi3.0/hal_api.h @@ -1935,8 +1935,7 @@ void *hal_srng_src_get_next_consumed(void *hal_soc, uint32_t next_entry = (srng->last_desc_cleared + srng->entry_size) % srng->ring_size; - if (next_entry != (srng->u.src_ring.cached_tp + srng->entry_size) % - srng->ring_size) { + if (next_entry != srng->u.src_ring.cached_tp) { desc = &srng->ring_base_vaddr[next_entry]; srng->last_desc_cleared = next_entry; } diff --git a/hal/wifi3.0/hal_srng.c b/hal/wifi3.0/hal_srng.c index 8043005482..4174dc7d60 100644 --- a/hal/wifi3.0/hal_srng.c +++ b/hal/wifi3.0/hal_srng.c @@ -1853,6 +1853,27 @@ hal_srng_set_nf_thresholds(struct hal_srng *srng, } #endif +#if defined(CLEAR_SW2TCL_CONSUMED_DESC) +/** + * hal_srng_last_desc_cleared_init - Initialize SRNG last_desc_cleared ptr + * + * @srng: Source ring pointer + * + * Return: None + */ +static inline +void hal_srng_last_desc_cleared_init(struct hal_srng *srng) +{ + srng->last_desc_cleared = srng->ring_size - srng->entry_size; +} + +#else +static inline +void hal_srng_last_desc_cleared_init(struct hal_srng *srng) +{ +} +#endif /* CLEAR_SW2TCL_CONSUMED_DESC */ + /** * hal_srng_setup - Initialize HW SRNG ring. * @hal_soc: Opaque HAL SOC handle @@ -1932,6 +1953,8 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num, srng->flags |= HAL_SRNG_RING_PTR_SWAP; #endif + hal_srng_last_desc_cleared_init(srng); + if (srng->ring_dir == HAL_SRNG_SRC_RING) { srng->u.src_ring.hp = 0; srng->u.src_ring.reap_hp = srng->ring_size -