[PATCH RFT v2 0/3] mmc: tmio: honor busy timeouts properly

Wolfram Sang
2020-11-20T15:07:07Z

(I fixed the typo in patch 1 and retested again. Sorry for the noise!)

TMIO has a HW busy timeout detection which was always running but the
driver did not handle it yet in a proper way. This series fixes that.

Patch 1 sets max_busy_timeout, so the MMC core will not use R1B when it
is beyond the maximum HW timeout. Patch 2 adds proper handling of the
timeout interrupt. After ensuring both, we can finally enable the
WAIT_WHILE_BUSY capability to save the polling.

This was tested using my Renesas Salvator-XS (R-Car M3-N) and Lager
(R-Car H2). However, more advanced testing from the BSP team and/or
Shimoda-san would be much appreciated.

The branch is based on mmc/next plus one patch "[PATCH RFT v2] mmc: tmio: Fix
command error processing". A branch is available here:

git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/sdhi/busy_timeout

Yamada-san: I enabled setting max_busy_timeout for Uniphier as well
because I am quite sure this HW supports it and it will fix timeout
issues with long erase timeouts. I did not enable WAIT_WHILE_BUSY
because this is "only" an improvement and not a fix. I think opt-in
after some testing is good for that case.

I think all patches are 5.11 material to get enough testing. Patch 1
is IMHO stable material, nonetheless. I am open for discussions, of
course.

Looking forward to comments, reviews, tags...

Thanks and happy hacking,

Wolfram

Masaharu Hayakawa (1):
mmc: tmio: Add data timeout error detection

Wolfram Sang (2):
mmc: tmio: set max_busy_timeout
mmc: renesas_sdhi: enable WAIT_WHILE_BUSY

drivers/mmc/host/renesas_sdhi_core.c | 3 ++
drivers/mmc/host/renesas_sdhi_internal_dmac.c | 4 +--
drivers/mmc/host/renesas_sdhi_sys_dmac.c | 7 ++--
drivers/mmc/host/tmio_mmc.h | 8 +++--
drivers/mmc/host/tmio_mmc_core.c | 32 +++++++++++++++----
drivers/mmc/host/uniphier-sd.c | 1 +
include/linux/mfd/tmio.h | 7 +++-
7 files changed, 48 insertions(+), 14 deletions(-)

--
2.28.0