On Sun, 5 Nov 2023 at 11:29, Avri Altman <avri.altman@xxxxxxx> wrote: > > 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. Are you really sure about that? The postmarket-os products are being used in all kinds of different deployments, for example. > > 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. Right, but I assume the quirk is working as expected for these old Sandisk eMMCs, no? > > Signed-off-by: Avri Altman <avri.altman@xxxxxxx> Kind regards Uffe > --- > 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 >