MMC iomux is done on board_mmc_init which is valid when DM_MMC is not enabled. After enabling it, the iomux setup needs to be moved to a valid place.
This patch moves the MMC iomux to board_early_init_f where other iomux is done. Signed-off-by: Walter Lozano <walter.loz...@collabora.com> --- board/solidrun/mx6cuboxi/mx6cuboxi.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c index 6a96f9ecdb..71c77ad2a2 100644 --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c @@ -179,6 +179,28 @@ int board_mmc_get_env_dev(int devno) #define USDHC2_CD_GPIO IMX_GPIO_NR(1, 4) +static int setup_iomux_mmc(void) +{ + struct src *psrc = (struct src *)SRC_BASE_ADDR; + unsigned reg = readl(&psrc->sbmr1) >> 11; + + /* + * Upon reading BOOT_CFG register the following map is done: + * Bit 11 and 12 of BOOT_CFG register can determine the current + * mmc port + * 0x1 SD2 + * 0x2 SD3 + */ + switch (reg & 0x3) { + case 0x1: + SETUP_IOMUX_PADS(usdhc2_pads); + case 0x2: + SETUP_IOMUX_PADS(usdhc3_pads); + } + + return 0; +} + int board_mmc_getcd(struct mmc *mmc) { struct fsl_esdhc_cfg *cfg = mmc->priv; @@ -432,9 +454,12 @@ int board_early_init_f(void) { setup_iomux_uart(); + setup_iomux_mmc(); + #ifdef CONFIG_CMD_SATA setup_sata(); #endif + return 0; } -- 2.20.1