mmc: core: Enable SDUC
authorAvri Altman <avri.altman@wdc.com>
Sun, 6 Oct 2024 05:11:48 +0000 (08:11 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 14 Oct 2024 10:40:10 +0000 (12:40 +0200)
Enable SDUC if the card responded to ACMD41 with HCS & HO2T bits set.

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20241006051148.160278-11-avri.altman@wdc.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/sd.c

index 33e806a..918b86b 100644 (file)
@@ -836,8 +836,11 @@ try_again:
         * block-addressed SDHC cards.
         */
        err = mmc_send_if_cond(host, ocr);
-       if (!err)
+       if (!err) {
                ocr |= SD_OCR_CCS;
+               /* Set HO2T as well - SDUC card won't respond otherwise */
+               ocr |= SD_OCR_2T;
+       }
 
        /*
         * If the host supports one of UHS-I modes, request the card
@@ -1448,7 +1451,10 @@ retry:
        }
 
        if (!oldcard) {
-               err = mmc_sd_get_csd(card, false);
+               u32 sduc_arg = SD_OCR_CCS | SD_OCR_2T;
+               bool is_sduc = (rocr & sduc_arg) == sduc_arg;
+
+               err = mmc_sd_get_csd(card, is_sduc);
                if (err)
                        goto free_card;