[U-Boot] [PATCH 24/27] spl: Update ext functions to take an spl_image parameter

Simon Glass sjg at chromium.org
Sun Sep 18 21:45:13 CEST 2016


Update the ext loader to avoid using the spl_image global variable.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 common/spl/spl_ext.c            | 21 ++++++++++++---------
 common/spl/spl_mmc.c            |  4 ++--
 drivers/mtd/spi/sunxi_spi_spl.c |  9 +++++----
 include/spl.h                   |  6 ++++--
 4 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c
index e5af24e..b93e1ea 100644
--- a/common/spl/spl_ext.c
+++ b/common/spl/spl_ext.c
@@ -10,9 +10,9 @@
 #include <image.h>
 
 #ifdef CONFIG_SPL_EXT_SUPPORT
-int spl_load_image_ext(struct blk_desc *block_dev,
-						int partition,
-						const char *filename)
+int spl_load_image_ext(struct spl_image_info *spl_image,
+		       struct blk_desc *block_dev, int partition,
+		       const char *filename)
 {
 	s32 err;
 	struct image_header *header;
@@ -48,13 +48,13 @@ int spl_load_image_ext(struct blk_desc *block_dev,
 		goto end;
 	}
 
-	err = spl_parse_image_header(&spl_image, header);
+	err = spl_parse_image_header(spl_image, header);
 	if (err < 0) {
 		puts("spl: ext: failed to parse image header\n");
 		goto end;
 	}
 
-	err = ext4fs_read((char *)spl_image.load_addr, filelen, &actlen);
+	err = ext4fs_read((char *)spl_image->load_addr, filelen, &actlen);
 
 end:
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
@@ -67,7 +67,8 @@ end:
 }
 
 #ifdef CONFIG_SPL_OS_BOOT
-int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
+int spl_load_image_ext_os(struct spl_image_info *spl_image,
+			  struct blk_desc *block_dev, int partition)
 {
 	int err;
 	__maybe_unused loff_t filelen, actlen;
@@ -104,7 +105,8 @@ int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
 		}
 		file = getenv("falcon_image_file");
 		if (file) {
-			err = spl_load_image_ext(block_dev, partition, file);
+			err = spl_load_image_ext(spl_image, block_dev,
+						 partition, file);
 			if (err != 0) {
 				puts("spl: falling back to default\n");
 				goto defaults;
@@ -134,11 +136,12 @@ defaults:
 		return -1;
 	}
 
-	return spl_load_image_ext(block_dev, partition,
+	return spl_load_image_ext(spl_image, block_dev, partition,
 			CONFIG_SPL_FS_LOAD_KERNEL_NAME);
 }
 #else
-int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
+int spl_load_image_ext_os(struct spl_image_info *spl_image,
+			  struct blk_desc *block_dev, int partition)
 {
 	return -ENOSYS;
 }
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index 6536e66..5f5d9d0 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -245,13 +245,13 @@ static int spl_mmc_do_fs_boot(struct spl_image_info *spl_image, struct mmc *mmc)
 #endif
 #ifdef CONFIG_SPL_EXT_SUPPORT
 	if (!spl_start_uboot()) {
-		err = spl_load_image_ext_os(&mmc->block_dev,
+		err = spl_load_image_ext_os(spl_image, &mmc->block_dev,
 			CONFIG_SYS_MMCSD_FS_BOOT_PARTITION);
 		if (!err)
 			return err;
 	}
 #ifdef CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
-	err = spl_load_image_ext(&mmc->block_dev,
+	err = spl_load_image_ext(spl_image, &mmc->block_dev,
 				 CONFIG_SYS_MMCSD_FS_BOOT_PARTITION,
 				 CONFIG_SPL_FS_LOAD_PAYLOAD_NAME);
 	if (!err)
diff --git a/drivers/mtd/spi/sunxi_spi_spl.c b/drivers/mtd/spi/sunxi_spi_spl.c
index 70d6d15..67c7edd 100644
--- a/drivers/mtd/spi/sunxi_spi_spl.c
+++ b/drivers/mtd/spi/sunxi_spi_spl.c
@@ -262,7 +262,8 @@ static void spi0_read_data(void *buf, u32 addr, u32 len)
 
 /*****************************************************************************/
 
-static int spl_spi_load_image(struct spl_boot_device *bootdev)
+static int spl_spi_load_image(struct spl_image_info *spl_image,
+			      struct spl_boot_device *bootdev)
 {
 	int err;
 	struct image_header *header;
@@ -271,12 +272,12 @@ static int spl_spi_load_image(struct spl_boot_device *bootdev)
 	spi0_init();
 
 	spi0_read_data((void *)header, CONFIG_SYS_SPI_U_BOOT_OFFS, 0x40);
-	err = spl_parse_image_header(&spl_image, header);
+	err = spl_parse_image_header(spl_image, header);
 	if (err)
 		return err;
 
-	spi0_read_data((void *)spl_image.load_addr, CONFIG_SYS_SPI_U_BOOT_OFFS,
-		       spl_image.size);
+	spi0_read_data((void *)spl_image->load_addr, CONFIG_SYS_SPI_U_BOOT_OFFS,
+		       spl_image->size);
 
 	spi0_deinit();
 	return 0;
diff --git a/include/spl.h b/include/spl.h
index 72cb96c..25f6ffe 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -191,9 +191,11 @@ int spl_load_image_fat_os(struct blk_desc *block_dev, int partition);
 void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image);
 
 /* SPL EXT image functions */
-int spl_load_image_ext(struct blk_desc *block_dev, int partition,
+int spl_load_image_ext(struct spl_image_info *spl_image,
+		       struct blk_desc *block_dev, int partition,
 		       const char *filename);
-int spl_load_image_ext_os(struct blk_desc *block_dev, int partition);
+int spl_load_image_ext_os(struct spl_image_info *spl_image,
+			  struct blk_desc *block_dev, int partition);
 
 /**
  * spl_init() - Set up device tree and driver model in SPL if enabled
-- 
2.8.0.rc3.226.g39d4020



More information about the U-Boot mailing list