Commit e5b30aeb authored by Pierre Ossman's avatar Pierre Ossman Committed by Adrian Bunk

MMC: Always use a sector size of 512 bytes

Both MMC and SD specifications specify (although a bit unclearly in the MMC
case) that a sector size of 512 bytes must always be supported by the card.

Cards can report larger "native" size than this, and cards >= 2 GB even
must do so. Most other readers use 512 bytes even for these cards. We should
do the same to be compatible.
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
parent 540218dd
...@@ -318,52 +318,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card) ...@@ -318,52 +318,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
md->read_only = mmc_blk_readonly(card); md->read_only = mmc_blk_readonly(card);
/* /*
* Figure out a workable block size. MMC cards have: * Both SD and MMC specifications state (although a bit
* - two block sizes, one for read and one for write. * unclearly in the MMC case) that a block size of 512
* - may support partial reads and/or writes * bytes must always be supported by the card.
* (allows block sizes smaller than specified)
*/ */
md->block_bits = card->csd.read_blkbits; md->block_bits = 9;
if (card->csd.write_blkbits != card->csd.read_blkbits) {
if (card->csd.write_blkbits < card->csd.read_blkbits &&
card->csd.read_partial) {
/*
* write block size is smaller than read block
* size, but we support partial reads, so choose
* the smaller write block size.
*/
md->block_bits = card->csd.write_blkbits;
} else if (card->csd.write_blkbits > card->csd.read_blkbits &&
card->csd.write_partial) {
/*
* read block size is smaller than write block
* size, but we support partial writes. Use read
* block size.
*/
} else {
/*
* We don't support this configuration for writes.
*/
printk(KERN_ERR "%s: unable to select block size for "
"writing (rb%u wb%u rp%u wp%u)\n",
md->disk->disk_name,
1 << card->csd.read_blkbits,
1 << card->csd.write_blkbits,
card->csd.read_partial,
card->csd.write_partial);
md->read_only = 1;
}
}
/*
* Refuse to allow block sizes smaller than 512 bytes.
*/
if (md->block_bits < 9) {
printk(KERN_ERR "%s: unable to support block size %u\n",
mmc_card_id(card), 1 << md->block_bits);
ret = -EINVAL;
goto err_kfree;
}
md->disk = alloc_disk(1 << MMC_SHIFT); md->disk = alloc_disk(1 << MMC_SHIFT);
if (md->disk == NULL) { if (md->disk == NULL) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment