Re: [PATCH v3] mmc: core: apply NO_CMD23 quirk to some specific cards

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

 



On 9 December 2017 at 23:47, Christoph Fritz <chf.fritz@xxxxxxxxxxxxxx> wrote:
> To get an usdhc Apacer and some ATP SD cards work reliable, CMD23 needs
> to be disabled.  This has been tested on i.MX6 (sdhci-esdhc) and rk3288
> (dw_mmc-rockchip).
>
> Without this patch on i.MX6 (sdhci-esdhc):
>
>  $ dd if=/dev/urandom of=/mnt/test bs=1M count=10 conv=fsync
>
>     | <mmc0: starting CMD23 arg 00000400 flags 00000015>
>     | mmc0: starting CMD25 arg 00a71f00 flags 000000b5
>     | mmc0:     blksz 512 blocks 1024 flags 00000100 tsac 3000 ms nsac 0
>     | mmc0:     CMD12 arg 00000000 flags 0000049d
>     | sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
>     | mmc0: Timeout waiting for hardware interrupt.
>
> Without this patch on rk3288 (dw_mmc-rockchip):
>
>     | mmc1: Card stuck in programming state! mmcblk1 card_busy_detect
>     | dwmmc_rockchip ff0c0000.dwmmc: Busy; trying anyway
>     | mmc_host mmc1: Bus speed (slot 0) = 400000Hz (slot req 400000Hz,
>     | actual 400000HZ div = 0)
>     | mmc1: card never left busy state
>     | mmc1: tried to reset card, got error -110
>     | blk_update_request: I/O error, dev mmcblk1, sector 139778
>     | Buffer I/O error on dev mmcblk1p1, logical block 131586, lost async
>     | page write
>
> Signed-off-by: Christoph Fritz <chf.fritz@xxxxxxxxxxxxxx>

Thanks, applied for fixes and added a stable tag (4.14+, since the
patch didn't apply to earlier versions).

If/when Shawn find some time to re-spin his series, adding support for
ACMD23 [1], we may be able to revert this change. Let's see.

However, using the quirks as a fix for stable is certainly a good approach.

Kind regards
Uffe

> ---
> Changes since v1:
>  - s/CMD32/CMD23
> Changes since v2:
>  - add an Apacer card
>  - adapt comment
>
>  drivers/mmc/core/card.h   | 2 ++
>  drivers/mmc/core/quirks.h | 8 ++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h
> index f06cd91..79a5b98 100644
> --- a/drivers/mmc/core/card.h
> +++ b/drivers/mmc/core/card.h
> @@ -75,9 +75,11 @@ struct mmc_fixup {
>  #define EXT_CSD_REV_ANY (-1u)
>
>  #define CID_MANFID_SANDISK      0x2
> +#define CID_MANFID_ATP          0x9
>  #define CID_MANFID_TOSHIBA      0x11
>  #define CID_MANFID_MICRON       0x13
>  #define CID_MANFID_SAMSUNG      0x15
> +#define CID_MANFID_APACER       0x27
>  #define CID_MANFID_KINGSTON     0x70
>  #define CID_MANFID_HYNIX       0x90
>
> diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
> index 9107f0b..d4ff9d8 100644
> --- a/drivers/mmc/core/quirks.h
> +++ b/drivers/mmc/core/quirks.h
> @@ -53,6 +53,14 @@ static const struct mmc_fixup mmc_blk_fixups[] = {
>                   MMC_QUIRK_BLK_NO_CMD23),
>
>         /*
> +        * Some SD cards lockup while using CMD23 multiblock transfers.
> +        */
> +       MMC_FIXUP("AF SD", CID_MANFID_ATP, CID_OEMID_ANY, add_quirk_sd,
> +                 MMC_QUIRK_BLK_NO_CMD23),
> +       MMC_FIXUP("APUSD", CID_MANFID_APACER, 0x5048, add_quirk_sd,
> +                 MMC_QUIRK_BLK_NO_CMD23),
> +
> +       /*
>          * Some MMC cards need longer data read timeout than indicated in CSD.
>          */
>         MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
> --
> 2.1.4
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

  Powered by Linux