The Alternative Boot operation mode (boot from eMMC boot partition) is selected through sys_boot pads configuration: - sys_boot[5:0]=0b101100 for OMAP4 (MMC2_BOOT) - sys_boot[3:0]=0xb1110 for OMAP5 (eMMC, boot partition only)
So, add new bootdevice BOOT_DEVICE_MMC2_BOOT for OMAP4 and change bootmode from MMCSD_MODE_UNDEFINED to MMCSD_MODE_RAW for it to support this mode. As for OMAP5, then only change bootmode to MMCSD_MODE_RAW. Signed-off-by: Oleksandr Tyshchenko <oleksandr.tyshche...@ti.com> --- arch/arm/cpu/armv7/omap-common/boot-common.c | 21 ++++++++++++++++----- arch/arm/include/asm/arch-omap4/spl.h | 3 ++- common/spl/spl.c | 1 + 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/arch/arm/cpu/armv7/omap-common/boot-common.c b/arch/arm/cpu/armv7/omap-common/boot-common.c index 76ae1b6..f693b0d 100644 --- a/arch/arm/cpu/armv7/omap-common/boot-common.c +++ b/arch/arm/cpu/armv7/omap-common/boot-common.c @@ -29,7 +29,7 @@ void save_omap_boot_params(void) { u32 rom_params = *((u32 *)OMAP_SRAM_SCRATCH_BOOT_PARAMS); u8 boot_device; - u32 dev_desc, dev_data; + u32 dev_desc, dev_data, boot_mode; if ((rom_params < NON_SECURE_SRAM_START) || (rom_params > NON_SECURE_SRAM_END)) @@ -51,16 +51,26 @@ void save_omap_boot_params(void) #if !defined(CONFIG_AM33XX) && !defined(CONFIG_TI81XX) if ((omap_hw_init_context() == OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL)) { - gd->arch.omap_boot_params.omap_bootmode = - *((u8 *)(rom_params + BOOT_MODE_OFFSET)); + boot_mode = *((u8 *)(rom_params + BOOT_MODE_OFFSET)); } else #endif { dev_desc = *((u32 *)(rom_params + DEV_DESC_PTR_OFFSET)); dev_data = *((u32 *)(dev_desc + DEV_DATA_PTR_OFFSET)); - gd->arch.omap_boot_params.omap_bootmode = - *((u32 *)(dev_data + BOOT_MODE_OFFSET)); + boot_mode = *((u32 *)(dev_data + BOOT_MODE_OFFSET)); } + /* + * Make spl_mmc_load_image() happy with Alternative + * Boot operation mode + */ +#if defined(CONFIG_OMAP44XX) + if (boot_device == BOOT_DEVICE_MMC2_BOOT) + boot_mode = MMCSD_MODE_RAW; +#elif defined(CONFIG_OMAP54XX) + if (boot_device == BOOT_DEVICE_MMC2) + boot_mode = MMCSD_MODE_RAW; +#endif + gd->arch.omap_boot_params.omap_bootmode = boot_mode; } } @@ -92,6 +102,7 @@ int board_mmc_init(bd_t *bis) omap_mmc_init(0, 0, 0, -1, -1); break; case BOOT_DEVICE_MMC2: + case BOOT_DEVICE_MMC2_BOOT: case BOOT_DEVICE_MMC2_2: omap_mmc_init(1, 0, 0, -1, -1); break; diff --git a/arch/arm/include/asm/arch-omap4/spl.h b/arch/arm/include/asm/arch-omap4/spl.h index f61627f..245b81f 100644 --- a/arch/arm/include/asm/arch-omap4/spl.h +++ b/arch/arm/include/asm/arch-omap4/spl.h @@ -30,8 +30,9 @@ #define BOOT_DEVICE_ONENAND 4 #define BOOT_DEVICE_MMC1 5 #define BOOT_DEVICE_MMC2 6 +#define BOOT_DEVICE_MMC2_BOOT 8 #define BOOT_DEVICE_MMC2_2 0xFF #define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1 -#define MMC_BOOT_DEVICES_END BOOT_DEVICE_MMC2 +#define MMC_BOOT_DEVICES_END BOOT_DEVICE_MMC2_BOOT #endif diff --git a/common/spl/spl.c b/common/spl/spl.c index 628c399..ba91b65 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -177,6 +177,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2) #ifdef CONFIG_SPL_MMC_SUPPORT case BOOT_DEVICE_MMC1: case BOOT_DEVICE_MMC2: + case BOOT_DEVICE_MMC2_BOOT: case BOOT_DEVICE_MMC2_2: spl_mmc_load_image(); break; -- 1.7.9.5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot