mmc: core: Parse the SD SCR register for support of CMD48/49 and CMD58/59
authorUlf Hansson <ulf.hansson@linaro.org>
Tue, 4 May 2021 16:12:19 +0000 (18:12 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 14 Jun 2021 11:57:36 +0000 (13:57 +0200)
In SD spec v4.x the support for CMD48/49 and CMD58/59 were introduced as
optional features. To let the card announce whether it supports the
commands, the SCR register has been extended with corresponding support
bits. Let's parse and store this information for later use.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>
Acked-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20210504161222.101536-9-ulf.hansson@linaro.org
drivers/mmc/core/sd.c
include/linux/mmc/card.h

index 2c48d650410131d9c155b47b284826af05e4bb35..de7b5f8df55033d2a1a67a1b620a4f7f9dba1b4b 100644 (file)
@@ -222,7 +222,9 @@ static int mmc_decode_scr(struct mmc_card *card)
        else
                card->erased_byte = 0x0;
 
-       if (scr->sda_spec3)
+       if (scr->sda_spec4)
+               scr->cmds = UNSTUFF_BITS(resp, 32, 4);
+       else if (scr->sda_spec3)
                scr->cmds = UNSTUFF_BITS(resp, 32, 2);
 
        /* SD Spec says: any SD Card shall set at least bits 0 and 2 */
index f9ad35dd6012a7d4841261328bd7cb3030569ebd..858fc4d11240af729e36967d513f106efc9c619b 100644 (file)
@@ -139,6 +139,8 @@ struct sd_scr {
        unsigned char           cmds;
 #define SD_SCR_CMD20_SUPPORT   (1<<0)
 #define SD_SCR_CMD23_SUPPORT   (1<<1)
+#define SD_SCR_CMD48_SUPPORT   (1<<2)
+#define SD_SCR_CMD58_SUPPORT   (1<<3)
 };
 
 struct sd_ssr {