qcacmn: Flush REO descriptors entirely
To avoid race conditions where BA window size can change, always flush entire REO descriptor from HW cache irrespective of current BA window size. Change-Id: I608996722e7dc2dc6acfd145b8c190b58ce09822 CRs-Fixed: 2251811
This commit is contained in:
@@ -76,6 +76,7 @@
|
||||
|
||||
#define HAL_SRNG_REO_EXCEPTION HAL_SRNG_REO2SW1
|
||||
#define HAL_SRNG_REO_ALTERNATE_SELECT 0x7
|
||||
#define HAL_NON_QOS_TID 16
|
||||
|
||||
/* calculate the register address offset from bar0 of shadow register x */
|
||||
#ifdef QCA_WIFI_QCA6390
|
||||
@@ -320,13 +321,24 @@ static inline void hal_set_link_desc_addr(void *desc, uint32_t cookie,
|
||||
*
|
||||
* @hal_soc: Opaque HAL SOC handle
|
||||
* @ba_window_size: BlockAck window size
|
||||
* @tid: TID number
|
||||
*
|
||||
*/
|
||||
static inline uint32_t hal_get_reo_qdesc_size(void *hal_soc,
|
||||
uint32_t ba_window_size)
|
||||
uint32_t ba_window_size, int tid)
|
||||
{
|
||||
if (ba_window_size <= 1)
|
||||
return sizeof(struct rx_reo_queue);
|
||||
/* Return descriptor size corresponding to window size of 2 since
|
||||
* we set ba_window_size to 2 while setting up REO descriptors as
|
||||
* a WAR to get 2k jump exception aggregates are received without
|
||||
* a BA session.
|
||||
*/
|
||||
if (ba_window_size <= 1) {
|
||||
if (tid != HAL_NON_QOS_TID)
|
||||
return sizeof(struct rx_reo_queue) +
|
||||
sizeof(struct rx_reo_queue_ext);
|
||||
else
|
||||
return sizeof(struct rx_reo_queue);
|
||||
}
|
||||
|
||||
if (ba_window_size <= 105)
|
||||
return sizeof(struct rx_reo_queue) +
|
||||
|
@@ -112,7 +112,12 @@ void hal_reo_qdesc_setup(void *hal_soc, int tid, uint32_t ba_window_size,
|
||||
|
||||
if (ba_window_size < 1)
|
||||
ba_window_size = 1;
|
||||
|
||||
/* WAR to get 2k exception in Non BA case.
|
||||
* Setting window size to 2 to get 2k jump exception
|
||||
* when we receive aggregates in Non BA case
|
||||
*/
|
||||
if ((ba_window_size == 1) && (tid != HAL_NON_QOS_TID))
|
||||
ba_window_size++;
|
||||
/* Set RTY bit for non-BA case. Duplicate detection is currently not
|
||||
* done by HW in non-BA case if RTY bit is not set.
|
||||
* TODO: This is a temporary War and should be removed once HW fix is
|
||||
|
Reference in New Issue
Block a user