spl: spl_mmc: fix getting raw_sect when boot from emmc boot partition
authorPeng Fan <peng.fan@nxp.com>
Wed, 23 Oct 2019 01:43:30 +0000 (01:43 +0000)
committerPeng Fan <peng.fan@nxp.com>
Tue, 29 Oct 2019 02:09:44 +0000 (10:09 +0800)
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.

Reported-by: Anatolij Gustschin <agust@denx.de>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
common/spl/spl_mmc.c

index 34e1e73d80d6d0e80879add7a5e2a437c7b07ed4..2ede096e61c860062eec3007d3859ea761cbdd74 100644 (file)
@@ -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);