spl: Support loading a FIT from NAND
Detect a FIT when loading from NAND and handle it using the new FIT SPL support. Reviewed-by: Tom Rini <trini@konsulko.com> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> [trini: Make sure we continue to use (void *)(unsigned long) for load_addr]. Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
0985294604
commit
8bd8877279
@ -9,6 +9,8 @@
|
|||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <nand.h>
|
#include <nand.h>
|
||||||
|
#include <libfdt_env.h>
|
||||||
|
#include <fdt.h>
|
||||||
|
|
||||||
#if defined(CONFIG_SPL_NAND_RAW_ONLY)
|
#if defined(CONFIG_SPL_NAND_RAW_ONLY)
|
||||||
int spl_nand_load_image(void)
|
int spl_nand_load_image(void)
|
||||||
@ -24,6 +26,19 @@ int spl_nand_load_image(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
static ulong spl_nand_fit_read(struct spl_load_info *load, ulong offs,
|
||||||
|
ulong size, void *dst)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = nand_spl_load_image(offs, size, dst);
|
||||||
|
if (!ret)
|
||||||
|
return size;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int spl_nand_load_element(int offset, struct image_header *header)
|
static int spl_nand_load_element(int offset, struct image_header *header)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@ -32,12 +47,24 @@ static int spl_nand_load_element(int offset, struct image_header *header)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = spl_parse_image_header(header);
|
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
|
||||||
if (err)
|
image_get_magic(header) == FDT_MAGIC) {
|
||||||
return err;
|
struct spl_load_info load;
|
||||||
|
|
||||||
return nand_spl_load_image(offset, spl_image.size,
|
debug("Found FIT\n");
|
||||||
(void *)(unsigned long)spl_image.load_addr);
|
load.dev = NULL;
|
||||||
|
load.priv = NULL;
|
||||||
|
load.filename = NULL;
|
||||||
|
load.bl_len = 1;
|
||||||
|
load.read = spl_nand_fit_read;
|
||||||
|
return spl_load_simple_fit(&load, offset, header);
|
||||||
|
} else {
|
||||||
|
err = spl_parse_image_header(header);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
return nand_spl_load_image(offset, spl_image.size,
|
||||||
|
(void *)(ulong)spl_image.load_addr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int spl_nand_load_image(void)
|
int spl_nand_load_image(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user