qcacmn: Fix batch invalidate issue in ring WRAP around case

In ring WRAP around case invalidate the descriptors which
are being reaped

Also use no_dsb invalidate API for invalidate descriptors

Change-Id: Iafa844c81a8364af31520ce5fa3e030073e7c706
CRs-Fixed: 3198373
This commit is contained in:
Chaithanya Garrepalli
2022-04-07 00:36:02 +05:30
committed by Madan Koyyalamudi
parent 15a9ac983c
commit cdbc3c0f76

View File

@@ -1674,6 +1674,7 @@ static inline void hal_srng_dst_inv_cached_descs(void *hal_soc,
struct hal_srng *srng = (struct hal_srng *)hal_ring_hdl;
uint32_t *first_desc;
uint32_t *last_desc;
uint32_t last_desc_index;
/*
* If SRNG does not have cached descriptors this
@@ -1686,20 +1687,27 @@ static inline void hal_srng_dst_inv_cached_descs(void *hal_soc,
return;
first_desc = &srng->ring_base_vaddr[srng->u.dst_ring.tp];
last_desc = &srng->ring_base_vaddr[srng->u.dst_ring.cached_hp];
last_desc_index = (srng->u.dst_ring.tp +
(entry_count * srng->entry_size)) %
srng->ring_size;
last_desc = &srng->ring_base_vaddr[last_desc_index];
if (last_desc > (uint32_t *)first_desc)
/* invalidate from tp to cached_hp */
qdf_nbuf_dma_inv_range((void *)first_desc, (void *)(last_desc));
qdf_nbuf_dma_inv_range_no_dsb((void *)first_desc,
(void *)(last_desc));
else {
/* invalidate from tp to end of the ring */
qdf_nbuf_dma_inv_range((void *)first_desc,
(void *)srng->ring_vaddr_end);
qdf_nbuf_dma_inv_range_no_dsb((void *)first_desc,
(void *)srng->ring_vaddr_end);
/* invalidate from start of ring to cached_hp */
qdf_nbuf_dma_inv_range((void *)srng->ring_base_vaddr,
(void *)last_desc);
qdf_nbuf_dma_inv_range_no_dsb((void *)srng->ring_base_vaddr,
(void *)last_desc);
}
qdf_dsb();
}
/**