lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 072/376] mmc: meson-mx-sdio: trigger a soft reset after a timeout or CRC error
    Date
    From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

    [ Upstream commit 91995b904ec2e44b5c159ac6a5d3f154345a4de7 ]

    The vendor driver (from the 3.10 kernel) triggers a soft reset every
    time before starting a new command. While this fixes a problem where
    SDIO cards are not detected at all (because all commands simply
    timed out) this hurts SD card read performance a bit (in my tests
    between 10% to 20%).

    Trigger a soft reset after we got a CRC error or if the previous command
    timed out (just like the vendor driver from the same 3.10 kernel for the
    newer SDHC controller IP does). This fixes detection of SDIO cards and
    doesn't hurt SD card read performance at the same time.

    With this patch the initialization of an RTL8723BS SDIO card looks like
    this:
    req done (CMD52): -110: 00000000 00000000 00000000 00000000
    clock 400000Hz busmode 2 powermode 2 cs 1 Vdd 21 width 1 timing 0
    starting CMD0 arg 00000000 flags 000000c0
    req done (CMD0): 0: 00000000 00000000 00000000 00000000
    clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 1 timing 0
    starting CMD8 arg 000001aa flags 000002f5
    req done (CMD8): -110: 00000000 00000000 00000000 00000000
    starting CMD5 arg 00000000 flags 000002e1
    req done (CMD5): 0: 90ff0000 00000000 00000000 00000000
    starting CMD5 arg 00200000 flags 000002e1
    req done (CMD5): 0: 90ff0000 00000000 00000000 00000000
    starting CMD3 arg 00000000 flags 00000075
    req done (CMD3): 0: 00010000 00000000 00000000 00000000
    starting CMD7 arg 00010000 flags 00000015
    req done (CMD7): 0: 00001e00 00000000 00000000 00000000
    starting CMD52 arg 00000000 flags 00000195
    req done (CMD52): 0: 00001032 00000000 00000000 00000000
    [... more CMD52 omitted ...]
    clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 1 timing 2
    clock 50000000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 1 timing 2
    starting CMD52 arg 00000e00 flags 00000195
    req done (CMD52): 0: 00001000 00000000 00000000 00000000
    starting CMD52 arg 80000e02 flags 00000195
    req done (CMD52): 0: 00001002 00000000 00000000 00000000
    clock 50000000Hz busmode 2 powermode 2 cs 0 Vdd 21 width 4 timing 2
    starting CMD52 arg 00020000 flags 00000195
    req done (CMD52): 0: 00001007 00000000 00000000 00000000
    [... more CMD52 omitted ...]
    new high speed SDIO card at address 0001

    Fixes: ed80a13bb4c4c9 ("mmc: meson-mx-sdio: Add a driver for the Amlogic Meson8 and Meson8b SoCs")
    Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20200503222805.2668941-1-martin.blumenstingl@googlemail.com
    Tested-by: Tobias Baumann <017623705678@o2online.de>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mmc/host/meson-mx-sdio.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/mmc/host/meson-mx-sdio.c b/drivers/mmc/host/meson-mx-sdio.c
    index 2e58743d83bb..3813b544f571 100644
    --- a/drivers/mmc/host/meson-mx-sdio.c
    +++ b/drivers/mmc/host/meson-mx-sdio.c
    @@ -246,6 +246,9 @@ static void meson_mx_mmc_request_done(struct meson_mx_mmc_host *host)

    mrq = host->mrq;

    + if (host->cmd->error)
    + meson_mx_mmc_soft_reset(host);
    +
    host->mrq = NULL;
    host->cmd = NULL;

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-19 17:59    [W:4.456 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site