From 811906aebcb81c14c1a836a5ae97f49f1cc9b7ec Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Mon, 11 Apr 2016 15:24:50 +0530 Subject: [PATCH] spl: mmc: raw: Try to load u-boot if Linux image is not found 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 --- common/spl/spl_mmc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 7d3bfc60ba..1a10c555f4 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -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) -- 2.39.5