From: Harman Kalra <hka...@marvell.com>

An errata exists whereby, in certain cases NIX may use an
incorrect QINT_IDX for SQ interrupts. As a result, the
interrupt may not be delivered to software, or may not be
associated with the correct SQ.
When NIX uses an incorrect QINT_IDX :
1. NIX_LF_QINT(0..63)_CNT[COUNT] will be incremented for
incorrect QINT.
2. NIX_LF_QINT(0..63)_INT[INTR] will be set for incorrect
QINT.

Signed-off-by: Harman Kalra <hka...@marvell.com>
---
 drivers/common/cnxk/roc_nix_queue.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/common/cnxk/roc_nix_queue.c 
b/drivers/common/cnxk/roc_nix_queue.c
index c8c8401..4455fc1 100644
--- a/drivers/common/cnxk/roc_nix_queue.c
+++ b/drivers/common/cnxk/roc_nix_queue.c
@@ -680,7 +680,11 @@ sq_cn9k_init(struct nix *nix, struct roc_nix_sq *sq, 
uint32_t rr_quantum,
        aq->sq.sq_int_ena |= BIT(NIX_SQINT_MNQ_ERR);
 
        /* Many to one reduction */
-       aq->sq.qint_idx = sq->qid % nix->qints;
+       /* Assigning QINT 0 to all the SQs, an errata exists where NIXTX can
+        * send incorrect QINT_IDX when reporting queue interrupt (QINT). This
+        * might result in software missing the interrupt.
+        */
+       aq->sq.qint_idx = 0;
 }
 
 static int
@@ -779,8 +783,11 @@ sq_init(struct nix *nix, struct roc_nix_sq *sq, uint32_t 
rr_quantum,
        aq->sq.sq_int_ena |= BIT(NIX_SQINT_SEND_ERR);
        aq->sq.sq_int_ena |= BIT(NIX_SQINT_MNQ_ERR);
 
-       /* Many to one reduction */
-       aq->sq.qint_idx = sq->qid % nix->qints;
+       /* Assigning QINT 0 to all the SQs, an errata exists where NIXTX can
+        * send incorrect QINT_IDX when reporting queue interrupt (QINT). This
+        * might result in software missing the interrupt.
+        */
+       aq->sq.qint_idx = 0;
 }
 
 static int
-- 
2.8.4

Reply via email to