Commit fa1e3191 authored by Ulf Hansson's avatar Ulf Hansson

mmc: sdio: Re-use negotiated OCR mask when re-sending CMD8

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: default avatarUlf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20200430091640.455-4-ulf.hansson@linaro.org
parent a94a59f4
...@@ -543,12 +543,12 @@ static int mmc_sdio_init_uhs_card(struct mmc_card *card) ...@@ -543,12 +543,12 @@ static int mmc_sdio_init_uhs_card(struct mmc_card *card)
return err; 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) struct mmc_card *card)
{ {
sdio_reset(host); sdio_reset(host);
mmc_go_idle(host); mmc_go_idle(host);
mmc_send_if_cond(host, host->ocr_avail); mmc_send_if_cond(host, ocr);
mmc_remove_card(card); mmc_remove_card(card);
} }
...@@ -640,7 +640,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, ...@@ -640,7 +640,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
if (rocr & ocr & R4_18V_PRESENT) { if (rocr & ocr & R4_18V_PRESENT) {
err = mmc_set_uhs_voltage(host, ocr_card); err = mmc_set_uhs_voltage(host, ocr_card);
if (err == -EAGAIN) { if (err == -EAGAIN) {
mmc_sdio_resend_if_cond(host, card); mmc_sdio_resend_if_cond(host, ocr_card, card);
retries--; retries--;
goto try_again; goto try_again;
} else if (err) { } else if (err) {
...@@ -712,7 +712,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, ...@@ -712,7 +712,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
*/ */
err = sdio_read_cccr(card, ocr); err = sdio_read_cccr(card, ocr);
if (err) { if (err) {
mmc_sdio_resend_if_cond(host, card); mmc_sdio_resend_if_cond(host, ocr_card, card);
if (ocr & R4_18V_PRESENT) { if (ocr & R4_18V_PRESENT) {
/* Retry init sequence, but without R4_18V_PRESENT. */ /* Retry init sequence, but without R4_18V_PRESENT. */
retries = 0; retries = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment