Match the iROM behaviour: try and load u-boot from
EMMC, and if that fails, fall back to using the SD card.

Signed-off-by: Simon Shields <si...@lineageos.org>
---
 arch/arm/mach-exynos/spl_boot.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-exynos/spl_boot.c b/arch/arm/mach-exynos/spl_boot.c
index b4945bd8e2..6e84206fc5 100644
--- a/arch/arm/mach-exynos/spl_boot.c
+++ b/arch/arm/mach-exynos/spl_boot.c
@@ -186,6 +186,7 @@ void copy_uboot_to_ram(void)
 
        u32 (*copy_bl2)(u32 offset, u32 nblock, u32 dst) = NULL;
        u32 offset = 0, size = 0;
+       u32 ret;
 #ifdef CONFIG_SPI_BOOTING
        struct spl_machine_param *param = spl_get_machine_params();
 #endif
@@ -220,23 +221,30 @@ void copy_uboot_to_ram(void)
                exynos_spi_copy(param->uboot_size, CONFIG_SYS_TEXT_BASE);
                break;
 #endif
-       case BOOT_MODE_SD:
-               offset = BL2_START_OFFSET;
-               size = BL2_SIZE_BLOC_COUNT;
-               copy_bl2 = get_irom_func(MMC_INDEX);
-               break;
 #ifdef CONFIG_SUPPORT_EMMC_BOOT
        case BOOT_MODE_EMMC:
+       case BOOT_MODE_EMMC_SD:
                /* Set the FSYS1 clock divisor value for EMMC boot */
                emmc_boot_clk_div_set();
 
                copy_bl2_from_emmc = get_irom_func(EMMC44_INDEX);
                end_bootop_from_emmc = get_irom_func(EMMC44_END_INDEX);
 
-               copy_bl2_from_emmc(BL2_SIZE_BLOC_COUNT, CONFIG_SYS_TEXT_BASE);
+               ret = copy_bl2_from_emmc(BL2_SIZE_BLOC_COUNT,
+                                       CONFIG_SYS_TEXT_BASE);
                end_bootop_from_emmc();
-               break;
+
+               if (bootmode == BOOT_MODE_EMMC || ret)
+                       break;
+               /* Fall through if EMMC boot failed and SD boot is enabled */
+#else
+       case BOOT_MODE_EMMC_SD:
 #endif
+       case BOOT_MODE_SD:
+               offset = BL2_START_OFFSET;
+               size = BL2_SIZE_BLOC_COUNT;
+               copy_bl2 = get_irom_func(MMC_INDEX);
+               break;
 #ifdef CONFIG_USB_BOOTING
        case BOOT_MODE_USB:
                /*
-- 
2.18.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to