mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-11 07:24:46 +00:00
spl: Create a function to init spl_load_info
Rather than having every caller set this up individually, create a common init function. This allows new fields to be added without the risk of them being left uninited. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
This commit is contained in:
parent
50a1ed4335
commit
3fd11278ff
18 changed files with 57 additions and 76 deletions
|
@ -108,18 +108,13 @@ static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image,
|
|||
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) {
|
||||
struct spl_load_info load;
|
||||
|
||||
memset(&load, 0, sizeof(load));
|
||||
spl_set_bl_len(&load, pagesize);
|
||||
load.read = spl_romapi_read_seekable;
|
||||
spl_load_init(&load, spl_romapi_read_seekable, NULL, pagesize);
|
||||
return spl_load_simple_fit(spl_image, &load, offset, header);
|
||||
} else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) &&
|
||||
valid_container_hdr((void *)header)) {
|
||||
struct spl_load_info load;
|
||||
|
||||
memset(&load, 0, sizeof(load));
|
||||
spl_set_bl_len(&load, pagesize);
|
||||
load.read = spl_romapi_read_seekable;
|
||||
|
||||
spl_load_init(&load, spl_romapi_read_seekable, NULL, pagesize);
|
||||
ret = spl_load_imx_container(spl_image, &load, offset);
|
||||
} else {
|
||||
/* TODO */
|
||||
|
@ -341,10 +336,7 @@ static int spl_romapi_load_image_stream(struct spl_image_info *spl_image,
|
|||
ss.end = p;
|
||||
ss.pagesize = pagesize;
|
||||
|
||||
memset(&load, 0, sizeof(load));
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_romapi_read_stream;
|
||||
load.priv = &ss;
|
||||
spl_load_init(&load, spl_romapi_read_stream, &ss, 1);
|
||||
|
||||
return spl_load_simple_fit(spl_image, &load, (ulong)phdr, phdr);
|
||||
}
|
||||
|
|
|
@ -390,8 +390,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
|
|||
struct spl_load_info load;
|
||||
|
||||
debug("Found FIT image\n");
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spi_load_read;
|
||||
spl_load_init(&load, spi_load_read, NULL, 1);
|
||||
ret = spl_load_simple_fit(spl_image, &load,
|
||||
load_offset, header);
|
||||
} else {
|
||||
|
|
|
@ -221,9 +221,8 @@ int sandbox_spl_load_fit(char *fname, int maxlen, struct spl_image_info *image)
|
|||
int ret;
|
||||
int fd;
|
||||
|
||||
memset(&load, '\0', sizeof(load));
|
||||
spl_set_bl_len(&load, IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) ? 512 : 1);
|
||||
load.read = read_fit_image;
|
||||
spl_load_init(&load, read_fit_image, &load_ctx,
|
||||
IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) ? 512 : 1);
|
||||
|
||||
ret = sandbox_find_next_phase(fname, maxlen, true);
|
||||
if (ret) {
|
||||
|
|
|
@ -80,11 +80,8 @@ int spl_blk_load_image(struct spl_image_info *spl_image,
|
|||
return ret;
|
||||
}
|
||||
|
||||
load.read = spl_fit_read;
|
||||
if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN))
|
||||
spl_set_bl_len(&load, ARCH_DMA_MINALIGN);
|
||||
else
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.priv = &dev;
|
||||
spl_load_init(&load, spl_fit_read, &dev,
|
||||
IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN) ?
|
||||
ARCH_DMA_MINALIGN : 1);
|
||||
return spl_load(spl_image, bootdev, &load, filesize, 0);
|
||||
}
|
||||
|
|
|
@ -51,8 +51,7 @@ int spl_load_image_ext(struct spl_image_info *spl_image,
|
|||
goto end;
|
||||
}
|
||||
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_fit_read;
|
||||
spl_load_init(&load, spl_fit_read, NULL, 1);
|
||||
err = spl_load(spl_image, bootdev, &load, filelen, 0);
|
||||
|
||||
end:
|
||||
|
|
|
@ -83,12 +83,10 @@ int spl_load_image_fat(struct spl_image_info *spl_image,
|
|||
size = 0;
|
||||
}
|
||||
|
||||
load.read = spl_fit_read;
|
||||
if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN))
|
||||
spl_set_bl_len(&load, ARCH_DMA_MINALIGN);
|
||||
else
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.priv = (void *)filename;
|
||||
spl_load_init(&load, spl_fit_read, (void *)filename,
|
||||
IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN) ?
|
||||
ARCH_DMA_MINALIGN : 1);
|
||||
|
||||
err = spl_load(spl_image, bootdev, &load, size, 0);
|
||||
|
||||
end:
|
||||
|
|
|
@ -46,9 +46,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image,
|
|||
struct blk_desc *bd = mmc_get_blk_desc(mmc);
|
||||
struct spl_load_info load;
|
||||
|
||||
load.priv = bd;
|
||||
spl_set_bl_len(&load, bd->blksz);
|
||||
load.read = h_spl_load_read;
|
||||
spl_load_init(&load, h_spl_load_read, bd, bd->blksz);
|
||||
ret = spl_load(spl_image, bootdev, &load, 0, sector << bd->log2blksz);
|
||||
if (ret) {
|
||||
puts("mmc_load_image_raw_sector: mmc block read error\n");
|
||||
|
|
|
@ -71,9 +71,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image,
|
|||
{
|
||||
struct spl_load_info load;
|
||||
|
||||
load.priv = &offset;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_nand_read;
|
||||
spl_load_init(&load, spl_nand_read, &offset, 1);
|
||||
return spl_load(spl_image, bootdev, &load, 0, offset);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,8 +47,7 @@ static int spl_net_load_image(struct spl_image_info *spl_image,
|
|||
return rv;
|
||||
}
|
||||
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_net_load_read;
|
||||
spl_load_init(&load, spl_net_load_read, NULL, 1);
|
||||
return spl_load(spl_image, bootdev, &load, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -49,8 +49,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
|
|||
int ret;
|
||||
|
||||
debug("Found FIT\n");
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_nor_load_read;
|
||||
spl_load_init(&load, spl_nor_load_read, NULL, 1);
|
||||
|
||||
ret = spl_load_simple_fit(spl_image, &load,
|
||||
CONFIG_SYS_OS_BASE,
|
||||
|
@ -93,8 +92,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
|
|||
* Load real U-Boot from its location in NOR flash to its
|
||||
* defined location in SDRAM
|
||||
*/
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_nor_load_read;
|
||||
spl_load_init(&load, spl_nor_load_read, NULL, 1);
|
||||
return spl_load(spl_image, bootdev, &load, 0, spl_nor_get_uboot_base());
|
||||
}
|
||||
SPL_LOAD_IMAGE_METHOD("NOR", 0, BOOT_DEVICE_NOR, spl_nor_load_image);
|
||||
|
|
|
@ -69,8 +69,7 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
|
|||
struct spl_load_info load;
|
||||
|
||||
debug("Found FIT\n");
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_ram_load_read;
|
||||
spl_load_init(&load, spl_ram_load_read, NULL, 1);
|
||||
ret = spl_load_simple_fit(spl_image, &load, 0, header);
|
||||
} else {
|
||||
ulong u_boot_pos = spl_get_image_pos();
|
||||
|
|
|
@ -43,9 +43,7 @@ static int spl_smh_load_image(struct spl_image_info *spl_image,
|
|||
}
|
||||
len = ret;
|
||||
|
||||
load.read = smh_fit_read;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.priv = &fd;
|
||||
spl_load_init(&load, smh_fit_read, &fd, 1);
|
||||
ret = spl_load(spl_image, bootdev, &load, len, 0);
|
||||
if (ret)
|
||||
log_debug("could not read %s: %d\n", filename, ret);
|
||||
|
|
|
@ -77,9 +77,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
load.priv = flash;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_spi_fit_read;
|
||||
spl_load_init(&load, spl_spi_fit_read, flash, 1);
|
||||
|
||||
#if CONFIG_IS_ENABLED(OS_BOOT)
|
||||
if (spl_start_uboot()) {
|
||||
|
|
|
@ -132,11 +132,9 @@ int spl_ymodem_load_image(struct spl_image_info *spl_image,
|
|||
struct ymodem_fit_info info;
|
||||
|
||||
debug("Found FIT\n");
|
||||
load.priv = (void *)&info;
|
||||
spl_set_bl_len(&load, 1);
|
||||
spl_load_init(&load, ymodem_read_fit, (void *)&info, 1);
|
||||
info.buf = buf;
|
||||
info.image_read = BUF_SIZE;
|
||||
load.read = ymodem_read_fit;
|
||||
ret = spl_load_simple_fit(spl_image, &load, 0, (void *)buf);
|
||||
size = info.image_read;
|
||||
|
||||
|
|
|
@ -842,9 +842,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image,
|
|||
struct spl_load_info load;
|
||||
|
||||
debug("Found FIT\n");
|
||||
load.priv = header;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = sdp_load_read;
|
||||
spl_load_init(&load, sdp_load_read, header, 1);
|
||||
spl_load_simple_fit(spl_image, &load, 0,
|
||||
header);
|
||||
|
||||
|
@ -855,9 +853,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image,
|
|||
valid_container_hdr((void *)header)) {
|
||||
struct spl_load_info load;
|
||||
|
||||
load.priv = header;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = sdp_load_read;
|
||||
spl_load_init(&load, sdp_load_read, header, 1);
|
||||
spl_load_imx_container(spl_image, &load, 0);
|
||||
return SDP_EXIT;
|
||||
}
|
||||
|
|
|
@ -282,28 +282,32 @@ static inline void *spl_image_fdt_addr(struct spl_image_info *info)
|
|||
#endif
|
||||
}
|
||||
|
||||
struct spl_load_info;
|
||||
|
||||
/**
|
||||
* spl_load_reader() - Read from device
|
||||
*
|
||||
* @load: Information about the load state
|
||||
* @offset: Offset to read from in bytes. This must be a multiple of
|
||||
* @load->bl_len.
|
||||
* @count: Number of bytes to read. This must be a multiple of
|
||||
* @load->bl_len.
|
||||
* @buf: Buffer to read into
|
||||
* @return number of bytes read, 0 on error
|
||||
*/
|
||||
typedef ulong (*spl_load_reader)(struct spl_load_info *load, ulong sector,
|
||||
ulong count, void *buf);
|
||||
|
||||
/**
|
||||
* Information required to load data from a device
|
||||
*
|
||||
* @read: Function to call to read from the device
|
||||
* @priv: Private data for the device
|
||||
* @bl_len: Block length for reading in bytes
|
||||
* @read: Function to call to read from the device
|
||||
*/
|
||||
struct spl_load_info {
|
||||
spl_load_reader read;
|
||||
void *priv;
|
||||
/**
|
||||
* read() - Read from device
|
||||
*
|
||||
* @load: Information about the load state
|
||||
* @offset: Offset to read from in bytes. This must be a multiple of
|
||||
* @load->bl_len.
|
||||
* @count: Number of bytes to read. This must be a multiple of
|
||||
* @load->bl_len.
|
||||
* @buf: Buffer to read into
|
||||
* @return number of bytes read, 0 on error
|
||||
*/
|
||||
ulong (*read)(struct spl_load_info *load, ulong sector, ulong count,
|
||||
void *buf);
|
||||
#if IS_ENABLED(CONFIG_SPL_LOAD_BLOCK)
|
||||
int bl_len;
|
||||
#endif
|
||||
|
@ -328,6 +332,18 @@ static inline void spl_set_bl_len(struct spl_load_info *info, int bl_len)
|
|||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* spl_load_init() - Set up a new spl_load_info structure
|
||||
*/
|
||||
static inline void spl_load_init(struct spl_load_info *load,
|
||||
spl_load_reader h_read, void *priv,
|
||||
uint bl_len)
|
||||
{
|
||||
load->read = h_read;
|
||||
load->priv = priv;
|
||||
spl_set_bl_len(load, bl_len);
|
||||
}
|
||||
|
||||
/*
|
||||
* We need to know the position of U-Boot in memory so we can jump to it. We
|
||||
* allow any U-Boot binary to be used (u-boot.bin, u-boot-nodtb.bin,
|
||||
|
|
|
@ -343,9 +343,7 @@ static int spl_test_image(struct unit_test_state *uts, const char *test_name,
|
|||
} else {
|
||||
struct spl_load_info load;
|
||||
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.priv = img;
|
||||
load.read = spl_test_read;
|
||||
spl_load_init(&load, spl_test_read, img, 1);
|
||||
if (type == IMX8)
|
||||
ut_assertok(spl_load_imx_container(&info_read, &load,
|
||||
0));
|
||||
|
|
|
@ -20,3 +20,4 @@ static int spl_test_load(struct unit_test_state *uts)
|
|||
return 0;
|
||||
}
|
||||
SPL_TEST(spl_test_load, 0);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue