[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: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
d773d72551
commit
6fe9febb8a
|
@ -319,52 +319,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
|
|||
md->read_only = mmc_blk_readonly(card);
|
||||
|
||||
/*
|
||||
* Figure out a workable block size. MMC cards have:
|
||||
* - two block sizes, one for read and one for write.
|
||||
* - may support partial reads and/or writes
|
||||
* (allows block sizes smaller than specified)
|
||||
* Both SD and MMC specifications state (although a bit
|
||||
* unclearly in the MMC case) that a block size of 512
|
||||
* bytes must always be supported by the card.
|
||||
*/
|
||||
md->block_bits = card->csd.read_blkbits;
|
||||
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",
|
||||
mmc_card_id(card),
|
||||
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->block_bits = 9;
|
||||
|
||||
md->disk = alloc_disk(1 << MMC_SHIFT);
|
||||
if (md->disk == NULL) {
|
||||
|
|
Loading…
Reference in New Issue