mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 15:49:17 -04:00
Merge "qcacmn: WAR for RXDMA packet drop issue"
This commit is contained in:
commit
6e5563fc0f
2 changed files with 26 additions and 6 deletions
|
|
@ -956,6 +956,8 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||
uint32_t msdu_cnt;
|
||||
uint32_t i;
|
||||
bool mpdu_err;
|
||||
uint8_t push_reason;
|
||||
uint8_t rxdma_error_code = 0;
|
||||
|
||||
msdu = 0;
|
||||
|
||||
|
|
@ -964,6 +966,13 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||
hal_rx_reo_ent_buf_paddr_get(rxdma_dst_ring_desc, &buf_info,
|
||||
&p_last_buf_addr_info, &msdu_cnt, &mpdu_err);
|
||||
|
||||
push_reason =
|
||||
hal_rx_reo_ent_rxdma_push_reason_get(rxdma_dst_ring_desc);
|
||||
if (push_reason == HAL_RX_WBM_RXDMA_PSH_RSN_ERROR) {
|
||||
rxdma_error_code =
|
||||
hal_rx_reo_ent_rxdma_error_code_get(rxdma_dst_ring_desc);
|
||||
}
|
||||
|
||||
do {
|
||||
rx_msdu_link_desc =
|
||||
dp_rx_cookie_2_link_desc_va(soc, &buf_info);
|
||||
|
|
@ -977,11 +986,11 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||
|
||||
msdu_cnt -= num_msdus;
|
||||
|
||||
for (i = 0; i < num_msdus; i++) {
|
||||
struct dp_rx_desc *rx_desc =
|
||||
dp_rx_cookie_2_va_rxdma_buf(soc,
|
||||
msdu_list.sw_cookie[i]);
|
||||
|
||||
if (msdu_list.sw_cookie[0] != HAL_RX_COOKIE_SPECIAL) {
|
||||
for (i = 0; i < num_msdus; i++) {
|
||||
struct dp_rx_desc *rx_desc =
|
||||
dp_rx_cookie_2_va_rxdma_buf(soc,
|
||||
msdu_list.sw_cookie[i]);
|
||||
qdf_assert(rx_desc);
|
||||
msdu = rx_desc->nbuf;
|
||||
|
||||
|
|
@ -997,6 +1006,9 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||
rx_bufs_used++;
|
||||
dp_rx_add_to_free_desc_list(head,
|
||||
tail, rx_desc);
|
||||
}
|
||||
} else {
|
||||
rxdma_error_code = HAL_RXDMA_ERR_WAR;
|
||||
}
|
||||
|
||||
hal_rx_mon_next_link_desc_get(rx_msdu_link_desc, &buf_info,
|
||||
|
|
@ -1007,6 +1019,8 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
|
|||
|
||||
} while (buf_info.paddr && msdu_cnt);
|
||||
|
||||
DP_STATS_INC(soc, rx.err.rxdma_error[rxdma_error_code], 1);
|
||||
|
||||
return rx_bufs_used;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1658,6 +1658,10 @@ struct hal_buf_info {
|
|||
uint32_t sw_cookie;
|
||||
};
|
||||
|
||||
/* This special cookie value will be used to indicate FW allocated buffers
|
||||
* received through RXDMA2SW ring for RXDMA WARs */
|
||||
#define HAL_RX_COOKIE_SPECIAL 0x1fffff
|
||||
|
||||
/**
|
||||
* hal_rx_msdu_link_desc_get(): API to get the MSDU information
|
||||
* from the MSDU link descriptor
|
||||
|
|
@ -1820,6 +1824,7 @@ enum hal_reo_error_code {
|
|||
* @ HAL_RXDMA_ERR_DA_TIMEOUT : Destination Address search timeout
|
||||
* @ HAL_RXDMA_ERR_FLOW_TIMEOUT : Flow Search Timeout
|
||||
* @ HAL_RXDMA_ERR_FLUSH_REQUEST : RxDMA FIFO Flush request
|
||||
* @ HAL_RXDMA_ERR_WAR : RxDMA WAR dummy errors
|
||||
*/
|
||||
enum hal_rxdma_error_code {
|
||||
HAL_RXDMA_ERR_OVERFLOW = 0,
|
||||
|
|
@ -1835,7 +1840,8 @@ enum hal_rxdma_error_code {
|
|||
HAL_RXDMA_ERR_SA_TIMEOUT,
|
||||
HAL_RXDMA_ERR_DA_TIMEOUT,
|
||||
HAL_RXDMA_ERR_FLOW_TIMEOUT,
|
||||
HAL_RXDMA_ERR_FLUSH_REQUEST
|
||||
HAL_RXDMA_ERR_FLUSH_REQUEST,
|
||||
HAL_RXDMA_ERR_WAR = 31
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue