qed: Skip DORQ attention handling during recovery
authorShai Malin <smalin@marvell.com>
Sun, 1 Aug 2021 10:26:38 +0000 (13:26 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 3 Aug 2021 10:45:44 +0000 (11:45 +0100)
The device recovery flow will reset the entire HW device, in that case
the DORQ HW block attention is redundant.

Signed-off-by: Ariel Elior <aelior@marvell.com>
Signed-off-by: Shai Malin <smalin@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_int.c

index 578935f..ab6d4f7 100644 (file)
@@ -464,12 +464,19 @@ static int qed_dorq_attn_int_sts(struct qed_hwfn *p_hwfn)
        u32 int_sts, first_drop_reason, details, address, all_drops_reason;
        struct qed_ptt *p_ptt = p_hwfn->p_dpc_ptt;
 
+       int_sts = qed_rd(p_hwfn, p_ptt, DORQ_REG_INT_STS);
+       if (int_sts == 0xdeadbeaf) {
+               DP_NOTICE(p_hwfn->cdev,
+                         "DORQ is being reset, skipping int_sts handler\n");
+
+               return 0;
+       }
+
        /* int_sts may be zero since all PFs were interrupted for doorbell
         * overflow but another one already handled it. Can abort here. If
         * This PF also requires overflow recovery we will be interrupted again.
         * The masked almost full indication may also be set. Ignoring.
         */
-       int_sts = qed_rd(p_hwfn, p_ptt, DORQ_REG_INT_STS);
        if (!(int_sts & ~DORQ_REG_INT_STS_DORQ_FIFO_AFULL))
                return 0;
 
@@ -528,6 +535,9 @@ static int qed_dorq_attn_int_sts(struct qed_hwfn *p_hwfn)
 
 static int qed_dorq_attn_cb(struct qed_hwfn *p_hwfn)
 {
+       if (p_hwfn->cdev->recov_in_prog)
+               return 0;
+
        p_hwfn->db_recovery_info.dorq_attn = true;
        qed_dorq_attn_overflow(p_hwfn);