
Hi Peng,
On i.MX8, when booting from eMMC boot partition, the whole flash.bin is stored in boot partition, however SPL switches to user partition during the init of mmc driver: spl_mmc_load() -> mmc_init()
Then it tries to load the container image in spl_mmc_get_uboot_raw_sector(), but here it reads the data from user partition and the header is not recognized as a valid header.
So we move spl_mmc_get_uboot_raw_sector after eMMC partition switch to address this issue.
Anyway put spl_mmc_get_uboot_raw_sector before eMMC partition switch is not correct, so let's move it after eMMC partition switch.
I assume that this change is not causing regressions on other i.MX boards? (Like i.MX6Q or i.MX53)
Reported-by: Anatolij Gustschin agust@denx.de Signed-off-by: Peng Fan peng.fan@nxp.com
common/spl/spl_mmc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 34e1e73d80..2ede096e61 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -343,8 +343,6 @@ int spl_mmc_load(struct spl_image_info *spl_image, } }
- raw_sect = spl_mmc_get_uboot_raw_sector(mmc);
- boot_mode = spl_boot_mode(bootdev->boot_device); err = -EINVAL; switch (boot_mode) {
@@ -383,6 +381,9 @@ int spl_mmc_load(struct spl_image_info *spl_image, if (!err) return err; }
raw_sect = spl_mmc_get_uboot_raw_sector(mmc);
#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION err = mmc_load_image_raw_partition(spl_image, mmc, raw_part, raw_sect);
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de