SDHI (with SCC) has a mechanism to select an optimal TAP even if all were considered good during the tuning process. This series implements support for it. Before that, some refactoring of 'best TAP selection' is done to avoid code duplication and get more understandable code. This work is based on BSP patches by Masaharu Hayakawa and Takeshi Saito. It is built on top of mmc/next with two more patches added which will be applied separately: "mmc: renesas_sdhi: simplify execute_tuning" "mmc: renesas_sdhi: Use BITS_PER_LONG helper" For convenience, a branch is here: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/sdhi/new_manual_calib It has been tested on a Renesas Salvator-XS board (R-Car M3-N). There were no regressions detected. HS400 could be tuned the same way, and checksumming large files still works. Note that I couldn't test the 'all TAPs are good' case without hacking the code. So, maybe the BSP team has a setup where this happens without tweaking? This is why the series is marked as 'RFT' still. And while this series is useful by itself, it is also the last prerequisite to implement some 'bad tap avoidance' on top which is what we are originally aiming for. Note about backporting: The super useful iterator bitmap_for_each_set_region() is only available since v5.6. If you want that before, you need to backport the needed bits of e837dfde15a4 ("bitmap: genericize percpu bitmap region iterators"), too. Looking forward to comments, Wolfram Wolfram Sang (3): mmc: renesas_sdhi: refactor calculation of best TAP mmc: renesas_sdhi: clarify handling of selecting TAPs mmc: renesas_sdhi: improve TAP selection if all TAPs are good drivers/mmc/host/renesas_sdhi.h | 2 + drivers/mmc/host/renesas_sdhi_core.c | 64 ++++++++++++++-------------- 2 files changed, 34 insertions(+), 32 deletions(-) -- 2.20.1