Re: [PATCH] mmc: core: Remove obsolete quirk for Sandisk cards

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>




[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux