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 <ma...@denx.de> 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 <ma...@denx.de> > Cc: Fabio Estevam <fabio.este...@nxp.com> > Cc: Peng Fan <van.free...@gmail.com> > Cc: Stefano Babic <sba...@denx.de> > Cc: Tom Rini <tr...@konsulko.com> > --- > 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_OS_LINUX) { > /* happy - was a Linux */ > > - spl_parse_image_header(header); > + ret = spl_parse_image_header(header); > + if (ret) > + return ret; > > memcpy((void *)spl_image.load_addr, > (void *)(CONFIG_SYS_OS_BASE + > @@ -56,8 +59,10 @@ int spl_nor_load_image(void) > * Load real U-Boot from its location in NOR flash to its > * defined location in SDRAM > */ > - spl_parse_image_header( > + ret = spl_parse_image_header( > (const struct image_header *)CONFIG_SYS_UBOOT_BASE); > + if (ret) > + return ret; > > memcpy((void *)(unsigned long)spl_image.load_addr, > (void *)(CONFIG_SYS_UBOOT_BASE + sizeof(struct image_header)), > diff --git a/common/spl/spl_onenand.c b/common/spl/spl_onenand.c > index af7d82e..1a28a84 100644 > --- a/common/spl/spl_onenand.c > +++ b/common/spl/spl_onenand.c > @@ -17,6 +17,7 @@ > int spl_onenand_load_image(void) > { > struct image_header *header; > + int ret; > > debug("spl: onenand\n"); > > @@ -25,7 +26,9 @@ int spl_onenand_load_image(void) > /* Load u-boot */ > onenand_spl_load_image(CONFIG_SYS_ONENAND_U_BOOT_OFFS, > CONFIG_SYS_ONENAND_PAGE_SIZE, (void *)header); > - spl_parse_image_header(header); > + ret = spl_parse_image_header(header); > + if (ret) > + return ret; > onenand_spl_load_image(CONFIG_SYS_ONENAND_U_BOOT_OFFS, > spl_image.size, (void *)spl_image.load_addr); > > diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c > index 380d8dd..4f26ea5 100644 > --- a/common/spl/spl_ymodem.c > +++ b/common/spl/spl_ymodem.c > @@ -40,8 +40,11 @@ int spl_ymodem_load_image(void) > if (!ret) { > while ((res = > xyzModem_stream_read(buf, BUF_SIZE, &err)) > 0) { > - if (addr == 0) > - spl_parse_image_header((struct image_header > *)buf); > + if (addr == 0) { > + ret = spl_parse_image_header((struct > image_header *)buf); > + if (ret) > + return ret; > + } > store_addr = addr + spl_image.load_addr; > size += res; > addr += res; > diff --git a/drivers/mtd/spi/spi_spl_load.c b/drivers/mtd/spi/spi_spl_load.c > index ca56fe9..46c98a9 100644 > --- a/drivers/mtd/spi/spi_spl_load.c > +++ b/drivers/mtd/spi/spi_spl_load.c > @@ -23,6 +23,8 @@ > static int spi_load_image_os(struct spi_flash *flash, > struct image_header *header) > { > + int err; > + > /* Read for a header, parse or error out. */ > spi_flash_read(flash, CONFIG_SYS_SPI_KERNEL_OFFS, 0x40, > (void *)header); > @@ -30,7 +32,9 @@ static int spi_load_image_os(struct spi_flash *flash, > if (image_get_magic(header) != IH_MAGIC) > return -1; > > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err) > + return err; > > spi_flash_read(flash, CONFIG_SYS_SPI_KERNEL_OFFS, > spl_image.size, (void *)spl_image.load_addr); > @@ -81,7 +85,9 @@ int spl_spi_load_image(void) > if (err) > return err; > > - spl_parse_image_header(header); > + err = spl_parse_image_header(header); > + if (err) > + return err; > err = spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, > spl_image.size, (void *)spl_image.load_addr); > } > diff --git a/include/spl.h b/include/spl.h > index de4f70a..7edfab4 100644 > --- a/include/spl.h > +++ b/include/spl.h > @@ -56,7 +56,7 @@ void preloader_console_init(void); > u32 spl_boot_device(void); > u32 spl_boot_mode(void); > void spl_set_header_raw_uboot(void); > -void spl_parse_image_header(const struct image_header *header); > +int spl_parse_image_header(const struct image_header *header); > void spl_board_prepare_for_linux(void); > void __noreturn jump_to_image_linux(void *arg); > int spl_start_uboot(void); > -- > 2.7.0 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot -- --- Regards, Nishanth Menon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot