• D
    mmc: dw_mmc: Fix the CTO timeout calculation · 4c2357f5
    Douglas Anderson 提交于
    In the commit 03de1921 ("mmc: dw_mmc: introduce timer for broken
    command transfer over scheme") we tried to calculate the expected
    hardware command timeout value.  Unfortunately that calculation isn't
    quite correct in all cases.  It used "bus_hz" but, as far as I can
    tell, it's supposed to use the card clock.  Let's account for the div
    value, which is documented as 2x the value stored in the register, or
    1 if the register is 0.
    
    NOTE: It's not expected that this will actually fix anything important
    since the 10 ms margin added by the function will pretty much dwarf
    any calculations.  The card clock should be 100 kHz at minimum and:
      1000 ms/s * (255 * 2) / 100000 Hz.
    Gives us 5.1 ms.
    
    ...so really the point of this patch is just to make the code more
    "correct" in case anyone ever tries to remove the 10 ms buffer.
    
    Fixes: 03de1921 ("mmc: dw_mmc: introduce timer for broken command transfer over scheme")
    Tested-by: NEmil Renner Berthing <kernel@esmil.dk>
    Reviewed-by: NShawn Lin <shawn.lin@rock-chips.com>
    Signed-off-by: NDouglas Anderson <dianders@chromium.org>
    Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
    4c2357f5
dw_mmc.c 85.7 KB