diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8adf6860ea34..2d5272c4cf93 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -564,7 +564,8 @@ static int dp_srng_setup(struct dp_soc *soc, struct dp_srng *srng, * monitor buffer rings. * TODO: See if this is required for any other ring */ - if ((ring_type == RXDMA_BUF) || (ring_type == RXDMA_MONITOR_BUF)) { + if ((ring_type == RXDMA_BUF) || (ring_type == RXDMA_MONITOR_BUF) || + (ring_type == RXDMA_MONITOR_STATUS)) { /* TODO: Setting low threshold to 1/8th of ring size * see if this needs to be configurable */ @@ -914,6 +915,9 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc, irq_id_map[num_irq++] = ppdu_end_interrupts_mac1 - wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j); + irq_id_map[num_irq++] = + rxdma2host_monitor_status_ring_mac1 - + wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j); } if (rx_wbm_rel_ring_mask & (1 << j)) @@ -1423,7 +1427,7 @@ static void dp_hw_link_desc_pool_cleanup(struct dp_soc *soc) #define RXDMA_MONITOR_BUF_RING_SIZE 4096 #define RXDMA_MONITOR_DST_RING_SIZE 2048 #define RXDMA_MONITOR_STATUS_RING_SIZE 1024 -#define RXDMA_MONITOR_DESC_RING_SIZE 2048 +#define RXDMA_MONITOR_DESC_RING_SIZE 4096 #define RXDMA_ERR_DST_RING_SIZE 1024 /* diff --git a/dp/wifi3.0/dp_rx_mon_dest.c b/dp/wifi3.0/dp_rx_mon_dest.c index db541a0ba2a5..7e29ded2ed92 100644 --- a/dp/wifi3.0/dp_rx_mon_dest.c +++ b/dp/wifi3.0/dp_rx_mon_dest.c @@ -294,7 +294,11 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, hal_rx_mon_next_link_desc_get(rx_msdu_link_desc, &buf_info, &p_buf_addr_info); - dp_rx_mon_link_desc_return(dp_pdev, p_last_buf_addr_info); + if (dp_rx_mon_link_desc_return(dp_pdev, p_last_buf_addr_info) + != QDF_STATUS_SUCCESS) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "dp_rx_mon_link_desc_return failed\n"); + } p_last_buf_addr_info = p_buf_addr_info; } while (buf_info.paddr && msdu_cnt); diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index 4b7574077f54..3a941bc52582 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -452,11 +452,16 @@ dp_rx_mon_status_srng_process(struct dp_soc *soc, uint32_t mac_id, status = hal_get_rx_status_done(status_buf); if (status != QDF_STATUS_SUCCESS) { + uint32_t hp, tp; + hal_api_get_tphp(hal_soc, mon_status_srng, + &tp, &hp); QDF_TRACE(QDF_MODULE_ID_DP, - QDF_TRACE_LEVEL_WARN, - "[%s][%d] status not done", - __func__, __LINE__); - break; + QDF_TRACE_LEVEL_ERROR, + "[%s][%d] status not done - hp:%u, tp:%u", + __func__, __LINE__, hp, tp); + /* WAR for missing status: Skip status entry */ + hal_srng_src_get_next(hal_soc, mon_status_srng); + continue; } qdf_nbuf_set_pktlen(status_nbuf, RX_BUFFER_SIZE); @@ -501,8 +506,7 @@ dp_rx_mon_status_srng_process(struct dp_soc *soc, uint32_t mac_id, hal_rxdma_buff_addr_info_set(rxdma_mon_status_ring_entry, paddr, rx_desc->cookie, HAL_RX_BUF_RBM_SW3_BM); - rxdma_mon_status_ring_entry = - hal_srng_src_get_next(hal_soc, mon_status_srng); + hal_srng_src_get_next(hal_soc, mon_status_srng); work_done++; } done: