t4_get_tp_version(adap, &adap->params.tp_vers);
        ret = t4_check_fw_version(adap);
        /* If firmware is too old (not supported by driver) force an update. */
-       if (ret == -EFAULT)
+       if (ret)
                state = DEV_STATE_UNINIT;
        if ((adap->flags & MASTER_PF) && state != DEV_STATE_INIT) {
                struct fw_info *fw_info;
 
  */
 int t4_check_fw_version(struct adapter *adap)
 {
-       int ret, major, minor, micro;
+       int i, ret, major, minor, micro;
        int exp_major, exp_minor, exp_micro;
        unsigned int chip_version = CHELSIO_CHIP_VERSION(adap->params.chip);
 
        ret = t4_get_fw_version(adap, &adap->params.fw_vers);
+       /* Try multiple times before returning error */
+       for (i = 0; (ret == -EBUSY || ret == -EAGAIN) && i < 3; i++)
+               ret = t4_get_fw_version(adap, &adap->params.fw_vers);
+
        if (ret)
                return ret;