SD cards operating at UHS104 or better support SET_BLOCK_COUNT.
Signed-off-by: Andrei Warkentin <[email protected]>
---
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(-)
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 282e6ef..6573e36 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -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 &&
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 6dac89f..16a1f10 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -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;
}
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 72a9868..337a851 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -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 {
diff --git a/include/linux/mmc/sd.h b/include/linux/mmc/sd.h
index 3fd85e0..81ba37b 100644
--- a/include/linux/mmc/sd.h
+++ b/include/linux/mmc/sd.h
@@ -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
--
1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html