scsi: qla2xxx: Add retry for exec firmware
authorQuinn Tran <qutran@marvell.com>
Mon, 10 Jan 2022 05:02:08 +0000 (21:02 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 25 Jan 2022 04:57:30 +0000 (23:57 -0500)
Per FW request, Exec FW can fail due to temporary error resulting in driver
not attaching to the adapter. Add retry of this command up to 4 retries.

Link: https://lore.kernel.org/r/20220110050218.3958-8-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_mbx.c

index 38e0f02c75e1d7243a08ded37065d1eecdcd89c8..c4bd8a16d78c12be1e8952a52adfd3470fef88c8 100644 (file)
@@ -689,7 +689,7 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr)
        mbx_cmd_t *mcp = &mc;
        u8 semaphore = 0;
 #define EXE_FW_FORCE_SEMAPHORE BIT_7
-       u8 retry = 3;
+       u8 retry = 5;
 
        ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1025,
            "Entered %s.\n", __func__);
@@ -764,6 +764,12 @@ again:
                        goto again;
                }
 
+               if (retry) {
+                       retry--;
+                       ql_dbg(ql_dbg_async, vha, 0x509d,
+                           "Exe FW retry: mb[0]=%x retry[%d]\n", mcp->mb[0], retry);
+                       goto again;
+               }
                ql_dbg(ql_dbg_mbx, vha, 0x1026,
                    "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
                vha->hw_err_cnt++;