From: York Sun Date: Tue, 26 Jun 2018 17:10:03 +0000 (-0700) Subject: spl: nor: Add FIT support X-Git-Tag: v2025.01-rc5-pxa1908~3969 X-Git-Url: http://git.dujemihanovic.xyz/img/%7B%7B%20%28.OutputFormats.Get?a=commitdiff_plain;h=6ecd820f99177b4002f0518fbe5858b6a3032202;p=u-boot.git spl: nor: Add FIT support Add support of loading FIT image from NOR flash. Signed-off-by: York Sun --- diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index bb6194fafd..b919fffb30 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -6,10 +6,25 @@ #include #include +#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)