diff mbox

[U-Boot,1/3] SPL: Let spl_parse_image_header() return value

Message ID 1461883496-9674-1-git-send-email-marex@denx.de
State Accepted
Commit 7e0f22674ae871460706f9cc8653487bb51e0804
Delegated to: Stefano Babic
Headers show

Commit Message

Marek Vasut April 28, 2016, 10:44 p.m. UTC
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 <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Cc: Peng Fan <van.freenix@gmail.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Tom Rini <trini@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(-)

Comments

Nishanth Menon May 20, 2016, 9:56 p.m. UTC | #1
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 <marex@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 <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@nxp.com>
> Cc: Peng Fan <van.freenix@gmail.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Tom Rini <trini@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
Fabio Estevam May 21, 2016, 12:22 a.m. UTC | #2
On Fri, May 20, 2016 at 6:56 PM, Nishanth Menon <nm@ti.com> 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/
Suman Anna May 23, 2016, 3:57 p.m. UTC | #3
On 05/20/2016 07:22 PM, Fabio Estevam wrote:
> On Fri, May 20, 2016 at 6:56 PM, Nishanth Menon <nm@ti.com> 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
diff mbox

Patch

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