bnxt_en: Enhance retry of the first message to the firmware.
Two enhancements: 1. Read the health status first before sending the first HWRM_VER_GET message to firmware instead of the other way around. This guarantees we got the accurate health status before we attempt to send the message. 2. We currently only retry sending the first HWRM_VER_GET message to the firmware if the firmware is in the process of booting. If the firmware is in error state and is doing core dump for example, the driver should also retry if the health register has the RECOVERING flag set. This flag indicates the firmware will undergo recovery soon. Modify the retry logic to retry for this case as well. Reviewed-by: Edwin Peer <edwin.peer@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bae8a00379
commit
861aae786f
@ -9530,9 +9530,10 @@ static int bnxt_try_recover_fw(struct bnxt *bp)
|
||||
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
do {
|
||||
rc = __bnxt_hwrm_ver_get(bp, true);
|
||||
sts = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG);
|
||||
if (!sts || !BNXT_FW_IS_BOOTING(sts))
|
||||
rc = __bnxt_hwrm_ver_get(bp, true);
|
||||
if (!sts || (!BNXT_FW_IS_BOOTING(sts) &&
|
||||
!BNXT_FW_IS_RECOVERING(sts)))
|
||||
break;
|
||||
retry++;
|
||||
} while (rc == -EBUSY && retry < BNXT_FW_RETRY);
|
||||
|
@ -1564,6 +1564,7 @@ struct bnxt_fw_reporter_ctx {
|
||||
#define BNXT_FW_STATUS_HEALTH_MSK 0xffff
|
||||
#define BNXT_FW_STATUS_HEALTHY 0x8000
|
||||
#define BNXT_FW_STATUS_SHUTDOWN 0x100000
|
||||
#define BNXT_FW_STATUS_RECOVERING 0x400000
|
||||
|
||||
#define BNXT_FW_IS_HEALTHY(sts) (((sts) & BNXT_FW_STATUS_HEALTH_MSK) ==\
|
||||
BNXT_FW_STATUS_HEALTHY)
|
||||
@ -1574,6 +1575,9 @@ struct bnxt_fw_reporter_ctx {
|
||||
#define BNXT_FW_IS_ERR(sts) (((sts) & BNXT_FW_STATUS_HEALTH_MSK) > \
|
||||
BNXT_FW_STATUS_HEALTHY)
|
||||
|
||||
#define BNXT_FW_IS_RECOVERING(sts) (BNXT_FW_IS_ERR(sts) && \
|
||||
((sts) & BNXT_FW_STATUS_RECOVERING))
|
||||
|
||||
#define BNXT_FW_RETRY 5
|
||||
#define BNXT_FW_IF_RETRY 10
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user