spl: Support loading a FIT from SPI

Detect a FIT when loading from SPI and handle it using the
new FIT SPL support.

Reviewed-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
This commit is contained in:
Lokesh Vutla 2016-05-24 10:34:40 +05:30 committed by Tom Rini
parent 97ca364faf
commit 00d559561e

View file

@ -48,6 +48,18 @@ static int spi_load_image_os(struct spi_flash *flash,
}
#endif
static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector,
ulong count, void *buf)
{
struct spi_flash *flash = load->dev;
ulong ret;
ret = spi_flash_read(flash, sector, count, buf);
if (!ret)
return count;
else
return 0;
}
/*
* The main entry for SPI booting. It's necessary that SDRAM is already
* configured and available since this code loads the main U-Boot image
@ -85,11 +97,26 @@ int spl_spi_load_image(void)
if (err)
return err;
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);
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT)) {
struct spl_load_info load;
debug("Found FIT\n");
load.dev = flash;
load.priv = NULL;
load.filename = NULL;
load.bl_len = 1;
load.read = spl_spi_fit_read;
err = spl_load_simple_fit(&load,
CONFIG_SYS_SPI_U_BOOT_OFFS,
header);
} else {
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);
}
}
return err;