]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Oct 2022 12:52:18 +0000 (14:52 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Oct 2022 12:52:18 +0000 (14:52 +0200)
added patches:
mmc-core-add-sd-card-quirk-for-broken-discard.patch

queue-5.10/mmc-core-add-sd-card-quirk-for-broken-discard.patch [new file with mode: 0644]
queue-5.10/series

diff --git a/queue-5.10/mmc-core-add-sd-card-quirk-for-broken-discard.patch b/queue-5.10/mmc-core-add-sd-card-quirk-for-broken-discard.patch
new file mode 100644 (file)
index 0000000..e73d2a6
--- /dev/null
@@ -0,0 +1,98 @@
+From 07d2872bf4c864eb83d034263c155746a2fb7a3b Mon Sep 17 00:00:00 2001
+From: Avri Altman <avri.altman@wdc.com>
+Date: Wed, 28 Sep 2022 12:57:44 +0300
+Subject: mmc: core: Add SD card quirk for broken discard
+
+From: Avri Altman <avri.altman@wdc.com>
+
+commit 07d2872bf4c864eb83d034263c155746a2fb7a3b upstream.
+
+Some SD-cards from Sandisk that are SDA-6.0 compliant reports they supports
+discard, while they actually don't. This might cause mk2fs to fail while
+trying to format the card and revert it to a read-only mode.
+
+To fix this problem, let's add a card quirk (MMC_QUIRK_BROKEN_SD_DISCARD)
+to indicate that we shall fall-back to use the legacy erase command
+instead.
+
+Signed-off-by: Avri Altman <avri.altman@wdc.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20220928095744.16455-1-avri.altman@wdc.com
+[Ulf: Updated the commit message]
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mmc/core/block.c  |    7 ++++++-
+ drivers/mmc/core/card.h   |    6 ++++++
+ drivers/mmc/core/quirks.h |    6 ++++++
+ include/linux/mmc/card.h  |    1 +
+ 4 files changed, 19 insertions(+), 1 deletion(-)
+
+--- a/drivers/mmc/core/block.c
++++ b/drivers/mmc/core/block.c
+@@ -1069,6 +1069,11 @@ static void mmc_blk_issue_discard_rq(str
+       nr = blk_rq_sectors(req);
+       do {
++              unsigned int erase_arg = card->erase_arg;
++
++              if (mmc_card_broken_sd_discard(card))
++                      erase_arg = SD_ERASE_ARG;
++
+               err = 0;
+               if (card->quirks & MMC_QUIRK_INAND_CMD38) {
+                       err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+@@ -1079,7 +1084,7 @@ static void mmc_blk_issue_discard_rq(str
+                                        card->ext_csd.generic_cmd6_time);
+               }
+               if (!err)
+-                      err = mmc_erase(card, from, nr, card->erase_arg);
++                      err = mmc_erase(card, from, nr, erase_arg);
+       } while (err == -EIO && !mmc_blk_reset(md, card->host, type));
+       if (err)
+               status = BLK_STS_IOERR;
+--- a/drivers/mmc/core/card.h
++++ b/drivers/mmc/core/card.h
+@@ -70,6 +70,7 @@ struct mmc_fixup {
+ #define EXT_CSD_REV_ANY (-1u)
+ #define CID_MANFID_SANDISK      0x2
++#define CID_MANFID_SANDISK_SD   0x3
+ #define CID_MANFID_ATP          0x9
+ #define CID_MANFID_TOSHIBA      0x11
+ #define CID_MANFID_MICRON       0x13
+@@ -222,4 +223,9 @@ static inline int mmc_card_broken_hpi(co
+       return c->quirks & MMC_QUIRK_BROKEN_HPI;
+ }
++static inline int mmc_card_broken_sd_discard(const struct mmc_card *c)
++{
++      return c->quirks & MMC_QUIRK_BROKEN_SD_DISCARD;
++}
++
+ #endif
+--- a/drivers/mmc/core/quirks.h
++++ b/drivers/mmc/core/quirks.h
+@@ -99,6 +99,12 @@ static const struct mmc_fixup __maybe_un
+       MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc,
+                 MMC_QUIRK_TRIM_BROKEN),
++      /*
++       * Some SD cards reports discard support while they don't
++       */
++      MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
++                MMC_QUIRK_BROKEN_SD_DISCARD),
++
+       END_FIXUP
+ };
+--- a/include/linux/mmc/card.h
++++ b/include/linux/mmc/card.h
+@@ -270,6 +270,7 @@ struct mmc_card {
+ #define MMC_QUIRK_BROKEN_IRQ_POLLING  (1<<11) /* Polling SDIO_CCCR_INTx could create a fake interrupt */
+ #define MMC_QUIRK_TRIM_BROKEN (1<<12)         /* Skip trim */
+ #define MMC_QUIRK_BROKEN_HPI  (1<<13)         /* Disable broken HPI support */
++#define MMC_QUIRK_BROKEN_SD_DISCARD   (1<<14) /* Disable broken SD discard support */
+       bool                    reenable_cmdq;  /* Re-enable Command Queue */
index fe1aa8894248aa068ffc6c3e50cd633ce057ee6e..3875a63f4bee1da42c6c0559b6c7d7a50604c272 100644 (file)
@@ -74,3 +74,4 @@ hv_netvsc-fix-race-between-vf-offering-and-vf-association-message-from-host.patc
 acpi-video-force-backlight-native-for-more-tongfang-devices.patch
 x86-kconfig-drop-check-for-mabi-ms-for-config_efi_stub.patch
 makefile.debug-re-enable-debug-info-for-.s-files.patch
+mmc-core-add-sd-card-quirk-for-broken-discard.patch