Message ID | 20191023015959.4051-1-peng.fan@nxp.com |
---|---|
State | Accepted |
Commit | a335f80502131e9e2b58a0281f5fc78018295ea4 |
Delegated to: | Peng Fan |
Headers | show |
Series | [U-Boot] spl: spl_mmc: fix getting raw_sect when boot from emmc boot partition | expand |
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
> Subject: Re: [PATCH] spl: spl_mmc: fix getting raw_sect when boot from > emmc boot partition > > 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) No regression on other i.MX boards. Only i.MX8QM/8QXP has this issue currently. Regards, Peng. > > > 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
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);
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)