]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mmc: sdio: Re-use negotiated OCR mask when re-sending CMD8
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 30 Apr 2020 09:16:39 +0000 (11:16 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 28 May 2020 09:21:03 +0000 (11:21 +0200)
While initializing an SDIO card in mmc_sdio_init_card(), we may need to
retry the UHS-I specific initialization, in case the first attempt fails.

This leads to resending a CMD8, but also to restart from scratch with the
so called OCR mask negotiations. This is unnecessary as we already have a
negotiated OCR mask, so let's use that instead. In this way, the behaviour
also becomes more consistent with other similar paths.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20200430091640.455-4-ulf.hansson@linaro.org
drivers/mmc/core/sdio.c

index 20eed28ea60da0294d133014ae409baf489bf494..853ac65f0485b8e2e990ec7f89ccf61b0497863e 100644 (file)
@@ -543,12 +543,12 @@ out:
        return err;
 }
 
-static void mmc_sdio_resend_if_cond(struct mmc_host *host,
+static void mmc_sdio_resend_if_cond(struct mmc_host *host, u32 ocr,
                                    struct mmc_card *card)
 {
        sdio_reset(host);
        mmc_go_idle(host);
-       mmc_send_if_cond(host, host->ocr_avail);
+       mmc_send_if_cond(host, ocr);
        mmc_remove_card(card);
 }
 
@@ -640,7 +640,7 @@ try_again:
        if (rocr & ocr & R4_18V_PRESENT) {
                err = mmc_set_uhs_voltage(host, ocr_card);
                if (err == -EAGAIN) {
-                       mmc_sdio_resend_if_cond(host, card);
+                       mmc_sdio_resend_if_cond(host, ocr_card, card);
                        retries--;
                        goto try_again;
                } else if (err) {
@@ -712,7 +712,7 @@ try_again:
         */
        err = sdio_read_cccr(card, ocr);
        if (err) {
-               mmc_sdio_resend_if_cond(host, card);
+               mmc_sdio_resend_if_cond(host, ocr_card, card);
                if (ocr & R4_18V_PRESENT) {
                        /* Retry init sequence, but without R4_18V_PRESENT. */
                        retries = 0;