[U-Boot] [PATCH 1/2] spl: nor: Add FIT support

Add support of loading FIT image from NOR flash.
Signed-off-by: York Sun york.sun@nxp.com --- common/spl/spl_nor.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index bb6194f..b919fff 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -6,10 +6,25 @@ #include <common.h> #include <spl.h>
+#ifdef CONFIG_SPL_LOAD_FIT +static ulong spl_nor_load_read(struct spl_load_info *load, ulong sector, + ulong count, void *buf) +{ + debug("%s: sector %lx, count %lx, buf %p\n", + __func__, sector, count, buf); + memcpy(buf, (void *)sector, count); + + return count; +} +#endif + static int spl_nor_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { int ret; + __maybe_unused const struct image_header *header; + __maybe_unused struct spl_load_info load; + /* * Loading of the payload to SDRAM is done with skipping of * the mkimage header in this SPL NOR driver @@ -18,14 +33,24 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
#ifdef CONFIG_SPL_OS_BOOT if (!spl_start_uboot()) { - const struct image_header *header; - /* * Load Linux from its location in NOR flash to its defined * location in SDRAM */ header = (const struct image_header *)CONFIG_SYS_OS_BASE; +#ifdef CONFIG_SPL_LOAD_FIT + if (image_get_magic(header) == FDT_MAGIC) { + debug("Found FIT\n"); + load.bl_len = 1; + load.read = spl_nor_load_read;
+ ret = spl_load_simple_fit(spl_image, &load, + CONFIG_SYS_OS_BASE, + (void *)header); + + return ret; + } +#endif if (image_get_os(header) == IH_OS_LINUX) { /* happy - was a Linux */
@@ -53,6 +78,19 @@ 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 */ +#ifdef CONFIG_SPL_LOAD_FIT + header = (const struct image_header *)CONFIG_SYS_UBOOT_BASE; + if (image_get_magic(header) == FDT_MAGIC) { + debug("Found FIT format U-Boot\n"); + load.bl_len = 1; + load.read = spl_nor_load_read; + ret = spl_load_simple_fit(spl_image, &load, + CONFIG_SYS_UBOOT_BASE, + (void *)header); + + return ret; + } +#endif ret = spl_parse_image_header(spl_image, (const struct image_header *)CONFIG_SYS_UBOOT_BASE); if (ret)

If FIT image is used, CONFIG_SYS_FDT_BASE is not needed.
Signed-off-by: York Sun york.sun@nxp.com --- common/spl/spl_nor.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index b919fff..969e319 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -62,8 +62,9 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, (void *)(CONFIG_SYS_OS_BASE + sizeof(struct image_header)), spl_image->size); - +#ifdef CONFIG_SYS_FDT_BASE spl_image->arg = (void *)CONFIG_SYS_FDT_BASE; +#endif
return 0; } else {

On Tue, Jun 26, 2018 at 10:10:04AM -0700, York Sun wrote:
If FIT image is used, CONFIG_SYS_FDT_BASE is not needed.
Signed-off-by: York Sun york.sun@nxp.com
Applied to u-boot/master, thanks!

On Tue, Jun 26, 2018 at 10:10:03AM -0700, York Sun wrote:
Add support of loading FIT image from NOR flash.
Signed-off-by: York Sun york.sun@nxp.com
Applied to u-boot/master, thanks!
participants (2)
-
Tom Rini
-
York Sun