common/cnxk: always use single interrupt ID with NIX
authorHarman Kalra <hkalra@marvell.com>
Fri, 21 Jan 2022 12:04:19 +0000 (17:34 +0530)
committerJerin Jacob <jerinj@marvell.com>
Sun, 23 Jan 2022 07:43:07 +0000 (08:43 +0100)
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.

Fixes: ae06070901ab ("common/cnxk: add NIX Tx queue management API")
Cc: stable@dpdk.org
Signed-off-by: Harman Kalra <hkalra@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
drivers/common/cnxk/roc_nix_queue.c

index ab57849..e8b42ed 100644 (file)
@@ -705,7 +705,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
@@ -804,8 +808,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