[U-Boot] [PATCH V3 1/2] ARM: image: Add option for ignoring ep bit 3

Marek Vasut marek.vasut at gmail.com
Mon Jun 4 18:09:54 UTC 2018


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 at gmail.com>
Cc: Bin Chen <bin.chen at linaro.org>
Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
Cc: Tom Rini <trini at konsulko.com>
---
V2: Rename ignore_ep to force_reloc
V3: No change
---
 arch/arm/lib/image.c | 5 +++--
 cmd/booti.c          | 2 +-
 include/image.h      | 4 +++-
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/arch/arm/lib/image.c b/arch/arm/lib/image.c
index 1a04e2b875..22c705a881 100644
--- a/arch/arm/lib/image.c
+++ b/arch/arm/lib/image.c
@@ -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,
+		int 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;
diff --git a/cmd/booti.c b/cmd/booti.c
index 45fbb99b68..6d449b1995 100644
--- a/cmd/booti.c
+++ b/cmd/booti.c
@@ -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, 0);
 	if (ret != 0)
 		return 1;
 
diff --git a/include/image.h b/include/image.h
index 95d5934344..1ef6518308 100644
--- a/include/image.h
+++ b/include/image.h
@@ -881,9 +881,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,
+		int force_reloc);
 
 /*******************************************************************/
 /* New uImage format specific code (prefixed with fit_) */
-- 
2.16.2



More information about the U-Boot mailing list