OSDN Git Service

mmc: core: Set read only for SD cards with permanent write protect bit
authorSeunghui Lee <sh043.lee@samsung.com>
Mon, 22 Feb 2021 08:31:56 +0000 (17:31 +0900)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 30 Mar 2021 09:41:59 +0000 (11:41 +0200)
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>
drivers/mmc/core/sd.c

index 6fa51a6..2c48d65 100644 (file)
@@ -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",