Re: [PATCH] mmc: dw_mmc: fix errors to use card read/write threshold for HS400 mode

From: Ulf Hansson
Date: Mon Jul 02 2018 - 10:37:50 EST


On 29 June 2018 at 15:59, Huanlin.Ke <chgokhl@xxxxxxxxx> wrote:
> The card write threshold is applicable for HS400 mode only, so it should
> return back except HS400 timing mode.
>
> The card read threshold is also required for HS400 mode as the host
> controller incorrectly samples the data if the card clock stops within
> a block transfer.
>
> Signed-off-by: Huanlin.Ke <kehuanlin@xxxxxxxxxxxx>
> Signed-off-by: zhangbo_a <zhangbo_a@xxxxxxxxxx>

Thanks for your patch!

I have just applied an earlier version of the patch, posted by Qing
Xia from Hisilicon.
https://patchwork.kernel.org/patch/10434913/

If it works for you as well, I can add your tested by tags for it.

Also, can you perhaps point me to a commit which introduced the problem?

Kind regards
Uffe

> ---
> drivers/mmc/host/dw_mmc.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 623f4d2..d4e6983 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -1065,7 +1065,7 @@ static void dw_mci_ctrl_thld(struct dw_mci *host, struct mmc_data *data)
> * It's used when HS400 mode is enabled.
> */
> if (data->flags & MMC_DATA_WRITE &&
> - !(host->timing != MMC_TIMING_MMC_HS400))
> + (host->timing != MMC_TIMING_MMC_HS400))
> return;
>
> if (data->flags & MMC_DATA_WRITE)
> @@ -1074,6 +1074,7 @@ static void dw_mci_ctrl_thld(struct dw_mci *host, struct mmc_data *data)
> enable = SDMMC_CARD_RD_THR_EN;
>
> if (host->timing != MMC_TIMING_MMC_HS200 &&
> + host->timing != MMC_TIMING_MMC_HS400 &&
> host->timing != MMC_TIMING_UHS_SDR104)
> goto disable;
>
> --
> 2.7.4
>