aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/sdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/core/sdio.c')
-rw-r--r--drivers/mmc/core/sdio.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 2273ce6b6c1a..aa0719a4dfd1 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -157,10 +157,7 @@ static int sdio_read_cccr(struct mmc_card *card, u32 ocr)
157 if (ret) 157 if (ret)
158 goto out; 158 goto out;
159 159
160 if (card->host->caps & 160 if (mmc_host_uhs(card->host)) {
161 (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
162 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
163 MMC_CAP_UHS_DDR50)) {
164 if (data & SDIO_UHS_DDR50) 161 if (data & SDIO_UHS_DDR50)
165 card->sw_caps.sd3_bus_mode 162 card->sw_caps.sd3_bus_mode
166 |= SD_MODE_UHS_DDR50; 163 |= SD_MODE_UHS_DDR50;
@@ -478,8 +475,7 @@ static int sdio_set_bus_speed_mode(struct mmc_card *card)
478 * If the host doesn't support any of the UHS-I modes, fallback on 475 * If the host doesn't support any of the UHS-I modes, fallback on
479 * default speed. 476 * default speed.
480 */ 477 */
481 if (!(card->host->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 478 if (!mmc_host_uhs(card->host))
482 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50)))
483 return 0; 479 return 0;
484 480
485 bus_speed = SDIO_SPEED_SDR12; 481 bus_speed = SDIO_SPEED_SDR12;
@@ -489,23 +485,27 @@ static int sdio_set_bus_speed_mode(struct mmc_card *card)
489 bus_speed = SDIO_SPEED_SDR104; 485 bus_speed = SDIO_SPEED_SDR104;
490 timing = MMC_TIMING_UHS_SDR104; 486 timing = MMC_TIMING_UHS_SDR104;
491 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; 487 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
488 card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
492 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && 489 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
493 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { 490 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
494 bus_speed = SDIO_SPEED_DDR50; 491 bus_speed = SDIO_SPEED_DDR50;
495 timing = MMC_TIMING_UHS_DDR50; 492 timing = MMC_TIMING_UHS_DDR50;
496 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; 493 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
494 card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
497 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | 495 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
498 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & 496 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
499 SD_MODE_UHS_SDR50)) { 497 SD_MODE_UHS_SDR50)) {
500 bus_speed = SDIO_SPEED_SDR50; 498 bus_speed = SDIO_SPEED_SDR50;
501 timing = MMC_TIMING_UHS_SDR50; 499 timing = MMC_TIMING_UHS_SDR50;
502 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; 500 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
501 card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
503 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | 502 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
504 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) && 503 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
505 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { 504 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
506 bus_speed = SDIO_SPEED_SDR25; 505 bus_speed = SDIO_SPEED_SDR25;
507 timing = MMC_TIMING_UHS_SDR25; 506 timing = MMC_TIMING_UHS_SDR25;
508 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; 507 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
508 card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
509 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | 509 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
510 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 | 510 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
511 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & 511 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
@@ -513,6 +513,7 @@ static int sdio_set_bus_speed_mode(struct mmc_card *card)
513 bus_speed = SDIO_SPEED_SDR12; 513 bus_speed = SDIO_SPEED_SDR12;
514 timing = MMC_TIMING_UHS_SDR12; 514 timing = MMC_TIMING_UHS_SDR12;
515 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; 515 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
516 card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
516 } 517 }
517 518
518 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); 519 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
@@ -583,10 +584,19 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
583{ 584{
584 struct mmc_card *card; 585 struct mmc_card *card;
585 int err; 586 int err;
587 int retries = 10;
586 588
587 BUG_ON(!host); 589 BUG_ON(!host);
588 WARN_ON(!host->claimed); 590 WARN_ON(!host->claimed);
589 591
592try_again:
593 if (!retries) {
594 pr_warning("%s: Skipping voltage switch\n",
595 mmc_hostname(host));
596 ocr &= ~R4_18V_PRESENT;
597 host->ocr &= ~R4_18V_PRESENT;
598 }
599
590 /* 600 /*
591 * Inform the card of the voltage 601 * Inform the card of the voltage
592 */ 602 */
@@ -645,14 +655,16 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
645 * systems that claim 1.8v signalling in fact do not support 655 * systems that claim 1.8v signalling in fact do not support
646 * it. 656 * it.
647 */ 657 */
648 if ((ocr & R4_18V_PRESENT) && 658 if (!powered_resume && (ocr & R4_18V_PRESENT) && mmc_host_uhs(host)) {
649 (host->caps & 659 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
650 (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 660 if (err == -EAGAIN) {
651 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | 661 sdio_reset(host);
652 MMC_CAP_UHS_DDR50))) { 662 mmc_go_idle(host);
653 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, 663 mmc_send_if_cond(host, host->ocr_avail);
654 true); 664 mmc_remove_card(card);
655 if (err) { 665 retries--;
666 goto try_again;
667 } else if (err) {
656 ocr &= ~R4_18V_PRESENT; 668 ocr &= ~R4_18V_PRESENT;
657 host->ocr &= ~R4_18V_PRESENT; 669 host->ocr &= ~R4_18V_PRESENT;
658 } 670 }
@@ -937,10 +949,12 @@ static int mmc_sdio_resume(struct mmc_host *host)
937 mmc_claim_host(host); 949 mmc_claim_host(host);
938 950
939 /* No need to reinitialize powered-resumed nonremovable cards */ 951 /* No need to reinitialize powered-resumed nonremovable cards */
940 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) 952 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) {
953 sdio_reset(host);
954 mmc_go_idle(host);
941 err = mmc_sdio_init_card(host, host->ocr, host->card, 955 err = mmc_sdio_init_card(host, host->ocr, host->card,
942 mmc_card_keep_power(host)); 956 mmc_card_keep_power(host));
943 else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { 957 } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
944 /* We may have switched to 1-bit mode during suspend */ 958 /* We may have switched to 1-bit mode during suspend */
945 err = sdio_enable_4bit_bus(host->card); 959 err = sdio_enable_4bit_bus(host->card);
946 if (err > 0) { 960 if (err > 0) {
@@ -1020,6 +1034,10 @@ static int mmc_sdio_power_restore(struct mmc_host *host)
1020 goto out; 1034 goto out;
1021 } 1035 }
1022 1036
1037 if (mmc_host_uhs(host))
1038 /* to query card if 1.8V signalling is supported */
1039 host->ocr |= R4_18V_PRESENT;
1040
1023 ret = mmc_sdio_init_card(host, host->ocr, host->card, 1041 ret = mmc_sdio_init_card(host, host->ocr, host->card,
1024 mmc_card_keep_power(host)); 1042 mmc_card_keep_power(host));
1025 if (!ret && host->sdio_irqs) 1043 if (!ret && host->sdio_irqs)
@@ -1085,6 +1103,10 @@ int mmc_attach_sdio(struct mmc_host *host)
1085 /* 1103 /*
1086 * Detect and init the card. 1104 * Detect and init the card.
1087 */ 1105 */
1106 if (mmc_host_uhs(host))
1107 /* to query card if 1.8V signalling is supported */
1108 host->ocr |= R4_18V_PRESENT;
1109
1088 err = mmc_sdio_init_card(host, host->ocr, NULL, 0); 1110 err = mmc_sdio_init_card(host, host->ocr, NULL, 0);
1089 if (err) { 1111 if (err) {
1090 if (err == -EAGAIN) { 1112 if (err == -EAGAIN) {