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
This commit is contained in:
Vevek Venkatesan
2021-07-08 00:31:58 +05:30
committed by Madan Koyyalamudi
parent 190ff6c23e
commit 1a98ac54d7
2 changed files with 24 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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 -