This allows using only one of either raw or fs mode for SPL mmc boot, without
the need to have provisions for the other. In particular, a device may have
U-Boot installed on a file system on the mmc, without ever needing to read
U-Boot from raw memory. Thus, there is no reason to provide a sector or
partition for raw mode. This allows this behaviour and still provides a robust
fallback mechanism in case provisions for both modes are defined.

Signed-off-by: Paul Kocialkowski <[email protected]>
---
 common/spl/spl_mmc.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index f5ac844..552f80d 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -130,19 +130,21 @@ void spl_mmc_load_image(void)
                                return;
                }
 #endif
-#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
+#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION)
                err = mmc_load_image_raw_partition(mmc,
                        CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION);
-#else
+               if (!err)
+                       return;
+#elif defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR)
                err = mmc_load_image_raw_sector(mmc,
                        CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
-#endif
                if (!err)
                        return;
-#if defined(CONFIG_SPL_FAT_SUPPORT) || defined(CONFIG_SPL_EXT_SUPPORT)
+#endif
        case MMCSD_MODE_FS:
                debug("spl: mmc boot mode: fs\n");
 
+#ifdef CONFIG_SYS_MMCSD_FS_BOOT_PARTITION
 #ifdef CONFIG_SPL_FAT_SUPPORT
 #ifdef CONFIG_SPL_OS_BOOT
                if (!spl_start_uboot()) {
@@ -152,12 +154,14 @@ void spl_mmc_load_image(void)
                                return;
                }
 #endif
+#ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
                err = spl_load_image_fat(&mmc->block_dev,
                                         CONFIG_SYS_MMCSD_FS_BOOT_PARTITION,
                                         CONFIG_SPL_FS_LOAD_PAYLOAD_NAME);
                if (!err)
                        return;
 #endif
+#endif
 #ifdef CONFIG_SPL_EXT_SUPPORT
 #ifdef CONFIG_SPL_OS_BOOT
                if (!spl_start_uboot()) {
@@ -167,6 +171,7 @@ void spl_mmc_load_image(void)
                                return;
                }
 #endif
+#ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
                err = spl_load_image_ext(&mmc->block_dev,
                                         CONFIG_SYS_MMCSD_FS_BOOT_PARTITION,
                                         CONFIG_SPL_FS_LOAD_PAYLOAD_NAME);
@@ -174,6 +179,7 @@ void spl_mmc_load_image(void)
                        return;
 #endif
 #endif
+#endif
 #ifdef CONFIG_SUPPORT_EMMC_BOOT
        case MMCSD_MODE_EMMCBOOT:
                /*
@@ -200,16 +206,18 @@ void spl_mmc_load_image(void)
                                return;
                }
 #endif
-#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
+#if defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION)
                err = mmc_load_image_raw_partition(mmc,
                        CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION);
-#else
+               if (!err)
+                       return;
+#elif defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR)
                err = mmc_load_image_raw_sector(mmc,
                        CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR);
-#endif
                if (!err)
                        return;
 #endif
+#endif
        case MMCSD_MODE_UNDEFINED:
        default:
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
-- 
1.9.1

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to