imx: mx6sl: Add IOMUX setting for USDHC1-3
PATCH v2 1/2 imx: mx6sl: Add IOMUX setting for USDHC1-3
Set the USDHC1-3 IOMUX settings which are used for mx6slevk board.
---
Changes since v1:
- None
arch/arm/include/asm/arch-mx6/mx6sl_pins.h | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-)
arch/arm/include/asm/arch-mx6/mx6sl_pins.h +19 -0
@@ -14,12 +14,31 @@ enum {MX6_PAD_ECSPI1_MOSI__ECSPI_MOSI =IOMUX_PAD (0x035C ,0x006C ,0 ,0x0688 ,0 ,0 ),MX6_PAD_ECSPI1_SCLK__ECSPI_SCLK =IOMUX_PAD (0x0360 ,0x0070 ,0 ,0x067C ,0 ,0 ),MX6_PAD_ECSPI1_SS0__GPIO4_IO11 =IOMUX_PAD (0x0364 ,0x0074 ,5 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_CLK__USDHC1_CLK =IOMUX_PAD (0x0534 ,0x022C ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_CMD__USDHC1_CMD =IOMUX_PAD (0x0538 ,0x0230 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT0__USDHC1_DAT0 =IOMUX_PAD (0x053C ,0x0234 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT1__USDHC1_DAT1 =IOMUX_PAD (0x0540 ,0x0238 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT2__USDHC1_DAT2 =IOMUX_PAD (0x0544 ,0x023C ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT3__USDHC1_DAT3 =IOMUX_PAD (0x0548 ,0x0240 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT4__USDHC1_DAT4 =IOMUX_PAD (0x054C ,0x0244 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT5__USDHC1_DAT5 =IOMUX_PAD (0x0550 ,0x0248 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT6__USDHC1_DAT6 =IOMUX_PAD (0x0554 ,0x024C ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD1_DAT7__USDHC1_DAT7 =IOMUX_PAD (0x0558 ,0x0250 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_KEY_ROW7__GPIO_4_7 =IOMUX_PAD (0x04B0 ,0x01A8 ,5 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_CLK__USDHC2_CLK =IOMUX_PAD (0x055C ,0x0254 ,0 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_CMD__USDHC2_CMD =IOMUX_PAD (0x0560 ,0x0258 ,0 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_DAT0__USDHC2_DAT0 =IOMUX_PAD (0x0564 ,0x025C ,0 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_DAT1__USDHC2_DAT1 =IOMUX_PAD (0x0568 ,0x0260 ,0 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_DAT2__USDHC2_DAT2 =IOMUX_PAD (0x056C ,0x0264 ,0 ,0x0000 ,0 ,0 ),MX6_PAD_SD2_DAT3__USDHC2_DAT3 =IOMUX_PAD (0x0570 ,0x0268 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD2_DAT7__GPIO_5_0 =IOMUX_PAD (0x0580 ,0x0278 ,5 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_CLK__USDHC3_CLK =IOMUX_PAD (0x0588 ,0x0280 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_CMD__USDHC3_CMD =IOMUX_PAD (0x058C ,0x0284 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_DAT0__USDHC3_DAT0 =IOMUX_PAD (0x0590 ,0x0288 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_DAT1__USDHC3_DAT1 =IOMUX_PAD (0x0594 ,0x028C ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_DAT2__USDHC3_DAT2 =IOMUX_PAD (0x0598 ,0x0290 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_SD3_DAT3__USDHC3_DAT3 =IOMUX_PAD (0x059C ,0x0294 ,0 ,0x0000 ,0 ,0 ), +MX6_PAD_REF_CLK_32K__GPIO_3_22 =IOMUX_PAD (0x0530 ,0x0228 ,5 ,0x0000 ,0 ,0 ),MX6_PAD_UART1_RXD__UART1_RXD =IOMUX_PAD (0x05A0 ,0x0298 ,0 ,0x07FC ,0 ,0 ), MX6_PAD_UART1_TXD__UART1_TXD = IOMUX_PAD(0x05A4, 0x029C, 0, 0x0000, 0, 0),
Signature · 1 line
1.7.4.1
PATCH v2 2/2 imx: mx6slevk: Add support for USDHC1 and USDHC3 slots
There are three SD/MMC sockets on mx6slevk boards. Implements the full support for them.
The default boot socket is USDHC2, so the MMC environment is set to that device.
---
Changes since v1:
- Correct the return value of board_mmc_init function
board/freescale/mx6slevk/mx6slevk.c | 104 +++++++++++++++++++++++++++++++++-- include/configs/mx6slevk.h | 6 ++- 2 files changed, 103 insertions(+), 7 deletions(-)
board/freescale/mx6slevk/mx6slevk.c +98 -6
@@ -51,6 +51,23 @@ static iomux_v3_cfg_t const uart1_pads[] = { MX6_PAD_UART1_RXD__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL), }; +static iomux_v3_cfg_t const usdhc1_pads[] = { +/* 8 bit SD */ +MX6_PAD_SD1_CLK__USDHC1_CLK |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_CMD__USDHC1_CMD |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT0__USDHC1_DAT0 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT1__USDHC1_DAT1 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT2__USDHC1_DAT2 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT3__USDHC1_DAT3 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT4__USDHC1_DAT4 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT5__USDHC1_DAT5 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT6__USDHC1_DAT6 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD1_DAT7__USDHC1_DAT7 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), + +/*CD pin*/ +MX6_PAD_KEY_ROW7__GPIO_4_7 |MUX_PAD_CTRL (NO_PAD_CTRL ), +}; +static iomux_v3_cfg_t const usdhc2_pads[] = {MX6_PAD_SD2_CLK__USDHC2_CLK |MUX_PAD_CTRL (USDHC_PAD_CTRL ),MX6_PAD_SD2_CMD__USDHC2_CMD |MUX_PAD_CTRL (USDHC_PAD_CTRL ),
@@ -58,6 +75,21 @@ static iomux_v3_cfg_t const usdhc2_pads[] = {MX6_PAD_SD2_DAT1__USDHC2_DAT1 |MUX_PAD_CTRL (USDHC_PAD_CTRL ),MX6_PAD_SD2_DAT2__USDHC2_DAT2 |MUX_PAD_CTRL (USDHC_PAD_CTRL ),MX6_PAD_SD2_DAT3__USDHC2_DAT3 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), + +/*CD pin*/ + MX6_PAD_SD2_DAT7__GPIO_5_0 | MUX_PAD_CTRL(NO_PAD_CTRL), +}; + +static iomux_v3_cfg_t const usdhc3_pads[] = { +MX6_PAD_SD3_CLK__USDHC3_CLK |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD3_CMD__USDHC3_CMD |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD3_DAT0__USDHC3_DAT0 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD3_DAT1__USDHC3_DAT1 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD3_DAT2__USDHC3_DAT2 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), +MX6_PAD_SD3_DAT3__USDHC3_DAT3 |MUX_PAD_CTRL (USDHC_PAD_CTRL ), + +/*CD pin*/ +MX6_PAD_REF_CLK_32K__GPIO_3_22 |MUX_PAD_CTRL (NO_PAD_CTRL ), }; static iomux_v3_cfg_t const fec_pads[] = {
@@ -103,21 +135,81 @@ static void setup_iomux_fec(void)gpio_set_value (ETH_PHY_RESET ,1 ); } -static struct fsl_esdhc_cfg usdhc_cfg[1 ] = { - {USDHC2_BASE_ADDR }, +#define USDHC1_CD_GPIO IMX_GPIO_NR(4, 7) +#define USDHC2_CD_GPIO IMX_GPIO_NR(5, 0) +#define USDHC3_CD_GPIO IMX_GPIO_NR(3, 22) + +static struct fsl_esdhc_cfg usdhc_cfg[3 ] = { + {USDHC1_BASE_ADDR }, + {USDHC2_BASE_ADDR ,0 ,4 }, + {USDHC3_BASE_ADDR ,0 ,4 }, };int board_mmc_getcd (struct mmc *mmc) { -return 1 ;/* Assume boot SD always present */ +struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; +int ret =0 ; + +switch (cfg->esdhc_base) { +case USDHC1_BASE_ADDR : + ret = !gpio_get_value (USDHC1_CD_GPIO ); +break ; +case USDHC2_BASE_ADDR : + ret = !gpio_get_value (USDHC2_CD_GPIO ); +break ; +case USDHC3_BASE_ADDR : + ret = !gpio_get_value (USDHC3_CD_GPIO ); +break ; + } + +return ret; }int board_mmc_init (bd_t *bis) { -imx_iomux_v3_setup_multiple_pads (usdhc2_pads,ARRAY_SIZE (usdhc2_pads)); +int i, ret; + +/* +* According to the board_mmc_init() the following map is done: +* (U-boot device node) (Physical Port) +* mmc0 USDHC1 +* mmc1 USDHC2 +* mmc2 USDHC3 +*/ +for (i =0 ; i <CONFIG_SYS_FSL_USDHC_NUM ; i++) { +switch (i) { +case 0 : +imx_iomux_v3_setup_multiple_pads ( + usdhc1_pads,ARRAY_SIZE (usdhc1_pads)); +gpio_direction_input (USDHC1_CD_GPIO ); + usdhc_cfg[0 ].sdhc_clk =mxc_get_clock (MXC_ESDHC_CLK ); +break ; +case 1 : +imx_iomux_v3_setup_multiple_pads ( + usdhc2_pads,ARRAY_SIZE (usdhc2_pads)); +gpio_direction_input (USDHC2_CD_GPIO ); + usdhc_cfg[1 ].sdhc_clk =mxc_get_clock (MXC_ESDHC2_CLK ); +break ; +case 2 : +imx_iomux_v3_setup_multiple_pads ( + usdhc3_pads,ARRAY_SIZE (usdhc3_pads)); +gpio_direction_input (USDHC3_CD_GPIO ); + usdhc_cfg[2 ].sdhc_clk =mxc_get_clock (MXC_ESDHC3_CLK ); +break ; +default : +printf ("Warning: you configured more USDHC controllers" +"(%d) than supported by the board\n" , i +1 ); +return -EINVAL ; + } + + ret =fsl_esdhc_initialize (bis, &usdhc_cfg[i]); +if (ret) { +printf ("Warning: failed to initialize mmc dev %d\n" , i); +return ret; + } + } - usdhc_cfg[0 ].sdhc_clk =mxc_get_clock (MXC_ESDHC2_CLK ); -return fsl_esdhc_initialize (bis, &usdhc_cfg[0 ]); +return 0 ; }#ifdef CONFIG_FEC_MXC
include/configs/mx6slevk.h +5 -1
@@ -190,7 +190,6 @@#define CONFIG_ENV_OFFSET (6 * SZ_64K)#define CONFIG_ENV_SIZE SZ_8K#define CONFIG_ENV_IS_IN_MMC -#define CONFIG_SYS_MMC_ENV_DEV 0#define CONFIG_OF_LIBFDT #define CONFIG_CMD_BOOTZ
@@ -210,4 +209,9 @@#define CONFIG_SF_DEFAULT_MODE SPI_MODE_0#endif +#define CONFIG_SYS_FSL_USDHC_NUM 3 +#if defined(CONFIG_ENV_IS_IN_MMC ) +#define CONFIG_SYS_MMC_ENV_DEV 1/* SDHC2*/ +#endif +#endif /* __CONFIG_H */
Signature · 1 line
1.7.4.1
PATCH v2 2/2 imx: mx6slevk: Add support for USDHC1 and USDHC3 slots
Quoted 9 lines · Ye.Li
There are three SD/MMC sockets on mx6slevk boards. Implements the full support for them.
The default boot socket is USDHC2, so the MMC environment is set to that device.Signed-off-by Ye.Li <[email protected]>---
Changes since v1:
- Correct the return value ofboard_mmc_initfunction
PATCH v2 2/2 imx: mx6slevk: Add support for USDHC1 and USDHC3 slots
In reply to Ye.LiHi Ye,
Quoted 7 lines · Ye.Li
There are three SD/MMC sockets on mx6slevk boards. Implements the full support for them.
The default boot socket is USDHC2, so the MMC environment is set to that device.Signed-off-by Ye.Li <[email protected]>---
Please fix checkpatch warnings in this patch and repost it - thanks !
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== 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 =====================================================================
PATCH v2 1/2 imx: mx6sl: Add IOMUX setting for USDHC1-3
In reply to Ye.LiQuoted 3 lines · Ye.Li
Set the USDHC1-3 IOMUX settings which are used for mx6slevk board.
Signed-off-by Ye.Li <[email protected]>