[PATCH v2 2/2] mmc: sdhci-esdhc-imx: Add HS400 support for iMX7ULP
Igor Opaniuk
igor.opaniuk at foundries.io
Wed Sep 8 16:42:40 CEST 2021
Hi Oleksandr,
On Tue, Aug 31, 2021 at 8:49 PM Oleksandr Suvorov
<oleksandr.suvorov at foundries.io> wrote:
>
> Import HS400 support for iMX7ULP B0 from the Linux kernel:
>
> 2eaf5a533afd ("mmc: sdhci-esdhc-imx: Add HS400 support for iMX7ULP")
>
> According to IC suggest, need to clear the STROBE_DLL_CTRL_RESET
> before any setting of STROBE_DLL_CTRL register.
>
> USDHC has register bits(bit[27~20] of register STROBE_DLL_CTRL)
> for slave sel value. If this register bits value is 0, it needs
> 256 ref_clk cycles to update slave sel value. IC suggest to set
> bit[27~20] to 0x4, it only need 4 ref_clk cycle to update slave
> sel value. This will short the lock time of slave.
>
> i.MX7ULP B0 will need more time to lock the REF and SLV, so change
> to add 5us delay.
>
> Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov at foundries.io>
> Reviewed-by: Fabio Estevam <festevam at gmail.com>
> ---
>
> Changes in v2:
> - fixed Series-notes record.
> - added Reviewed-by records.
>
> drivers/mmc/fsl_esdhc_imx.c | 11 ++++++++---
> include/fsl_esdhc_imx.h | 1 +
> 2 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mmc/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c
> index 6c8f77f9ee..569f099d9b 100644
> --- a/drivers/mmc/fsl_esdhc_imx.c
> +++ b/drivers/mmc/fsl_esdhc_imx.c
> @@ -727,17 +727,21 @@ static void esdhc_set_strobe_dll(struct mmc *mmc)
>
> if (priv->clock > ESDHC_STROBE_DLL_CLK_FREQ) {
> esdhc_write32(®s->strobe_dllctrl, ESDHC_STROBE_DLL_CTRL_RESET);
> + /* clear the reset bit on strobe dll before any setting */
> + esdhc_write32(®s->strobe_dllctrl, 0);
> +
minor:
additional blank line isn't needed.
>
> /*
> * enable strobe dll ctrl and adjust the delay target
> * for the uSDHC loopback read clock
> */
> val = ESDHC_STROBE_DLL_CTRL_ENABLE |
> + ESDHC_STROBE_DLL_CTRL_SLV_UPDATE_INT_DEFAULT |
> (priv->strobe_dll_delay_target <<
> ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_SHIFT);
> esdhc_write32(®s->strobe_dllctrl, val);
> - /* wait 1us to make sure strobe dll status register stable */
> - mdelay(1);
> + /* wait 5us to make sure strobe dll status register stable */
> + mdelay(5);
> val = esdhc_read32(®s->strobe_dllstat);
> if (!(val & ESDHC_STROBE_DLL_STS_REF_LOCK))
> pr_warn("HS400 strobe DLL status REF not lock!\n");
> @@ -1708,7 +1712,8 @@ static struct esdhc_soc_data usdhc_imx7d_data = {
>
> static struct esdhc_soc_data usdhc_imx7ulp_data = {
> .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING
> - | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200,
> + | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200
> + | ESDHC_FLAG_HS400,
> };
>
> static struct esdhc_soc_data usdhc_imx8qm_data = {
> diff --git a/include/fsl_esdhc_imx.h b/include/fsl_esdhc_imx.h
> index 45ed635a77..12e9163382 100644
> --- a/include/fsl_esdhc_imx.h
> +++ b/include/fsl_esdhc_imx.h
> @@ -194,6 +194,7 @@
> #define ESDHC_STROBE_DLL_CTRL_RESET BIT(1)
> #define ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_DEFAULT 0x7
> #define ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_SHIFT 3
> +#define ESDHC_STROBE_DLL_CTRL_SLV_UPDATE_INT_DEFAULT (4 << 20)
>
> #define ESDHC_STROBE_DLL_STATUS 0x74
> #define ESDHC_STROBE_DLL_STS_REF_LOCK BIT(1)
> --
> 2.31.1
>
Reviewed-by: Igor Opaniuk <igor.opaniuk at foundries.io>
--
Best regards - Freundliche Grüsse - Meilleures salutations
Igor Opaniuk
Embedded Software Engineer
T: +380 938364067
E: igor.opaniuk at foundries.io
W: www.foundries.io
More information about the U-Boot
mailing list