]> git.sur5r.net Git - u-boot/blobdiff - common/spl/spl.c
spl: armv7m: keep ARM v7M in thumb mode while jumping to entry point
[u-boot] / common / spl / spl.c
index 2bc8b4202746fc70b6f8c7291489d570088fabbc..a3e73b87bc6e2d19be43016193fdf67d85a80296 100644 (file)
@@ -85,6 +85,9 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
 {
        spl_image->size = CONFIG_SYS_MONITOR_LEN;
        spl_image->entry_point = CONFIG_SYS_UBOOT_START;
+#ifdef CONFIG_CPU_V7M
+       spl_image->entry_point |= 0x1;
+#endif
        spl_image->load_addr = CONFIG_SYS_TEXT_BASE;
        spl_image->os = IH_OS_U_BOOT;
        spl_image->name = "U-Boot";
@@ -93,9 +96,10 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
 int spl_parse_image_header(struct spl_image_info *spl_image,
                           const struct image_header *header)
 {
-       u32 header_size = sizeof(struct image_header);
-
        if (image_get_magic(header) == IH_MAGIC) {
+#ifdef CONFIG_SPL_LEGACY_IMAGE_SUPPORT
+               u32 header_size = sizeof(struct image_header);
+
                if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY) {
                        /*
                         * On some system (e.g. powerpc), the load-address and
@@ -118,6 +122,11 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
                debug("spl: payload image: %.*s load addr: 0x%lx size: %d\n",
                        (int)sizeof(spl_image->name), 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");
+               return -EINVAL;
+#endif
        } else {
 #ifdef CONFIG_SPL_PANIC_ON_RAW_IMAGE
                /*
@@ -146,16 +155,18 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
                }
 #endif
 
-#ifdef CONFIG_SPL_ABORT_ON_RAW_IMAGE
-               /* Signature not found, proceed to other boot methods. */
-               return -EINVAL;
-#else
+#ifdef CONFIG_SPL_RAW_IMAGE_SUPPORT
                /* Signature not found - assume u-boot.bin */
                debug("mkimage signature not found - ih_magic = %x\n",
                        header->ih_magic);
                spl_set_header_raw_uboot(spl_image);
+#else
+               /* RAW image not supported, proceed to other boot methods. */
+               debug("Raw boot image support not enabled, proceeding to other boot methods");
+               return -EINVAL;
 #endif
        }
+
        return 0;
 }
 
@@ -219,10 +230,11 @@ int spl_early_init(void)
 int spl_init(void)
 {
        int ret;
+       bool setup_malloc = !(IS_ENABLED(CONFIG_SPL_STACK_R) &&
+                       IS_ENABLED(CONFIG_SPL_SYS_MALLOC_SIMPLE));
 
        if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
-               ret = spl_common_init(
-                       !IS_ENABLED(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN));
+               ret = spl_common_init(setup_malloc);
                if (ret)
                        return ret;
        }