diff mbox series

[U-Boot] spl: spl_mmc: fix getting raw_sect when boot from emmc boot partition

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

Commit Message

Peng Fan Oct. 23, 2019, 1:43 a.m. UTC
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(-)

Comments

Lukasz Majewski Oct. 23, 2019, 7:23 a.m. UTC | #1
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
Peng Fan Oct. 23, 2019, 10:29 a.m. UTC | #2
> 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 mbox series

Patch

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);