Some R-Car Gen3 SoCs need corrections after they tuned to HS400. This series implements that. Please have a look at the patch descriptions for details. The origins were patches in the BSP from Takeshi Saito. Changes since v1: * correction is now enabled after tuning is complete not when it is initiated * rebased to new version of "fix stalled SCC series" which is a dependency for this There is a branch for testing here (with the debug patch on top): git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git renesas/sdhi/new_manual_calib-for-5.10 Current test results (little different to v1): ---------------------------------------------- An SDHI instance with a HS400 capable eMMC connected (R-Car M3-N): When preparing HS400 tuning, a calib table is found. So, (potential) old HS400 tuning gets reset and the manual adjustment gets disabled. Unlike previous series, the runtime flag is not enabled yet. kworker/1:2-139 [001] .... 4.160517: renesas_sdhi_reset_hs400_mode: ee140000.mmc: calib table ffff800010bc15f8 kworker/1:2-139 [001] .... 4.160522: renesas_sdhi_reset_hs400_mode: ee140000.mmc: adjustment disabled Lots of tuning CMDs, runtime flag still disabled: kworker/0:1-21 [000] .... 4.160630: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.160725: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.160831: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.160936: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161024: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161122: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161214: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161305: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161407: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161496: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161579: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161669: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161762: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161845: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.161927: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.162011: renesas_sdhi_fixup_request: ee140000.mmc: opcode 21, flag 0 kworker/0:1-21 [000] .... 4.162074: renesas_sdhi_fixup_request: ee140000.mmc: opcode 6, flag 0 kworker/0:1-21 [000] .... 4.162612: renesas_sdhi_fixup_request: ee140000.mmc: opcode 13, flag 0 kworker/0:1-21 [000] .... 4.162671: renesas_sdhi_fixup_request: ee140000.mmc: opcode 6, flag 0 kworker/0:1-21 [000] .... 4.162722: renesas_sdhi_fixup_request: ee140000.mmc: opcode 13, flag 0 kworker/0:1-21 [000] .... 4.162778: renesas_sdhi_fixup_request: ee140000.mmc: opcode 6, flag 0 Tuning was successful, now the runtime flag gets enabled: kworker/1:2-139 [001] .... 4.163274: renesas_sdhi_hs400_complete: ee140000.mmc: flag enabled First CMD13 after successful tuning, enable adjustment, clear runtime flag, show replacement value. The replacement value is now also around 16 which is what Shimoda-san said to be an expected value at room temerature. It used to be 31 in v1 of the series. kworker/0:1-21 [000] .... 4.163416: renesas_sdhi_fixup_request: ee140000.mmc: opcode 13, flag 1 kworker/0:1-21 [000] .... 4.163421: renesas_sdhi_fixup_request: ee140000.mmc: adjustment enabled, flag disabled kworker/0:1-21 [000] .... 4.163422: renesas_sdhi_fixup_request: code 17 replacement 18 Normal operation continues. Some switching and block reads: kworker/0:1-21 [000] .... 4.163592: renesas_sdhi_fixup_request: ee140000.mmc: opcode 6, flag 0 kworker/0:1-21 [000] .... 4.163645: renesas_sdhi_fixup_request: ee140000.mmc: opcode 13, flag 0 kworker/0:1-21 [000] .... 4.163700: renesas_sdhi_fixup_request: ee140000.mmc: opcode 6, flag 0 kworker/0:1-21 [000] .... 4.163747: renesas_sdhi_fixup_request: ee140000.mmc: opcode 13, flag 0 kworker/0:1-21 [000] .... 4.217134: renesas_sdhi_fixup_request: ee140000.mmc: opcode 17, flag 0 kworker/0:1-21 [000] .... 4.217357: renesas_sdhi_fixup_request: ee140000.mmc: opcode 17, flag 0 ... And then checksumming a large file works without performance regressions. Unlike the previous version, retunes do not happen occasionally, so the new replacement value is indeed better. So, again a lot of text but I want interested parties to verify results. Looking forward to comments, although I won't complain if this is the final version ;) Thanks and kind regards, Wolfram Wolfram Sang (2): mmc: tmio: add generic hook to fixup after a completed request mmc: renesas_sdhi: support manual calibration drivers/mmc/host/renesas_sdhi.h | 5 + drivers/mmc/host/renesas_sdhi_core.c | 152 ++++++++++++++++++++++++++- drivers/mmc/host/tmio_mmc.h | 1 + drivers/mmc/host/tmio_mmc_core.c | 3 + 4 files changed, 159 insertions(+), 2 deletions(-) -- 2.20.1