I40E_FLEX_54_MASK | I40E_FLEX_55_MASK | \
                                 I40E_FLEX_56_MASK | I40E_FLEX_57_MASK)
 
+#define I40E_QINT_TQCTL_VAL(qp, vector, nextq_type) \
+       (I40E_QINT_TQCTL_CAUSE_ENA_MASK | \
+       (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT) | \
+       ((vector) << I40E_QINT_TQCTL_MSIX_INDX_SHIFT) | \
+       ((qp) << I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT) | \
+       (I40E_QUEUE_TYPE_##nextq_type << I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT))
+
+#define I40E_QINT_RQCTL_VAL(qp, vector, nextq_type) \
+       (I40E_QINT_RQCTL_CAUSE_ENA_MASK | \
+       (I40E_RX_ITR << I40E_QINT_RQCTL_ITR_INDX_SHIFT) | \
+       ((vector) << I40E_QINT_RQCTL_MSIX_INDX_SHIFT) | \
+       ((qp) << I40E_QINT_RQCTL_NEXTQ_INDX_SHIFT) | \
+       (I40E_QUEUE_TYPE_##nextq_type << I40E_QINT_RQCTL_NEXTQ_TYPE_SHIFT))
+
 struct i40e_flex_pit {
        struct list_head list;
        u16 src_offset;
 
                wr32(hw, I40E_PFINT_RATEN(vector - 1),
                     i40e_intrl_usec_to_reg(vsi->int_rate_limit));
 
-               /* Linked list for the queuepairs assigned to this vector */
+               /* begin of linked list for RX queue assigned to this vector */
                wr32(hw, I40E_PFINT_LNKLSTN(vector - 1), qp);
                for (q = 0; q < q_vector->num_ringpairs; q++) {
                        u32 nextqp = has_xdp ? qp + vsi->alloc_queue_pairs : qp;
                        wr32(hw, I40E_QINT_RQCTL(qp), val);
 
                        if (has_xdp) {
+                               /* TX queue with next queue set to TX */
                                val = I40E_QINT_TQCTL_CAUSE_ENA_MASK |
                                      (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT) |
                                      (vector << I40E_QINT_TQCTL_MSIX_INDX_SHIFT) |
 
                                wr32(hw, I40E_QINT_TQCTL(nextqp), val);
                        }
-
+                       /* TX queue with next RX or end of linked list */
                        val = I40E_QINT_TQCTL_CAUSE_ENA_MASK |
                              (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT) |
                              (vector << I40E_QINT_TQCTL_MSIX_INDX_SHIFT) |
        struct i40e_q_vector *q_vector = vsi->q_vectors[0];
        struct i40e_pf *pf = vsi->back;
        struct i40e_hw *hw = &pf->hw;
-       u32 val;
 
        /* set the ITR configuration */
        q_vector->rx.next_update = jiffies + 1;
        /* FIRSTQ_INDX = 0, FIRSTQ_TYPE = 0 (rx) */
        wr32(hw, I40E_PFINT_LNKLST0, 0);
 
-       /* Associate the queue pair to the vector and enable the queue int */
-       val = I40E_QINT_RQCTL_CAUSE_ENA_MASK                   |
-             (I40E_RX_ITR << I40E_QINT_RQCTL_ITR_INDX_SHIFT)  |
-             (nextqp      << I40E_QINT_RQCTL_NEXTQ_INDX_SHIFT)|
-             (I40E_QUEUE_TYPE_TX << I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT);
-
-       wr32(hw, I40E_QINT_RQCTL(0), val);
+       /* Associate the queue pair to the vector and enable the queue
+        * interrupt RX queue in linked list with next queue set to TX
+        */
+       wr32(hw, I40E_QINT_RQCTL(0), I40E_QINT_RQCTL_VAL(nextqp, 0, TX));
 
        if (i40e_enabled_xdp_vsi(vsi)) {
-               val = I40E_QINT_TQCTL_CAUSE_ENA_MASK                 |
-                     (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT)|
-                     (I40E_QUEUE_TYPE_TX
-                      << I40E_QINT_TQCTL_NEXTQ_TYPE_SHIFT);
-
-               wr32(hw, I40E_QINT_TQCTL(nextqp), val);
+               /* TX queue in linked list with next queue set to TX */
+               wr32(hw, I40E_QINT_TQCTL(nextqp),
+                    I40E_QINT_TQCTL_VAL(nextqp, 0, TX));
        }
 
-       val = I40E_QINT_TQCTL_CAUSE_ENA_MASK                  |
-             (I40E_TX_ITR << I40E_QINT_TQCTL_ITR_INDX_SHIFT) |
-             (I40E_QUEUE_END_OF_LIST << I40E_QINT_TQCTL_NEXTQ_INDX_SHIFT);
-
-       wr32(hw, I40E_QINT_TQCTL(0), val);
+       /* last TX queue so the next RX queue doesn't matter */
+       wr32(hw, I40E_QINT_TQCTL(0),
+            I40E_QINT_TQCTL_VAL(I40E_QUEUE_END_OF_LIST, 0, RX));
        i40e_flush(hw);
 }