[PATCH 2/4] mx6cuboxi: enable MMC iomux on board_early_init_f

Walter Lozano
2020-03-04T14:41:23Z

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.lozano@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