[v1,6/9] net/octeon_ep: fix DMA incompletion

Message ID 20230404141855.1025625-7-sedara@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers
Series extend octeon ep driver functionality |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Sathesh B Edara April 4, 2023, 2:18 p.m. UTC
  This patch fixes the DMA incompletion
during packet reads.

Signed-off-by: Sathesh Edara <sedara@marvell.com>
---
 drivers/net/octeon_ep/otx_ep_common.h | 8 ++++++++
 drivers/net/octeon_ep/otx_ep_rxtx.c   | 4 ++++
 2 files changed, 12 insertions(+)
  

Patch

diff --git a/drivers/net/octeon_ep/otx_ep_common.h b/drivers/net/octeon_ep/otx_ep_common.h
index 76528ed49d..1d9da5954e 100644
--- a/drivers/net/octeon_ep/otx_ep_common.h
+++ b/drivers/net/octeon_ep/otx_ep_common.h
@@ -345,6 +345,14 @@  struct otx_ep_droq {
 	 */
 	void *pkts_sent_reg;
 
+	/** Fix for DMA incompletion during pkt reads.
+	 * This variable is used to initiate a sent_reg_read
+	 * that completes pending dma
+	 * this variable is used as lvalue so compiler cannot optimize
+	 * the reads.
+	 */
+	uint32_t sent_reg_val;
+
 	/* Statistics for this DROQ. */
 	struct otx_ep_droq_stats stats;
 
diff --git a/drivers/net/octeon_ep/otx_ep_rxtx.c b/drivers/net/octeon_ep/otx_ep_rxtx.c
index c4153bd583..ca968f6fe7 100644
--- a/drivers/net/octeon_ep/otx_ep_rxtx.c
+++ b/drivers/net/octeon_ep/otx_ep_rxtx.c
@@ -917,6 +917,10 @@  otx_ep_droq_read_packet(struct otx_ep_device *otx_ep,
 		struct rte_mbuf *first_buf = NULL;
 		struct rte_mbuf *last_buf = NULL;
 
+		/* csr read helps to flush pending dma */
+		droq->sent_reg_val = rte_read32(droq->pkts_sent_reg);
+		rte_rmb();
+
 		while (pkt_len < total_pkt_len) {
 			int cpy_len = 0;