For some reason this code was put in the main spl.c file. Move it out
to the FIT implementation where it belongs.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 common/spl/spl.c     | 108 +++----------------------------------------
 common/spl/spl_fit.c |  93 +++++++++++++++++++++++++++++++++++++
 include/spl.h        |  11 +++++
 3 files changed, 111 insertions(+), 101 deletions(-)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index 3e3e13057f1..8f87a27e61f 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -260,102 +260,6 @@ void spl_set_header_raw_uboot(struct spl_image_info 
*spl_image)
 }
 #endif
 
-#if CONFIG_IS_ENABLED(LOAD_FIT_FULL)
-/* Parse and load full fitImage in SPL */
-static int spl_load_fit_image(struct spl_image_info *spl_image,
-                             const struct legacy_img_hdr *header)
-{
-       struct bootm_headers images;
-       const char *fit_uname_config = NULL;
-       uintptr_t fdt_hack;
-       const char *uname;
-       ulong fw_data = 0, dt_data = 0, img_data = 0;
-       ulong fw_len = 0, dt_len = 0, img_len = 0;
-       int idx, conf_noffset;
-       int ret;
-
-#ifdef CONFIG_SPL_FIT_SIGNATURE
-       images.verify = 1;
-#endif
-       ret = fit_image_load(&images, (ulong)header,
-                            NULL, &fit_uname_config,
-                            IH_ARCH_DEFAULT, IH_TYPE_STANDALONE, -1,
-                            FIT_LOAD_OPTIONAL, &fw_data, &fw_len);
-       if (ret >= 0) {
-               printf("DEPRECATED: 'standalone = ' property.");
-               printf("Please use either 'firmware =' or 'kernel ='\n");
-       } else {
-               ret = fit_image_load(&images, (ulong)header, NULL,
-                                    &fit_uname_config, IH_ARCH_DEFAULT,
-                                    IH_TYPE_FIRMWARE, -1, FIT_LOAD_OPTIONAL,
-                                    &fw_data, &fw_len);
-       }
-
-       if (ret < 0) {
-               ret = fit_image_load(&images, (ulong)header, NULL,
-                                    &fit_uname_config, IH_ARCH_DEFAULT,
-                                    IH_TYPE_KERNEL, -1, FIT_LOAD_OPTIONAL,
-                                    &fw_data, &fw_len);
-       }
-
-       if (ret < 0)
-               return ret;
-
-       spl_image->size = fw_len;
-       spl_image->entry_point = fw_data;
-       spl_image->load_addr = fw_data;
-       if (fit_image_get_os(header, ret, &spl_image->os))
-               spl_image->os = IH_OS_INVALID;
-       spl_image->name = genimg_get_os_name(spl_image->os);
-
-       debug(SPL_TPL_PROMPT "payload image: %32s load addr: 0x%lx size: %d\n",
-             spl_image->name, spl_image->load_addr, spl_image->size);
-
-#ifdef CONFIG_SPL_FIT_SIGNATURE
-       images.verify = 1;
-#endif
-       ret = fit_image_load(&images, (ulong)header, NULL, &fit_uname_config,
-                      IH_ARCH_DEFAULT, IH_TYPE_FLATDT, -1,
-                      FIT_LOAD_OPTIONAL, &dt_data, &dt_len);
-       if (ret >= 0) {
-               spl_image->fdt_addr = (void *)dt_data;
-
-               if (spl_image->os == IH_OS_U_BOOT) {
-                       /* HACK: U-Boot expects FDT at a specific address */
-                       fdt_hack = spl_image->load_addr + spl_image->size;
-                       fdt_hack = (fdt_hack + 3) & ~3;
-                       debug("Relocating FDT to %p\n", spl_image->fdt_addr);
-                       memcpy((void *)fdt_hack, spl_image->fdt_addr, dt_len);
-               }
-       }
-
-       conf_noffset = fit_conf_get_node((const void *)header,
-                                        fit_uname_config);
-       if (conf_noffset < 0)
-               return 0;
-
-       for (idx = 0;
-            uname = fdt_stringlist_get((const void *)header, conf_noffset,
-                                       FIT_LOADABLE_PROP, idx,
-                               NULL), uname;
-            idx++)
-       {
-#ifdef CONFIG_SPL_FIT_SIGNATURE
-               images.verify = 1;
-#endif
-               ret = fit_image_load(&images, (ulong)header,
-                                    &uname, &fit_uname_config,
-                                    IH_ARCH_DEFAULT, IH_TYPE_LOADABLE, -1,
-                                    FIT_LOAD_OPTIONAL_NON_ZERO,
-                                    &img_data, &img_len);
-               if (ret < 0)
-                       return ret;
-       }
-
-       return 0;
-}
-#endif
-
 __weak int spl_parse_board_header(struct spl_image_info *spl_image,
                                  const struct spl_boot_device *bootdev,
                                  const void *image_header, size_t size)
@@ -375,12 +279,14 @@ int spl_parse_image_header(struct spl_image_info 
*spl_image,
                           const struct spl_boot_device *bootdev,
                           const struct legacy_img_hdr *header)
 {
-#if CONFIG_IS_ENABLED(LOAD_FIT_FULL)
-       int ret = spl_load_fit_image(spl_image, header);
+       int ret;
 
-       if (!ret)
-               return ret;
-#endif
+       if (CONFIG_IS_ENABLED(LOAD_FIT_FULL)) {
+               ret = spl_load_fit_image(spl_image, header);
+
+               if (!ret)
+                       return ret;
+       }
        if (image_get_magic(header) == IH_MAGIC) {
                int ret;
 
diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
index 8e7d033dd1a..5b5f6c62045 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -826,3 +826,96 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
 
        return 0;
 }
+
+/* Parse and load full fitImage in SPL */
+int spl_load_fit_image(struct spl_image_info *spl_image,
+                      const struct legacy_img_hdr *header)
+{
+       struct bootm_headers images;
+       const char *fit_uname_config = NULL;
+       uintptr_t fdt_hack;
+       const char *uname;
+       ulong fw_data = 0, dt_data = 0, img_data = 0;
+       ulong fw_len = 0, dt_len = 0, img_len = 0;
+       int idx, conf_noffset;
+       int ret;
+
+#ifdef CONFIG_SPL_FIT_SIGNATURE
+       images.verify = 1;
+#endif
+       ret = fit_image_load(&images, (ulong)header,
+                            NULL, &fit_uname_config,
+                            IH_ARCH_DEFAULT, IH_TYPE_STANDALONE, -1,
+                            FIT_LOAD_OPTIONAL, &fw_data, &fw_len);
+       if (ret >= 0) {
+               printf("DEPRECATED: 'standalone = ' property.");
+               printf("Please use either 'firmware =' or 'kernel ='\n");
+       } else {
+               ret = fit_image_load(&images, (ulong)header, NULL,
+                                    &fit_uname_config, IH_ARCH_DEFAULT,
+                                    IH_TYPE_FIRMWARE, -1, FIT_LOAD_OPTIONAL,
+                                    &fw_data, &fw_len);
+       }
+
+       if (ret < 0) {
+               ret = fit_image_load(&images, (ulong)header, NULL,
+                                    &fit_uname_config, IH_ARCH_DEFAULT,
+                                    IH_TYPE_KERNEL, -1, FIT_LOAD_OPTIONAL,
+                                    &fw_data, &fw_len);
+       }
+
+       if (ret < 0)
+               return ret;
+
+       spl_image->size = fw_len;
+       spl_image->entry_point = fw_data;
+       spl_image->load_addr = fw_data;
+       if (fit_image_get_os(header, ret, &spl_image->os))
+               spl_image->os = IH_OS_INVALID;
+       spl_image->name = genimg_get_os_name(spl_image->os);
+
+       debug(SPL_TPL_PROMPT "payload image: %32s load addr: 0x%lx size: %d\n",
+             spl_image->name, spl_image->load_addr, spl_image->size);
+
+#ifdef CONFIG_SPL_FIT_SIGNATURE
+       images.verify = 1;
+#endif
+       ret = fit_image_load(&images, (ulong)header, NULL, &fit_uname_config,
+                            IH_ARCH_DEFAULT, IH_TYPE_FLATDT, -1,
+                            FIT_LOAD_OPTIONAL, &dt_data, &dt_len);
+       if (ret >= 0) {
+               spl_image->fdt_addr = (void *)dt_data;
+
+               if (spl_image->os == IH_OS_U_BOOT) {
+                       /* HACK: U-Boot expects FDT at a specific address */
+                       fdt_hack = spl_image->load_addr + spl_image->size;
+                       fdt_hack = (fdt_hack + 3) & ~3;
+                       debug("Relocating FDT to %p\n", spl_image->fdt_addr);
+                       memcpy((void *)fdt_hack, spl_image->fdt_addr, dt_len);
+               }
+       }
+
+       conf_noffset = fit_conf_get_node((const void *)header,
+                                        fit_uname_config);
+       if (conf_noffset < 0)
+               return 0;
+
+       for (idx = 0;
+            uname = fdt_stringlist_get((const void *)header, conf_noffset,
+                                       FIT_LOADABLE_PROP, idx,
+                               NULL), uname;
+            idx++) {
+#ifdef CONFIG_SPL_FIT_SIGNATURE
+               images.verify = 1;
+#endif
+               ret = fit_image_load(&images, (ulong)header,
+                                    &uname, &fit_uname_config,
+                                    IH_ARCH_DEFAULT, IH_TYPE_LOADABLE, -1,
+                                    FIT_LOAD_OPTIONAL_NON_ZERO,
+                                    &img_data, &img_len);
+               if (ret < 0)
+                       return ret;
+       }
+
+       return 0;
+}
diff --git a/include/spl.h b/include/spl.h
index 60b55b75195..e958ace2cc6 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -910,4 +910,15 @@ struct legacy_img_hdr *spl_get_load_buffer(ssize_t offset, 
size_t size);
 
 void board_boot_order(u32 *spl_boot_list);
 void spl_save_restore_data(void);
+
+/**
+ * spl_load_fit_image() - Fully parse and a FIT image in SPL
+ *
+ * @spl_image: SPL Image data to fill in
+ * @header: Pointer to FIT image
+ * Return 0 if OK, -ve on error
+ */
+int spl_load_fit_image(struct spl_image_info *spl_image,
+                      const struct legacy_img_hdr *header);
+
 #endif
-- 
2.42.0.rc2.253.gd59a3bf2b4-goog

Reply via email to