|
@@ -1681,7 +1681,7 @@ dp_rx_mon_status_srng_process(struct dp_soc *soc, uint32_t mac_id,
|
|
|
* BUFFER_ADDR_INFO STRUCT
|
|
|
*/
|
|
|
while (qdf_likely((rxdma_mon_status_ring_entry =
|
|
|
- hal_srng_src_peek(hal_soc, mon_status_srng))
|
|
|
+ hal_srng_src_peek_n_get_next(hal_soc, mon_status_srng))
|
|
|
&& quota--)) {
|
|
|
uint32_t rx_buf_cookie;
|
|
|
qdf_nbuf_t status_nbuf;
|
|
@@ -1722,9 +1722,22 @@ dp_rx_mon_status_srng_process(struct dp_soc *soc, uint32_t mac_id,
|
|
|
dp_info_rl("tlv tag status error hp:%u, tp:%u",
|
|
|
hp, tp);
|
|
|
pdev->rx_mon_stats.tlv_tag_status_err++;
|
|
|
- /* WAR for missing status: Skip status entry */
|
|
|
- hal_srng_src_get_next(hal_soc, mon_status_srng);
|
|
|
- continue;
|
|
|
+
|
|
|
+ /* RxDMA status done bit might not be set even
|
|
|
+ * though tp is moved by HW.
|
|
|
+ * So Hold on to current entry on
|
|
|
+ * monitor status ring
|
|
|
+ */
|
|
|
+
|
|
|
+ /* If done status is missing, hold onto status
|
|
|
+ * ring until status is done for this status
|
|
|
+ * ring buffer.
|
|
|
+ * Keep HP in mon_status_ring unchanged,
|
|
|
+ * and break from here.
|
|
|
+ * Check status for same buffer for next time
|
|
|
+ * dp_rx_mon_status_srng_process
|
|
|
+ */
|
|
|
+ break;
|
|
|
}
|
|
|
qdf_nbuf_set_pktlen(status_nbuf, RX_DATA_BUFFER_SIZE);
|
|
|
|
|
@@ -1965,7 +1978,7 @@ QDF_STATUS dp_rx_mon_status_buffers_replenish(struct dp_soc *dp_soc,
|
|
|
num_req_buffers = num_entries_avail;
|
|
|
}
|
|
|
|
|
|
- while (count < num_req_buffers) {
|
|
|
+ while (count <= num_req_buffers) {
|
|
|
rx_netbuf = dp_rx_nbuf_prepare(dp_soc, dp_pdev);
|
|
|
|
|
|
/*
|
|
@@ -1984,8 +1997,9 @@ QDF_STATUS dp_rx_mon_status_buffers_replenish(struct dp_soc *dp_soc,
|
|
|
paddr = qdf_nbuf_get_frag_paddr(rx_netbuf, 0);
|
|
|
|
|
|
next = (*desc_list)->next;
|
|
|
- rxdma_ring_entry = hal_srng_src_get_next(dp_soc->hal_soc,
|
|
|
- rxdma_srng);
|
|
|
+ rxdma_ring_entry = hal_srng_src_get_cur_hp_n_move_next(
|
|
|
+ dp_soc->hal_soc,
|
|
|
+ rxdma_srng);
|
|
|
|
|
|
if (qdf_unlikely(!rxdma_ring_entry)) {
|
|
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|