spl: Extract legacy image handling into separate file
authorStefan Roese <sr@denx.de>
Tue, 21 Apr 2020 07:28:41 +0000 (09:28 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Mon, 27 Apr 2020 18:29:33 +0000 (20:29 +0200)
This patch moves the legacy image handling into a separate file, which
will be extended with other legacy image features later.

No function change intended.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Weijie Gao <weijie.gao@mediatek.com>
Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
common/spl/Makefile
common/spl/spl.c
common/spl/spl_legacy.c [new file with mode: 0644]

index eaa57f5ce5e48646b77640ab5197281b3cbbabd9..c576a78126818e54269045995f9048831d1fa12b 100644 (file)
@@ -10,6 +10,7 @@ ifdef CONFIG_SPL_BUILD
 obj-$(CONFIG_$(SPL_TPL_)FRAMEWORK) += spl.o
 obj-$(CONFIG_$(SPL_TPL_)BOOTROM_SUPPORT) += spl_bootrom.o
 obj-$(CONFIG_$(SPL_TPL_)LOAD_FIT) += spl_fit.o
+obj-$(CONFIG_$(SPL_TPL_)LEGACY_IMAGE_SUPPORT) += spl_legacy.o
 obj-$(CONFIG_$(SPL_TPL_)NOR_SUPPORT) += spl_nor.o
 obj-$(CONFIG_$(SPL_TPL_)XIP_SUPPORT) += spl_xip.o
 obj-$(CONFIG_$(SPL_TPL_)YMODEM_SUPPORT) += spl_ymodem.o
index 932e6ab98ac4cd5d4c0fd5263bcc9c54183f1ff6..b0f0e1557b923f8be107e8bdee42f376295f3657 100644 (file)
@@ -254,6 +254,14 @@ static int spl_load_fit_image(struct spl_image_info *spl_image,
 }
 #endif
 
+__weak int spl_parse_legacy_header(struct spl_image_info *spl_image,
+                                  const struct image_header *header)
+{
+       /* LEGACY image not supported */
+       debug("Legacy boot image support not enabled, proceeding to other boot methods\n");
+       return -EINVAL;
+}
+
 int spl_parse_image_header(struct spl_image_info *spl_image,
                           const struct image_header *header)
 {
@@ -264,51 +272,11 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
                return ret;
 #endif
        if (image_get_magic(header) == IH_MAGIC) {
-#ifdef CONFIG_SPL_LEGACY_IMAGE_SUPPORT
-               u32 header_size = sizeof(struct image_header);
-
-#ifdef CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK
-               /* check uImage header CRC */
-               if (!image_check_hcrc(header)) {
-                       puts("SPL: Image header CRC check failed!\n");
-                       return -EINVAL;
-               }
-#endif
-
-               if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY) {
-                       /*
-                        * On some system (e.g. powerpc), the load-address and
-                        * entry-point is located at address 0. We can't load
-                        * to 0-0x40. So skip header in this case.
-                        */
-                       spl_image->load_addr = image_get_load(header);
-                       spl_image->entry_point = image_get_ep(header);
-                       spl_image->size = image_get_data_size(header);
-               } else {
-                       spl_image->entry_point = image_get_ep(header);
-                       /* Load including the header */
-                       spl_image->load_addr = image_get_load(header) -
-                               header_size;
-                       spl_image->size = image_get_data_size(header) +
-                               header_size;
-               }
-#ifdef CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK
-               /* store uImage data length and CRC to check later */
-               spl_image->dcrc_data = image_get_load(header);
-               spl_image->dcrc_length = image_get_data_size(header);
-               spl_image->dcrc = image_get_dcrc(header);
-#endif
+               int ret;
 
-               spl_image->os = image_get_os(header);
-               spl_image->name = image_get_name(header);
-               debug(SPL_TPL_PROMPT
-                     "payload image: %32s load addr: 0x%lx size: %d\n",
-                     spl_image->name, spl_image->load_addr, spl_image->size);
-#else
-               /* LEGACY image not supported */
-               debug("Legacy boot image support not enabled, proceeding to other boot methods\n");
-               return -EINVAL;
-#endif
+               ret = spl_parse_legacy_header(spl_image, header);
+               if (ret)
+                       return ret;
        } else {
 #ifdef CONFIG_SPL_PANIC_ON_RAW_IMAGE
                /*
diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c
new file mode 100644 (file)
index 0000000..33f3587
--- /dev/null
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Stefan Roese <sr@denx.de>
+ */
+
+#include <common.h>
+#include <spl.h>
+
+int spl_parse_legacy_header(struct spl_image_info *spl_image,
+                           const struct image_header *header)
+{
+       u32 header_size = sizeof(struct image_header);
+
+#ifdef CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK
+       /* check uImage header CRC */
+       if (!image_check_hcrc(header)) {
+               puts("SPL: Image header CRC check failed!\n");
+               return -EINVAL;
+       }
+#endif
+
+       if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY) {
+               /*
+                * On some system (e.g. powerpc), the load-address and
+                * entry-point is located at address 0. We can't load
+                * to 0-0x40. So skip header in this case.
+                */
+               spl_image->load_addr = image_get_load(header);
+               spl_image->entry_point = image_get_ep(header);
+               spl_image->size = image_get_data_size(header);
+       } else {
+               spl_image->entry_point = image_get_ep(header);
+               /* Load including the header */
+               spl_image->load_addr = image_get_load(header) -
+                       header_size;
+               spl_image->size = image_get_data_size(header) +
+                       header_size;
+       }
+
+#ifdef CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK
+       /* store uImage data length and CRC to check later */
+       spl_image->dcrc_data = image_get_load(header);
+       spl_image->dcrc_length = image_get_data_size(header);
+       spl_image->dcrc = image_get_dcrc(header);
+#endif
+
+       spl_image->os = image_get_os(header);
+       spl_image->name = image_get_name(header);
+       debug(SPL_TPL_PROMPT
+             "payload image: %32s load addr: 0x%lx size: %d\n",
+             spl_image->name, spl_image->load_addr, spl_image->size);
+
+       return 0;
+}