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:
Karunakar Dasineni
2018-05-31 07:59:10 -07:00
committed by nshrivas
부모 6ba855ca40
커밋 26ebbe4492
4개의 변경된 파일32개의 추가작업 그리고 17개의 파일을 삭제

파일 보기

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