@@ -846,9 +846,12 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
blk_queue_logical_block_size(md->queue.queue, 512);
set_capacity(md->disk, size);
- if (mmc_host_cmd23(card->host) &&
- mmc_card_mmc(card))
- md->flags |= MMC_BLK_CMD23;
+ if (mmc_host_cmd23(card->host)) {
+ if (mmc_card_mmc(card) ||
+ (mmc_card_sd(card) &&
+ card->scr.cmds & SCR_CMDS_CMD23))
+ md->flags |= MMC_BLK_CMD23;
+ }
if (mmc_card_mmc(card) &&
md->flags & MMC_BLK_CMD23 &&
@@ -195,6 +195,7 @@ static int mmc_decode_scr(struct mmc_card *card)
else
card->erased_byte = 0x0;
+ scr->cmds = UNSTUFF_BITS(resp, 32, 2);
return 0;
}
@@ -70,6 +70,7 @@ struct sd_scr {
unsigned char bus_widths;
#define SD_SCR_BUS_WIDTH_1 (1<<0)
#define SD_SCR_BUS_WIDTH_4 (1<<2)
+ unsigned char cmds;
};
struct sd_ssr {
@@ -60,6 +60,7 @@
#define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */
#define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */
#define SCR_SPEC_VER_2 2 /* Implements system specification 2.00 */
+#define SCR_CMDS_CMD23 (1 << 1) /* Supports CMD23 */
/*
* SD bus widths
SD cards operating at UHS104 or better support SET_BLOCK_COUNT. Signed-off-by: Andrei Warkentin <andreiw@motorola.com> --- drivers/mmc/card/block.c | 9 ++++++--- drivers/mmc/core/sd.c | 1 + include/linux/mmc/card.h | 1 + include/linux/mmc/sd.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-)