Re: [U-Boot] [PATCH 1/3] SPL: Let spl_parse_image_header() return value
On 05/20/2016 07:22 PM, Fabio Estevam wrote: > On Fri, May 20, 2016 at 6:56 PM, Nishanth Menon wrote: >> Marek, >> >> Just forwarding report from Suman (in CC) reporting that as of u-boot >> master 4b6e1fd "Merge git://git.denx.de/u-boot-dm" >> It looks like BeagleBoard-X15, DRA7 platforms fail due to this commit. >> Fail signature looks like the following: >> ... >> DRA752 ES2.0 >> Trying to boot from MMC1 >> reading args >> spl_load_image_fat_os: error reading image args, err - -1 >> reading u-boot.img >> spl_load_image_fat: error reading image u-boot.img, err - 0 >> Failed to mount ext2 filesystem... >> spl_load_image_ext_os: ext4fs mount err - 0 >> Failed to mount ext2 filesystem... >> spl_load_image_ext: ext4fs mount err - 0 > > Looks like this can be fixed with this patch from Marek: > https://patchwork.ozlabs.org/patch/624267/ Thanks Fabio for pointing out the fix. I have verified that this patch fixes the boot on both the above platforms. regards Suman ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] SPL: Let spl_parse_image_header() return value
On Fri, May 20, 2016 at 6:56 PM, Nishanth Menon wrote: > Marek, > > Just forwarding report from Suman (in CC) reporting that as of u-boot > master 4b6e1fd "Merge git://git.denx.de/u-boot-dm" > It looks like BeagleBoard-X15, DRA7 platforms fail due to this commit. > Fail signature looks like the following: > ... > DRA752 ES2.0 > Trying to boot from MMC1 > reading args > spl_load_image_fat_os: error reading image args, err - -1 > reading u-boot.img > spl_load_image_fat: error reading image u-boot.img, err - 0 > Failed to mount ext2 filesystem... > spl_load_image_ext_os: ext4fs mount err - 0 > Failed to mount ext2 filesystem... > spl_load_image_ext: ext4fs mount err - 0 Looks like this can be fixed with this patch from Marek: https://patchwork.ozlabs.org/patch/624267/ ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH 1/3] SPL: Let spl_parse_image_header() return value
Marek, Just forwarding report from Suman (in CC) reporting that as of u-boot master 4b6e1fd "Merge git://git.denx.de/u-boot-dm" It looks like BeagleBoard-X15, DRA7 platforms fail due to this commit. Fail signature looks like the following: ... DRA752 ES2.0 Trying to boot from MMC1 reading args spl_load_image_fat_os: error reading image args, err - -1 reading u-boot.img spl_load_image_fat: error reading image u-boot.img, err - 0 Failed to mount ext2 filesystem... spl_load_image_ext_os: ext4fs mount err - 0 Failed to mount ext2 filesystem... spl_load_image_ext: ext4fs mount err - 0 ... On Thu, Apr 28, 2016 at 5:44 PM, Marek Vasut wrote: > Allow the spl_parse_image_header() to return value. This is convenient > for controlling the SPL boot flow if the loaded image is corrupted. > > Signed-off-by: Marek Vasut > Cc: Fabio Estevam > Cc: Peng Fan > Cc: Stefano Babic > Cc: Tom Rini > --- > common/spl/spl.c | 3 ++- > common/spl/spl_ext.c | 6 +- > common/spl/spl_fat.c | 4 +++- > common/spl/spl_mmc.c | 6 +- > common/spl/spl_nand.c | 9 +++-- > common/spl/spl_net.c | 4 +--- > common/spl/spl_nor.c | 9 +++-- > common/spl/spl_onenand.c | 5 - > common/spl/spl_ymodem.c| 7 +-- > drivers/mtd/spi/spi_spl_load.c | 10 -- > include/spl.h | 2 +- > 11 files changed, 48 insertions(+), 17 deletions(-) > > diff --git a/common/spl/spl.c b/common/spl/spl.c > index 82e7f58..7259619 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -73,7 +73,7 @@ void spl_set_header_raw_uboot(void) > spl_image.name = "U-Boot"; > } > > -void spl_parse_image_header(const struct image_header *header) > +int spl_parse_image_header(const struct image_header *header) > { > u32 header_size = sizeof(struct image_header); > > @@ -118,6 +118,7 @@ void spl_parse_image_header(const struct image_header > *header) > spl_set_header_raw_uboot(); > #endif > } > + return 0; > } > > __weak void __noreturn jump_to_image_no_args(struct spl_image_info > *spl_image) > diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c > index b77dbf4..ade5496 100644 > --- a/common/spl/spl_ext.c > +++ b/common/spl/spl_ext.c > @@ -48,7 +48,11 @@ int spl_load_image_ext(struct blk_desc *block_dev, > goto end; > } > > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err < 0) { > + puts("spl: ext4fs_read failed\n"); > + goto end; > + } > > err = ext4fs_read((char *)spl_image.load_addr, filelen, &actlen); > > diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c > index d761b26..338ea2f 100644 > --- a/common/spl/spl_fat.c > +++ b/common/spl/spl_fat.c > @@ -57,7 +57,9 @@ int spl_load_image_fat(struct blk_desc *block_dev, > if (err <= 0) > goto end; > > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err <= 0) > + goto end; > > err = file_fat_read(filename, (u8 *)spl_image.load_addr, 0); > > diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c > index 8d588d1..360c754 100644 > --- a/common/spl/spl_mmc.c > +++ b/common/spl/spl_mmc.c > @@ -23,8 +23,12 @@ static int mmc_load_legacy(struct mmc *mmc, ulong sector, > { > u32 image_size_sectors; > unsigned long count; > + int ret; > + > + ret = spl_parse_image_header(header); > + if (ret) > + return ret; > > - spl_parse_image_header(header); > /* convert size to sectors - round up */ > image_size_sectors = (spl_image.size + mmc->read_bl_len - 1) / > mmc->read_bl_len; > diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c > index 79388ff..bbd9546 100644 > --- a/common/spl/spl_nand.c > +++ b/common/spl/spl_nand.c > @@ -32,7 +32,10 @@ static int spl_nand_load_element(int offset, struct > image_header *header) > if (err) > return err; > > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err) > + return err; > + > return nand_spl_load_image(offset, spl_image.size, >(void *)(unsigned > long)spl_image.load_addr); > } > @@ -77,7 +80,9 @@ int spl_nand_load_image(void) > /* load linux */ > nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS, > sizeof(*header), (void *)header); > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err) > + return err; > if (header->ih_os == IH_OS_LINUX) { > /* happy - was a linux */ > err = nand_spl_load_image( > diff --git a/commo
[U-Boot] [PATCH 1/3] SPL: Let spl_parse_image_header() return value
Allow the spl_parse_image_header() to return value. This is convenient for controlling the SPL boot flow if the loaded image is corrupted. Signed-off-by: Marek Vasut Cc: Fabio Estevam Cc: Peng Fan Cc: Stefano Babic Cc: Tom Rini --- common/spl/spl.c | 3 ++- common/spl/spl_ext.c | 6 +- common/spl/spl_fat.c | 4 +++- common/spl/spl_mmc.c | 6 +- common/spl/spl_nand.c | 9 +++-- common/spl/spl_net.c | 4 +--- common/spl/spl_nor.c | 9 +++-- common/spl/spl_onenand.c | 5 - common/spl/spl_ymodem.c| 7 +-- drivers/mtd/spi/spi_spl_load.c | 10 -- include/spl.h | 2 +- 11 files changed, 48 insertions(+), 17 deletions(-) diff --git a/common/spl/spl.c b/common/spl/spl.c index 82e7f58..7259619 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -73,7 +73,7 @@ void spl_set_header_raw_uboot(void) spl_image.name = "U-Boot"; } -void spl_parse_image_header(const struct image_header *header) +int spl_parse_image_header(const struct image_header *header) { u32 header_size = sizeof(struct image_header); @@ -118,6 +118,7 @@ void spl_parse_image_header(const struct image_header *header) spl_set_header_raw_uboot(); #endif } + return 0; } __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image) diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c index b77dbf4..ade5496 100644 --- a/common/spl/spl_ext.c +++ b/common/spl/spl_ext.c @@ -48,7 +48,11 @@ int spl_load_image_ext(struct blk_desc *block_dev, goto end; } - spl_parse_image_header(header); + err = spl_parse_image_header(header); + if (err < 0) { + puts("spl: ext4fs_read failed\n"); + goto end; + } err = ext4fs_read((char *)spl_image.load_addr, filelen, &actlen); diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index d761b26..338ea2f 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -57,7 +57,9 @@ int spl_load_image_fat(struct blk_desc *block_dev, if (err <= 0) goto end; - spl_parse_image_header(header); + err = spl_parse_image_header(header); + if (err <= 0) + goto end; err = file_fat_read(filename, (u8 *)spl_image.load_addr, 0); diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 8d588d1..360c754 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -23,8 +23,12 @@ static int mmc_load_legacy(struct mmc *mmc, ulong sector, { u32 image_size_sectors; unsigned long count; + int ret; + + ret = spl_parse_image_header(header); + if (ret) + return ret; - spl_parse_image_header(header); /* convert size to sectors - round up */ image_size_sectors = (spl_image.size + mmc->read_bl_len - 1) / mmc->read_bl_len; diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 79388ff..bbd9546 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -32,7 +32,10 @@ static int spl_nand_load_element(int offset, struct image_header *header) if (err) return err; - spl_parse_image_header(header); + err = spl_parse_image_header(header); + if (err) + return err; + return nand_spl_load_image(offset, spl_image.size, (void *)(unsigned long)spl_image.load_addr); } @@ -77,7 +80,9 @@ int spl_nand_load_image(void) /* load linux */ nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS, sizeof(*header), (void *)header); - spl_parse_image_header(header); + err = spl_parse_image_header(header); + if (err) + return err; if (header->ih_os == IH_OS_LINUX) { /* happy - was a linux */ err = nand_spl_load_image( diff --git a/common/spl/spl_net.c b/common/spl/spl_net.c index 63b20d8..ae71d26 100644 --- a/common/spl/spl_net.c +++ b/common/spl/spl_net.c @@ -34,7 +34,5 @@ int spl_net_load_image(const char *device) printf("Problem booting with BOOTP\n"); return rv; } - spl_parse_image_header((struct image_header *)load_addr); - - return 0; + return spl_parse_image_header((struct image_header *)load_addr); } diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index d0bd0b0..da2422f 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -9,6 +9,7 @@ int spl_nor_load_image(void) { + int ret; /* * Loading of the payload to SDRAM is done with skipping of * the mkimage header in this SPL NOR driver @@ -28,7 +29,9 @@ int spl_nor_load_image(void) if (image_get_os(header) == IH_O