static void bnxt_dev_recover(void *arg);
 static void bnxt_free_error_recovery_info(struct bnxt *bp);
 static void bnxt_free_rep_info(struct bnxt *bp);
+static int bnxt_check_fw_ready(struct bnxt *bp);
 
 int is_bnxt_in_error(struct bnxt *bp)
 {
 
        /* clear fatal flag so that re-init happens */
        bp->flags &= ~BNXT_FLAG_FATAL_ERROR;
+
+       rc = bnxt_check_fw_ready(bp);
+       if (rc)
+               return rc;
+
        rc = bnxt_init_resources(bp, true);
 
        bp->flags &= ~BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE;
 
 static int bnxt_check_fw_ready(struct bnxt *bp)
 {
-       int timeout = bp->fw_reset_max_msecs;
+       int timeout = bp->fw_reset_max_msecs ? : BNXT_MAX_FW_RESET_TIMEOUT;
        int rc = 0;
 
        do {