]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: Move the full FIT code to spl_fit.c
authorSimon Glass <sjg@chromium.org>
Tue, 26 Sep 2023 14:14:34 +0000 (08:14 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 6 Oct 2023 18:38:12 +0000 (14:38 -0400)
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 <sjg@chromium.org>
common/spl/spl.c
common/spl/spl_fit.c
include/spl.h

index 2239ee933b88d6ae198872f80066a7f2b0385b6a..9f605b324076ab60de181acf78fa21aecebb2eb8 100644 (file)
@@ -256,102 +256,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)
@@ -371,12 +275,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;
 
index 822d0ce0e448fc89ad08111c9efe7093a9d77eb7..9373a562b26279583e782f9b564b9e76b527dfc2 100644 (file)
@@ -827,3 +827,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;
+}
index 6c6ca07dbcc1697d4fd40444befd1b1a97992207..59c508280bce05f39d59f86aa82092f4618ee9fa 100644 (file)
@@ -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