[U-Boot] [PATCH 2/3] mx25pdk: Add esdhc support

Stefano Babic sbabic at denx.de
Thu Oct 11 09:17:46 CEST 2012


Am 11/10/2012 05:58, schrieb Fabio Estevam:
> From: Fabio Estevam <fabio.estevam at freescale.com>
> 
> mx25pdk has a SD/MMC slot connected to esdhc1.
> 
> Add support for it and allow the environment variables to be saved into SD/MMC.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
> ---

Hi Fabio,

>  board/freescale/mx25pdk/mx25pdk.c |   51 +++++++++++++++++++++++++++++++++++++
>  include/configs/mx25pdk.h         |   16 +++++++++++-
>  2 files changed, 66 insertions(+), 1 deletion(-)
> 
> diff --git a/board/freescale/mx25pdk/mx25pdk.c b/board/freescale/mx25pdk/mx25pdk.c
> index 4a8352f..e850b3e 100644
> --- a/board/freescale/mx25pdk/mx25pdk.c
> +++ b/board/freescale/mx25pdk/mx25pdk.c
> @@ -19,12 +19,23 @@
>  
>  #include <common.h>
>  #include <asm/io.h>
> +#include <asm/gpio.h>
>  #include <asm/arch/imx-regs.h>
>  #include <asm/arch/imx25-pinmux.h>
>  #include <asm/arch/sys_proto.h>
> +#include <mmc.h>
> +#include <fsl_esdhc.h>
> +
> +#define CARD_DETECT		IMX_GPIO_NR(2, 1)
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> +#ifdef CONFIG_FSL_ESDHC
> +struct fsl_esdhc_cfg esdhc_cfg[1] = {
> +	{IMX_MMC_SDHC1_BASE},
> +};
> +#endif
> +
>  int dram_init(void)
>  {
>  	/* dram_init must store complete ramsize in gd->ram_size */
> @@ -48,6 +59,46 @@ int board_init(void)
>  	return 0;
>  }
>  
> +#ifdef CONFIG_FSL_ESDHC
> +int board_mmc_getcd(struct mmc *mmc)
> +{
> +	struct iomuxc_mux_ctl *muxctl;
> +	struct iomuxc_pad_ctl *padctl;
> +	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5);
> +
> +	/*
> +	 * Set up the Card Detect pin.
> +	 *
> +	 * SD1_GPIO_CD: gpio2_1 is ALT 5 mode of pin A15
> +	 *
> +	 */
> +	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
> +	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE;
> +
> +	writel(gpio_mux_mode, &muxctl->pad_a15);
> +	writel(0x0, &padctl->pad_a15);
> +
> +	gpio_direction_input(CARD_DETECT);
> +	return !gpio_get_value(CARD_DETECT);
> +}
> +
> +int board_mmc_init(bd_t *bis)
> +{
> +	struct iomuxc_mux_ctl *muxctl;
> +	u32 sdhc1_mux_mode = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION;
> +
> +	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_cmd);
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_clk);
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data0);
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data1);
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data2);
> +	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data3);
> +

You need also to set up the SDHC clock. This comes after merging:

	http://patchwork.ozlabs.org/patch/188329/

Adding
	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);

before calling fsl_esdhc_initialize() should be enough.

Best regards,
Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================


More information about the U-Boot mailing list