This patch adds the logic in the DPAA2 QDMA packet enqueue API

Fixes: 4d9a3f2a0159 ("raw/dpaa2_qdma: support RBP mode")
Cc: sta...@dpdk.org

Signed-off-by: Nipun Gupta <nipun.gu...@nxp.com>
Acked-by: Hemant Agrawal <hemant.agra...@nxp.com>
---
 drivers/raw/dpaa2_qdma/dpaa2_qdma.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/raw/dpaa2_qdma/dpaa2_qdma.c 
b/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
index a391913b0..af678273d 100644
--- a/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
+++ b/drivers/raw/dpaa2_qdma/dpaa2_qdma.c
@@ -541,13 +541,21 @@ dpdmai_dev_enqueue_multi(struct dpaa2_dpdmai_dev 
*dpdmai_dev,
                }
 
                /* Enqueue the packet to the QBMAN */
-               uint32_t enqueue_loop = 0;
+               uint32_t enqueue_loop = 0, retry_count = 0;
                while (enqueue_loop < loop) {
-                       enqueue_loop += qbman_swp_enqueue_multiple(swp,
+                       ret = qbman_swp_enqueue_multiple(swp,
                                                &eqdesc,
                                                &fd[enqueue_loop],
                                                NULL,
                                                loop - enqueue_loop);
+                       if (unlikely(ret < 0)) {
+                               retry_count++;
+                               if (retry_count > DPAA2_MAX_TX_RETRY_COUNT)
+                                       return num_tx - (loop - enqueue_loop);
+                       } else {
+                               enqueue_loop += ret;
+                               retry_count = 0;
+                       }
                }
                nb_jobs -= loop;
        }
-- 
2.17.1

Reply via email to