cmd.flags        = MMC_RSP_R1B | MMC_CMD_AC;
        cmd.flags       &= ~MMC_RSP_CRC; /* Ignore CRC */
        cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT;
-       mmc_wait_for_cmd(host, &cmd, 0);
+       mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 
        mmc_poll_for_busy(host->card, MMC_CQE_RECOVERY_TIMEOUT, true, MMC_BUSY_IO);
 
        cmd.flags        = MMC_RSP_R1B | MMC_CMD_AC;
        cmd.flags       &= ~MMC_RSP_CRC; /* Ignore CRC */
        cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT;
-       err = mmc_wait_for_cmd(host, &cmd, 0);
+       err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
 
        host->cqe_ops->cqe_recovery_finish(host);
 
+       if (err)
+               err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
+
        mmc_retune_release(host);
 
        return err;