mmc: core: Set read only for SD cards with permanent write protect bit
commit 917a5336f2 upstream.
Some of SD cards sets permanent write protection bit in their CSD register,
due to lifespan or internal problem. To avoid unnecessary I/O write
operations, let's parse the bits in the CSD during initialization and mark
the card as read only for this case.
Signed-off-by: Seunghui Lee <sh043.lee@samsung.com>
Link: https://lore.kernel.org/r/20210222083156.19158-1-sh043.lee@samsung.com
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
140f225218
commit
886da99e8f
1 changed files with 6 additions and 0 deletions
|
|
@ -135,6 +135,9 @@ static int mmc_decode_csd(struct mmc_card *card)
|
|||
csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
|
||||
csd->erase_size <<= csd->write_blkbits - 9;
|
||||
}
|
||||
|
||||
if (UNSTUFF_BITS(resp, 13, 1))
|
||||
mmc_card_set_readonly(card);
|
||||
break;
|
||||
case 1:
|
||||
/*
|
||||
|
|
@ -169,6 +172,9 @@ static int mmc_decode_csd(struct mmc_card *card)
|
|||
csd->write_blkbits = 9;
|
||||
csd->write_partial = 0;
|
||||
csd->erase_size = 1;
|
||||
|
||||
if (UNSTUFF_BITS(resp, 13, 1))
|
||||
mmc_card_set_readonly(card);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: unrecognised CSD structure version %d\n",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue