spl: mmc: raw: Try to load u-boot if Linux image is not found
authorLokesh Vutla <lokeshvutla@ti.com>
Mon, 11 Apr 2016 09:54:50 +0000 (15:24 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 12 Apr 2016 00:48:27 +0000 (20:48 -0400)
If CONFIG_SPL_OS_BOOT is enabled and Linux image is not flashed at
RAW_MODE_KERNEL_SECTOR in MMC, spl still assumes that Linux is
available and tries to boot it and hangs. In order to avoid this,
adding a check to verify if parsed image header is of type IH_OS_LINUX.
If it fails then fall back to load u-boot image.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
common/spl/spl_mmc.c

index 7d3bfc60bae0030bb7aac5b01d2f73c94e2b8ff9..1a10c555f42273b6720cde20a93eb2ffc3a9da81 100644 (file)
@@ -178,6 +178,7 @@ static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
 static int mmc_load_image_raw_os(struct mmc *mmc)
 {
        unsigned long count;
+       int ret;
 
        count = mmc->block_dev.block_read(&mmc->block_dev,
                CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,
@@ -190,8 +191,17 @@ static int mmc_load_image_raw_os(struct mmc *mmc)
                return -1;
        }
 
-       return mmc_load_image_raw_sector(mmc,
+       ret = mmc_load_image_raw_sector(mmc,
                CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR);
+       if (ret)
+               return ret;
+
+       if (spl_image.os != IH_OS_LINUX) {
+               puts("Expected Linux image is not found. Trying to start U-boot\n");
+               return -ENOENT;
+       }
+
+       return 0;
 }
 #else
 int spl_start_uboot(void)