mmc: dw_mmc: Fix the CTO timeout calculation
authorDouglas Anderson <dianders@chromium.org>
Thu, 12 Oct 2017 20:11:15 +0000 (13:11 -0700)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 30 Oct 2017 11:14:52 +0000 (12:14 +0100)
commit4c2357f57dd5a3ecb4ce09f6a6cb394a1a8873b2
treee49c6dce1687512566137ec62d394e358aee2a77
parent0363b12d3311eaf1355d4b9272a51dd852ea2fc1
mmc: dw_mmc: Fix the CTO timeout calculation

In the commit 03de19212ea3 ("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: 03de19212ea3 ("mmc: dw_mmc: introduce timer for broken command transfer over scheme")
Tested-by: Emil Renner Berthing <kernel@esmil.dk>
Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/dw_mmc.c