On Tue, Jul 17, 2018 at 04:52:15PM +0200, Niklas Söderlund wrote:
> When tuning each tap is issued CMD19 twice and the result of both runs
> recorded in host->taps. If the result is different between the two runs
> the wrong sampling clock position was selected. Fix this by merging the
> two runs and only keep the result for each tap if it was good in both
> sets.
> 
> Signed-off-by: Niklas Söderlund <[email protected]>

Reviewed-by: Simon Horman <[email protected]>

> 
> ---
> 
> * Changes since v2
> - Rewrote the change to use a less clumsy loop.  The patch is now
>   completely changed from Hayakawa-sans version and therefor I have also
>   claimed authorship.
> - Fixed spelling in comment as suggested by Geert.
> 
> * Changes since v1
> - Updated commit message after discussion with Wolfram.
> - Expanded comment in code to better explain why the results are merged.
> ---
>  drivers/mmc/host/renesas_sdhi_core.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/mmc/host/renesas_sdhi_core.c 
> b/drivers/mmc/host/renesas_sdhi_core.c
> index 384ae6cfa289e22c..777e32b0e410e850 100644
> --- a/drivers/mmc/host/renesas_sdhi_core.c
> +++ b/drivers/mmc/host/renesas_sdhi_core.c
> @@ -384,6 +384,18 @@ static int renesas_sdhi_select_tuning(struct 
> tmio_mmc_host *host)
>       /* Clear SCC_RVSREQ */
>       sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSREQ, 0);
>  
> +     /*
> +      * When tuning CMD19 is issued twice for each tap, merge the
> +      * result requiring the tap to be good in both runs before
> +      * considering it for tuning selection.
> +      */
> +     for (i = 0; i < host->tap_num * 2; i++) {
> +             int offset = host->tap_num * (i < host->tap_num ? 1 : -1);
> +
> +             if (!test_bit(i, host->taps))
> +                     clear_bit(i + offset, host->taps);
> +     }
> +
>       /*
>        * Find the longest consecutive run of successful probes.  If that
>        * is more than SH_MOBILE_SDHI_MAX_TAP probes long then use the
> -- 
> 2.18.0
> 

Reply via email to