mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 07:17:10 +00:00
spl: spi: Consolidate spi_load_image_os into spl_spi_load_image
spi_load_image_os performs almost the same steps as the non-falcon-boot path of spl_spi_load_image. The load address is different, and it also loads a device tree, but that's it. Refactor the boot process so that they can both use the same load function. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
a04d5f60a5
commit
14509a28aa
1 changed files with 14 additions and 40 deletions
|
@ -21,41 +21,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <dm/ofnode.h>
|
||||
|
||||
#if CONFIG_IS_ENABLED(OS_BOOT)
|
||||
/*
|
||||
* Load the kernel, check for a valid header we can parse, and if found load
|
||||
* the kernel and then device tree.
|
||||
*/
|
||||
static int spi_load_image_os(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev,
|
||||
struct spi_flash *flash,
|
||||
struct legacy_img_hdr *header)
|
||||
{
|
||||
int err;
|
||||
|
||||
/* Read for a header, parse or error out. */
|
||||
spi_flash_read(flash, CFG_SYS_SPI_KERNEL_OFFS, sizeof(*header),
|
||||
(void *)header);
|
||||
|
||||
if (image_get_magic(header) != IH_MAGIC)
|
||||
return -1;
|
||||
|
||||
err = spl_parse_image_header(spl_image, bootdev, header);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
spi_flash_read(flash, CFG_SYS_SPI_KERNEL_OFFS,
|
||||
spl_image->size, (void *)spl_image->load_addr);
|
||||
|
||||
/* Read device tree. */
|
||||
spi_flash_read(flash, CFG_SYS_SPI_ARGS_OFFS,
|
||||
CFG_SYS_SPI_ARGS_SIZE,
|
||||
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector,
|
||||
ulong count, void *buf)
|
||||
{
|
||||
|
@ -112,9 +77,21 @@ 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;
|
||||
|
||||
#if CONFIG_IS_ENABLED(OS_BOOT)
|
||||
if (!spl_start_uboot() && !spi_load_image_os(spl_image, bootdev, flash, header))
|
||||
return 0;
|
||||
if (spl_start_uboot()) {
|
||||
int err = spl_load(spl_image, bootdev, &load, 0,
|
||||
CFG_SYS_SPI_KERNEL_OFFS);
|
||||
|
||||
if (!err)
|
||||
/* Read device tree. */
|
||||
return spi_flash_read(flash, CFG_SYS_SPI_ARGS_OFFS,
|
||||
CFG_SYS_SPI_ARGS_SIZE,
|
||||
(void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
|
||||
}
|
||||
#endif
|
||||
|
||||
payload_offs = spl_spi_get_uboot_offs(flash);
|
||||
|
@ -123,9 +100,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
|
|||
payload_offs);
|
||||
}
|
||||
|
||||
load.priv = flash;
|
||||
spl_set_bl_len(&load, 1);
|
||||
load.read = spl_spi_fit_read;
|
||||
err = spl_load(spl_image, bootdev, &load, 0, payload_offs);
|
||||
if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET))
|
||||
err = spi_nor_remove(flash);
|
||||
|
|
Loading…
Add table
Reference in a new issue