• Douglas Anderson's avatar
    mmc: dw_mmc: Fix occasional hang after tuning on eMMC · ba2d139b
    Douglas Anderson authored
    In commit 46d17952 ("mmc: dw_mmc: Wait for data transfer after
    response errors.") we fixed a tuning-induced hang that I saw when
    stress testing tuning on certain SD cards.  I won't re-hash that whole
    commit, but the summary is that as a normal part of tuning you need to
    deal with transfer errors and there were cases where these transfer
    errors was putting my system into a bad state causing all future
    transfers to fail.  That commit fixed handling of the transfer errors
    for me.
    
    In downstream Chrome OS my fix landed and had the same behavior for
    all SD/MMC commands.  However, it looks like when the commit landed
    upstream we limited it to only SD tuning commands.  Presumably this
    was to try to get around problems that Alim Akhtar reported on exynos
    [1].
    
    Unfortunately while stress testing reboots (and suspend/resume) on
    some rk3288-based Chromebooks I found the same problem on the eMMC on
    some of my Chromebooks (the ones with Hynix eMMC).  Since the eMMC
    tuning command is different (MMC_SEND_TUNING_BLOCK_HS200
    vs. MMC_SEND_TUNING_BLOCK) we were basically getting back into the
    same situation.
    
    I'm hoping that whatever problems exynos was having in the past are
    somehow magically fixed now and we can make the behavior the same for
    all commands.
    
    [1] https://lkml.kernel.org/r/CAGOxZ53WfNbaMe0_AM0qBqU47kAfgmPBVZC8K8Y-_J3mDMqW4A@mail.gmail.com
    
    Fixes: 46d17952 ("mmc: dw_mmc: Wait for data transfer after response errors.")
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Alim Akhtar <alim.akhtar@gmail.com>
    Cc: Enric Balletbo i Serra <enric.balletbo@collabora.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    ba2d139b
dw_mmc.c 89.1 KB