]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: Convert nor to spl_load
authorSean Anderson <seanga2@gmail.com>
Wed, 8 Nov 2023 16:48:53 +0000 (11:48 -0500)
committerTom Rini <trini@konsulko.com>
Thu, 16 Nov 2023 18:49:14 +0000 (13:49 -0500)
This converts the nor load method to use spl_load. As a result it also
adds support for LOAD_FIT_FULL. Since this is the last caller of
spl_load_legacy_img, it has been removed.

We can't load FITs with external data with SPL_LOAD_FIT_FULL, so disable the
test in that case. No boards enable SPL_NOR_SUPPORT and SPL_LOAD_FIT_FULL, so
this is not a regression.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/spl/spl_legacy.c
common/spl/spl_nor.c
include/spl_load.h
test/image/spl_load_nor.c

index a561939b4f046a66e90902fde6977b19442e9f92..08687ca8f6c49b9e9a03d9da4d9eaa01c74c4d9c 100644 (file)
@@ -118,64 +118,3 @@ int spl_load_legacy_lzma(struct spl_image_info *spl_image,
        spl_image->size = lzma_len;
        return 0;
 }
-
-/*
- * This function is added explicitly to avoid code size increase, when
- * no compression method is enabled. The compiler will optimize the
- * following switch/case statement in spl_load_legacy_img() away due to
- * Dead Code Elimination.
- */
-static inline int spl_image_get_comp(const struct legacy_img_hdr *hdr)
-{
-       if (IS_ENABLED(CONFIG_SPL_LZMA))
-               return image_get_comp(hdr);
-
-       return IH_COMP_NONE;
-}
-
-int spl_load_legacy_img(struct spl_image_info *spl_image,
-                       struct spl_boot_device *bootdev,
-                       struct spl_load_info *load, ulong offset,
-                       struct legacy_img_hdr *hdr)
-{
-       ulong dataptr;
-       int ret;
-
-       /*
-        * If the payload is compressed, the decompressed data should be
-        * directly write to its load address.
-        */
-       if (spl_image_get_comp(hdr) != IH_COMP_NONE)
-               spl_image->flags |= SPL_COPY_PAYLOAD_ONLY;
-
-       ret = spl_parse_image_header(spl_image, bootdev, hdr);
-       if (ret)
-               return ret;
-
-       /* Read image */
-       switch (spl_image_get_comp(hdr)) {
-       case IH_COMP_NONE:
-               dataptr = offset;
-
-               /*
-                * Image header will be skipped only if SPL_COPY_PAYLOAD_ONLY
-                * is set
-                */
-               if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY)
-                       dataptr += sizeof(*hdr);
-
-               load->read(load, dataptr, spl_image->size,
-                          map_sysmem(spl_image->load_addr, spl_image->size));
-               break;
-
-       case IH_COMP_LZMA:
-               return spl_load_legacy_lzma(spl_image, load, offset);
-
-       default:
-               debug("Compression method %s is not supported\n",
-                     genimg_get_comp_short_name(image_get_comp(hdr)));
-               return -EINVAL;
-       }
-
-       return 0;
-}
index aad230db4d328a5d0a61c6fe69ea1f381e48e6b6..70745114efedf438f422db688297d34388641fce 100644 (file)
@@ -7,8 +7,8 @@
 #include <image.h>
 #include <imx_container.h>
 #include <log.h>
-#include <mapmem.h>
 #include <spl.h>
+#include <spl_load.h>
 
 static ulong spl_nor_load_read(struct spl_load_info *load, ulong sector,
                               ulong count, void *buf)
@@ -28,8 +28,7 @@ unsigned long __weak spl_nor_get_uboot_base(void)
 static int spl_nor_load_image(struct spl_image_info *spl_image,
                              struct spl_boot_device *bootdev)
 {
-       struct legacy_img_hdr *header;
-       __maybe_unused struct spl_load_info load;
+       struct spl_load_info load;
 
        /*
         * Loading of the payload to SDRAM is done with skipping of
@@ -43,7 +42,8 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
                 * Load Linux from its location in NOR flash to its defined
                 * location in SDRAM
                 */
-               header = (void *)CONFIG_SYS_OS_BASE;
+               const struct legacy_img_hdr *header =
+                       (const struct legacy_img_hdr *)CONFIG_SYS_OS_BASE;
 #ifdef CONFIG_SPL_LOAD_FIT
                if (image_get_magic(header) == FDT_MAGIC) {
                        int ret;
@@ -93,34 +93,8 @@ 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
         */
-       header = map_sysmem(spl_nor_get_uboot_base(), sizeof(*header));
-#ifdef CONFIG_SPL_LOAD_FIT
-       if (image_get_magic(header) == FDT_MAGIC) {
-               debug("Found FIT format U-Boot\n");
-               spl_set_bl_len(&load, 1);
-               load.read = spl_nor_load_read;
-               return spl_load_simple_fit(spl_image, &load,
-                                          spl_nor_get_uboot_base(),
-                                          (void *)header);
-       }
-#endif
-       if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) &&
-           valid_container_hdr((void *)header)) {
-               spl_set_bl_len(&load, 1);
-               load.read = spl_nor_load_read;
-               return spl_load_imx_container(spl_image, &load,
-                                             spl_nor_get_uboot_base());
-       }
-
-       /* Legacy image handling */
-       if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT)) {
-               spl_set_bl_len(&load, 1);
-               load.read = spl_nor_load_read;
-               return spl_load_legacy_img(spl_image, bootdev, &load,
-                                          spl_nor_get_uboot_base(),
-                                          header);
-       }
-
-       return -EINVAL;
+       spl_set_bl_len(&load, 1);
+       load.read = spl_nor_load_read;
+       return spl_load(spl_image, bootdev, &load, 0, spl_nor_get_uboot_base());
 }
 SPL_LOAD_IMAGE_METHOD("NOR", 0, BOOT_DEVICE_NOR, spl_nor_load_image);
index 4777f84ac6b11b82d967eb20a5dac9db1c538e03..b48f80324bbe7972f7686b5412220f9dbb625420 100644 (file)
@@ -100,6 +100,7 @@ static inline int _spl_load(struct spl_image_info *spl_image,
        IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \
        (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT) && !IS_ENABLED(CONFIG_SPL_UBI)) + \
        IS_ENABLED(CONFIG_SPL_NET) + \
+       IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) + \
        0
 
 #if SPL_LOAD_USERS > 1
index a62bb60d2535bae169bdf5f4f31f36cf0391e34a..de5686343b999f45d589b4499f7f0542820017a9 100644 (file)
@@ -36,4 +36,6 @@ SPL_IMG_TEST(spl_test_nor, LEGACY, 0);
 SPL_IMG_TEST(spl_test_nor, LEGACY_LZMA, 0);
 SPL_IMG_TEST(spl_test_nor, IMX8, 0);
 SPL_IMG_TEST(spl_test_nor, FIT_INTERNAL, 0);
+#if !IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL)
 SPL_IMG_TEST(spl_test_nor, FIT_EXTERNAL, 0);
+#endif