ARM: image: Add option for ignoring ep bit 3
authorMarek Vasut <marek.vasut@gmail.com>
Wed, 13 Jun 2018 04:13:32 +0000 (06:13 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 19 Jun 2018 11:31:45 +0000 (07:31 -0400)
Add option to the booti_setup() which indicates to it that the caller
requires the image to be relocated to the beginning of the RAM and
that the information whether the image can be located anywhere in RAM
at 2 MiB aligned boundary or not is to be ignored. This is useful ie.
in case the Image is wrapped in another envelope, ie. fitImage and not
relocating it but moving it would corrupt the envelope.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Bin Chen <bin.chen@linaro.org>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Tom Rini <trini@konsulko.com>
Reviewed-By: Bin Chen <bin.chen@linaro.org>
arch/arm/lib/image.c
cmd/booti.c
include/image.h

index 1a04e2b875615313c745d437a15872044ce64fe0..699bf44e702f7a7084997406203fd7d2aaaf87fa 100644 (file)
@@ -26,7 +26,8 @@ struct Image_header {
        uint32_t        res5;
 };
 
-int booti_setup(ulong image, ulong *relocated_addr, ulong *size)
+int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
+               bool force_reloc)
 {
        struct Image_header *ih;
        uint64_t dst;
@@ -63,7 +64,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size)
         * images->ep.  Otherwise, relocate the image to the base of RAM
         * since memory below it is not accessible via the linear mapping.
         */
-       if (le64_to_cpu(ih->flags) & BIT(3))
+       if (!force_reloc && (le64_to_cpu(ih->flags) & BIT(3)))
                dst = image - text_offset;
        else
                dst = gd->bd->bi_dram[0].start;
index 45fbb99b680a9a5c3e230e6145cec5d42e15faf0..04353b68eccc0d73d62c44128016da883fd9a5c5 100644 (file)
@@ -37,7 +37,7 @@ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc,
                debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
        }
 
-       ret = booti_setup(ld, &relocated_addr, &image_size);
+       ret = booti_setup(ld, &relocated_addr, &image_size, false);
        if (ret != 0)
                return 1;
 
index 95d5934344cffb5add1ddbc546126690b7a1689c..420b8ff5761a1bd267fa6d95e77077ae8fe6048e 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "compiler.h"
 #include <asm/byteorder.h>
+#include <stdbool.h>
 
 /* Define this to avoid #ifdefs later on */
 struct lmb;
@@ -881,9 +882,11 @@ int bootz_setup(ulong image, ulong *start, ulong *end);
  * @image: Address of image
  * @start: Returns start address of image
  * @size : Returns size image
+ * @force_reloc: Ignore image->ep field, always place image to RAM start
  * @return 0 if OK, 1 if the image was not recognised
  */
-int booti_setup(ulong image, ulong *relocated_addr, ulong *size);
+int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
+               bool force_reloc);
 
 /*******************************************************************/
 /* New uImage format specific code (prefixed with fit_) */