imx: mx6: implement mmc_get_env_dev
authorPeng Fan <peng.fan@nxp.com>
Thu, 28 Jan 2016 08:51:26 +0000 (16:51 +0800)
committerStefano Babic <sbabic@denx.de>
Thu, 4 Feb 2016 09:13:49 +0000 (10:13 +0100)
Implement mmc_get_env_dev, devno can be got from smbr1 of SRC.
Introduce a weak function board_mmc_get_env_dev, different
boards can implement it according to different sdhc controllers
that used by the board.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
arch/arm/cpu/armv7/mx6/soc.c

index ebe42b8..8aeeaec 100644 (file)
@@ -349,6 +349,38 @@ int arch_cpu_init(void)
        return 0;
 }
 
+#ifdef CONFIG_ENV_IS_IN_MMC
+__weak int board_mmc_get_env_dev(int devno)
+{
+       return CONFIG_SYS_MMC_ENV_DEV;
+}
+
+int mmc_get_env_dev(void)
+{
+       struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+       u32 soc_sbmr = readl(&src_regs->sbmr1);
+       u32 bootsel;
+       int devno;
+
+       /*
+        * Refer to
+        * "i.MX 6Dual/6Quad Applications Processor Reference Manual"
+        * Chapter "8.5.3.1 Expansion Device eFUSE Configuration"
+        * i.MX6SL/SX/UL has same layout.
+        */
+       bootsel = (soc_sbmr & 0x000000FF) >> 6;
+
+       /* If not boot from sd/mmc, use default value */
+       if (bootsel != 1)
+               return CONFIG_SYS_MMC_ENV_DEV;
+
+       /* BOOT_CFG2[3] and BOOT_CFG2[4] */
+       devno = (soc_sbmr & 0x00001800) >> 11;
+
+       return board_mmc_get_env_dev(devno);
+}
+#endif
+
 int board_postclk_init(void)
 {
        set_ldo_voltage(LDO_SOC, 1175); /* Set VDDSOC to 1.175V */