Merge branch 'master' of git://git.denx.de/u-boot
[oweals/u-boot.git] / common / spl / spl.c
index c1fce62b914855c5401847120de71074a0df1077..b0f0e1557b923f8be107e8bdee42f376295f3657 100644 (file)
@@ -11,6 +11,7 @@
 #include <binman_sym.h>
 #include <dm.h>
 #include <handoff.h>
+#include <hang.h>
 #include <irq_func.h>
 #include <serial.h>
 #include <spl.h>
@@ -253,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)
 {
@@ -263,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_load(header);
-                       /* Load including the header */
-                       spl_image->load_addr = spl_image->entry_point -
-                               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
                /*