MA-16418 [Android] Support imx8mp spl boot from mmc
authorJi Luo <ji.luo@nxp.com>
Tue, 18 Feb 2020 07:32:39 +0000 (15:32 +0800)
committerJi Luo <ji.luo@nxp.com>
Thu, 13 May 2021 01:49:18 +0000 (09:49 +0800)
Add mmc board level implementation for imx8mp, so we can support
boot from mmc besides ROMAPI.

Test: eMMC/SD boot.

Change-Id: Ie3c28e5622dd819583e2146557ac75f89dbe19ef
Signed-off-by: Ji Luo <ji.luo@nxp.com>
(cherry picked from commit 05b64483e5f46f82beb7f542d0148498fc21334f)

board/freescale/imx8mp_evk/imx8mp_evk.c
board/freescale/imx8mp_evk/spl.c

index e3e3795..2afee7d 100644 (file)
@@ -495,3 +495,17 @@ ulong board_get_usable_ram_top(ulong total_size)
        return gd->ram_top;
 }
 #endif
+
+#ifdef CONFIG_SPL_MMC_SUPPORT
+#define UBOOT_RAW_SECTOR_OFFSET 0x40
+unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc)
+{
+       u32 boot_dev = spl_boot_device();
+       switch (boot_dev) {
+               case BOOT_DEVICE_MMC2:
+                       return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR - UBOOT_RAW_SECTOR_OFFSET;
+               default:
+                       return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
+       }
+}
+#endif
index a5e315a..592af2a 100644 (file)
@@ -38,7 +38,28 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int spl_board_boot_device(enum boot_device boot_dev_spl)
 {
+#ifdef CONFIG_SPL_BOOTROM_SUPPORT
        return BOOT_DEVICE_BOOTROM;
+#else
+       switch (boot_dev_spl) {
+       case SD1_BOOT:
+       case MMC1_BOOT:
+       case SD2_BOOT:
+       case MMC2_BOOT:
+               return BOOT_DEVICE_MMC1;
+       case SD3_BOOT:
+       case MMC3_BOOT:
+               return BOOT_DEVICE_MMC2;
+       case QSPI_BOOT:
+               return BOOT_DEVICE_NOR;
+       case NAND_BOOT:
+               return BOOT_DEVICE_NAND;
+       case USB_BOOT:
+               return BOOT_DEVICE_BOARD;
+       default:
+               return BOOT_DEVICE_NONE;
+       }
+#endif
 }
 
 void spl_dram_init(void)