Gentle ping. Thanks, Avri > -----Original Message----- > From: Avri Altman <avri.altman@xxxxxxx> > Sent: Sunday, November 5, 2023 12:30 PM > To: Ulf Hansson <ulf.hansson@xxxxxxxxxx>; linux-mmc@xxxxxxxxxxxxxxx > Cc: Dominique Martinet <asmadeus@xxxxxxxxxxxxx>; Avri Altman > <Avri.Altman@xxxxxxx> > Subject: [PATCH] mmc: core: Remove obsolete quirk for Sandisk cards > > This quirk applies to an old set of Sandisk cards that are no longer being sold > for many years now, and it is vanishingly unlikely that will ever meet a V6.7 > kernel. > > I came across those old cards when I tried to decide what to do with Sandisk > cards that their quirk is designated by OEM id. For many years we read > wrong oemid, reading 16 bits instead of 8. Fixing it however, turned out to be > impractical, and it's better that each eMMC vendor will handle its own > devices. > > Signed-off-by: Avri Altman <avri.altman@xxxxxxx> > --- > drivers/mmc/core/block.c | 32 +------------------------------- > drivers/mmc/core/quirks.h | 12 ------------ include/linux/mmc/card.h | 1 - > 3 files changed, 1 insertion(+), 44 deletions(-) > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index > 152dfe593c43..6aa68ac1129e 100644 > --- a/drivers/mmc/core/block.c > +++ b/drivers/mmc/core/block.c > @@ -1122,17 +1122,7 @@ static void mmc_blk_issue_erase_rq(struct > mmc_queue *mq, struct request *req, > nr = blk_rq_sectors(req); > > do { > - err = 0; > - if (card->quirks & MMC_QUIRK_INAND_CMD38) { > - err = mmc_switch(card, > EXT_CSD_CMD_SET_NORMAL, > - INAND_CMD38_ARG_EXT_CSD, > - erase_arg == MMC_TRIM_ARG ? > - INAND_CMD38_ARG_TRIM : > - INAND_CMD38_ARG_ERASE, > - card->ext_csd.generic_cmd6_time); > - } > - if (!err) > - err = mmc_erase(card, from, nr, 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; > @@ -1182,17 +1172,6 @@ static void mmc_blk_issue_secdiscard_rq(struct > mmc_queue *mq, > arg = MMC_SECURE_ERASE_ARG; > > retry: > - if (card->quirks & MMC_QUIRK_INAND_CMD38) { > - err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, > - INAND_CMD38_ARG_EXT_CSD, > - arg == MMC_SECURE_TRIM1_ARG ? > - INAND_CMD38_ARG_SECTRIM1 : > - INAND_CMD38_ARG_SECERASE, > - card->ext_csd.generic_cmd6_time); > - if (err) > - goto out_retry; > - } > - > err = mmc_erase(card, from, nr, arg); > if (err == -EIO) > goto out_retry; > @@ -1202,15 +1181,6 @@ static void mmc_blk_issue_secdiscard_rq(struct > mmc_queue *mq, > } > > if (arg == MMC_SECURE_TRIM1_ARG) { > - if (card->quirks & MMC_QUIRK_INAND_CMD38) { > - err = mmc_switch(card, > EXT_CSD_CMD_SET_NORMAL, > - INAND_CMD38_ARG_EXT_CSD, > - INAND_CMD38_ARG_SECTRIM2, > - card->ext_csd.generic_cmd6_time); > - if (err) > - goto out_retry; > - } > - > err = mmc_erase(card, from, nr, > MMC_SECURE_TRIM2_ARG); > if (err == -EIO) > goto out_retry; > diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h index > cca71867bc4a..028f55f07ba3 100644 > --- a/drivers/mmc/core/quirks.h > +++ b/drivers/mmc/core/quirks.h > @@ -22,18 +22,6 @@ static const struct mmc_fixup __maybe_unused > mmc_blk_fixups[] = { #define INAND_CMD38_ARG_SECERASE 0x80 #define > INAND_CMD38_ARG_SECTRIM1 0x81 #define > INAND_CMD38_ARG_SECTRIM2 0x88 > - /* CMD38 argument is passed through EXT_CSD[113] */ > - MMC_FIXUP("SEM02G", CID_MANFID_SANDISK, 0x100, add_quirk, > - MMC_QUIRK_INAND_CMD38), > - MMC_FIXUP("SEM04G", CID_MANFID_SANDISK, 0x100, add_quirk, > - MMC_QUIRK_INAND_CMD38), > - MMC_FIXUP("SEM08G", CID_MANFID_SANDISK, 0x100, add_quirk, > - MMC_QUIRK_INAND_CMD38), > - MMC_FIXUP("SEM16G", CID_MANFID_SANDISK, 0x100, add_quirk, > - MMC_QUIRK_INAND_CMD38), > - MMC_FIXUP("SEM32G", CID_MANFID_SANDISK, 0x100, add_quirk, > - MMC_QUIRK_INAND_CMD38), > - > /* > * Some MMC cards experience performance degradation with > CMD23 > * instead of CMD12-bounded multiblock transfers. For now we'll diff > --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index > 7b12eebc5586..edb27f3c6489 100644 > --- a/include/linux/mmc/card.h > +++ b/include/linux/mmc/card.h > @@ -284,7 +284,6 @@ struct mmc_card { > /* (missing CIA registers) */ > #define MMC_QUIRK_NONSTD_FUNC_IF (1<<4) /* SDIO card > has nonstd function interfaces */ > #define MMC_QUIRK_DISABLE_CD (1<<5) /* disconnect > CD/DAT[3] resistor */ > -#define MMC_QUIRK_INAND_CMD38 (1<<6) /* iNAND devices > have broken CMD38 */ > #define MMC_QUIRK_BLK_NO_CMD23 (1<<7) /* Avoid > CMD23 for regular multiblock */ > #define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8) /* Avoid > sending 512 bytes in */ > /* byte mode */ > -- > 2.42.0