[U-Boot] [PATCH v3 4/6] mmc: tegra: allow disabling external clock loopback
Jaehoon Chung
jh80.chung at samsung.com
Tue Dec 27 23:25:00 CET 2016
On 12/22/2016 01:26 PM, Marcel Ziswiler wrote:
> From: Marcel Ziswiler <marcel.ziswiler at toradex.com>
>
> Introduce CONFIG_TEGRA124_MMC_DISABLE_EXT_LOOPBACK to disable the external clock
> loopback and use the internal one on SDMMC3 as per the SDMMC_VENDOR_MISC_CNTRL_0
> register's SDMMC_SPARE1 bits being set to 0xfffd according to the TRM.
>
> Signed-off-by: Marcel Ziswiler <marcel.ziswiler at toradex.com>
> Reviewed-by: Simon Glass <sjg at chromium.org>
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
>
> ---
>
> Changes in v3: None
> Changes in v2:
> - Added Simon's reviewed-by.
> - Added TODO(email) as suggested by Simon so it is clear this is
> temporary and will be moved to device tree controlled approach once
> proper kernel integration made it mainline.
>
> arch/arm/include/asm/arch-tegra/tegra_mmc.h | 2 ++
> drivers/mmc/Kconfig | 11 +++++++++++
> drivers/mmc/tegra_mmc.c | 16 ++++++++++++++++
> 3 files changed, 29 insertions(+)
>
> diff --git a/arch/arm/include/asm/arch-tegra/tegra_mmc.h b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> index 64c848a..c40599a 100644
> --- a/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> +++ b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> @@ -108,6 +108,8 @@ struct tegra_mmc {
> #define TEGRA_MMC_CLKCON_SDCLK_FREQ_SEL_SHIFT 8
> #define TEGRA_MMC_CLKCON_SDCLK_FREQ_SEL_MASK (0xff << 8)
>
> +#define TEGRA_MMC_MISCON_ENABLE_EXT_LOOPBACK (1 << 17)
> +
> #define TEGRA_MMC_SWRST_SW_RESET_FOR_ALL (1 << 0)
> #define TEGRA_MMC_SWRST_SW_RESET_FOR_CMD_LINE (1 << 1)
> #define TEGRA_MMC_SWRST_SW_RESET_FOR_DAT_LINE (1 << 2)
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
> index 18f0e97..6372876 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -116,4 +116,15 @@ config TEGRA_MMC
> help
> This selects support for SDHCI on Tegra SoCs.
>
> +config TEGRA124_MMC_DISABLE_EXT_LOOPBACK
> + bool "Disable external clock loopback"
> + depends on TEGRA_MMC && TEGRA124
> + help
> + Disable the external clock loopback and use the internal one on SDMMC3
> + as per the SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1 bits
> + being set to 0xfffd according to the TRM.
> +
> + TODO(marcel.ziswiler at toradex.com): Move to device tree controlled
> + approach once proper kernel integration made it mainline.
> +
> endmenu
> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c
> index 97b1154..839b15d 100644
> --- a/drivers/mmc/tegra_mmc.c
> +++ b/drivers/mmc/tegra_mmc.c
> @@ -511,6 +511,22 @@ static int tegra_mmc_init(struct mmc *mmc)
>
> tegra_mmc_reset(priv, mmc);
>
> +#if defined(CONFIG_TEGRA124_MMC_DISABLE_EXT_LOOPBACK)
> + /*
> + * Disable the external clock loopback and use the internal one on
> + * SDMMC3 as per the SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1
> + * bits being set to 0xfffd according to the TRM.
> + *
> + * TODO(marcel.ziswiler at toradex.com): Move to device tree controlled
> + * approach once proper kernel integration made it mainline.
> + */
> + if (priv->reg == (void *)0x700b0400) {
> + mask = readl(&priv->reg->venmiscctl);
> + mask &= ~TEGRA_MMC_MISCON_ENABLE_EXT_LOOPBACK;
> + writel(mask, &priv->reg->venmiscctl);
> + }
> +#endif
> +
> priv->version = readw(&priv->reg->hcver);
> debug("host version = %x\n", priv->version);
>
>
More information about the U-Boot
mailing list