All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eugen Hristev <eugen.hristev@microchip.com>
To: <u-boot@lists.denx.de>, <sjg@chromium.org>
Cc: <trini@konsulko.com>, <xypron.glpk@gmx.de>,
	<michal.simek@amd.com>, <daniel.schwierzeck@gmail.com>,
	<marex@denx.de>, <alpernebiyasak@gmail.com>,
	Eugen Hristev <eugen.hristev@microchip.com>
Subject: [PATCH] lds: align u-boot-nodtb with 8 bytes boundary
Date: Thu, 15 Dec 2022 13:58:25 +0200	[thread overview]
Message-ID: <20221215115825.827111-1-eugen.hristev@microchip.com> (raw)

Newer DTC require that the DTB start address is aligned at 8 bytes.
In the u-boot.bin case, the u-boot-nodtb.bin is concatenated with the
DTB, but there is no alignment/padding to the next 8byte aligned address.
This causes the board to fail booting, because the FDT will claim
that the DTB inside u-boot.bin is not a valid DTB, it will fail with
-FDT_ERR_ALIGNMENT.
To solve this, have the u-boot binary `_end` aligned with 8 bytes.
The objcopy in the Makefile will create the u-boot-nodtb.bin and it has to
be truncated to 8 bytes to correspond to the u-boot.map file which will
have the `_end` aligned to 8 bytes.
The lds files which use devicetrees have been changed to align the `_end`
tag with 8 bytes.

This patch is also a prerequisite to have the possibility to update the
dtc inside u-boot to newer versions (1.6.1+)

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
Hi,

I could not test all affected boards, it's an impossible task.
I tried this on at91 boards which I have, and ran the CI on denx.
I cannot guarantee that no other boards are affected, so this patch is a bit
of an RFC.
If the u-boot-nodtb.bin does not have the size equal with the corresponding
one in u-boot.map, the binary_size_check will fail at build time with
something like this:

u-boot.map shows a binary size of 502684
but u-boot-nodtb.bin shows 502688

Thanks,
Eugen

 Makefile                                    | 2 ++
 arch/arm/cpu/armv8/u-boot.lds               | 4 ++--
 arch/arm/cpu/u-boot-spl.lds                 | 1 +
 arch/arm/cpu/u-boot.lds                     | 1 +
 arch/arm/lib/elf_arm_efi.lds                | 5 +++++
 arch/arm/mach-at91/arm926ejs/u-boot-spl.lds | 2 +-
 arch/arm/mach-at91/armv7/u-boot-spl.lds     | 2 +-
 arch/arm/mach-zynq/u-boot-spl.lds           | 2 +-
 arch/mips/cpu/u-boot.lds                    | 2 +-
 arch/sandbox/cpu/u-boot.lds                 | 6 ++++++
 arch/sh/cpu/u-boot.lds                      | 2 ++
 board/ti/am335x/u-boot.lds                  | 1 +
 tools/binman/test/u_boot_binman_embed.lds   | 2 +-
 13 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index 9d84f96481..b4d387bcce 100644
--- a/Makefile
+++ b/Makefile
@@ -1317,6 +1317,8 @@ endif
 
 u-boot-nodtb.bin: u-boot FORCE
 	$(call if_changed,objcopy_uboot)
+# Make sure the size is 8 byte-aligned.
+	@truncate -s %8 $@
 	$(BOARD_SIZE_CHECK)
 
 u-boot.ldr:	u-boot
diff --git a/arch/arm/cpu/armv8/u-boot.lds b/arch/arm/cpu/armv8/u-boot.lds
index 8fe4682dd2..e5fa4ef95c 100644
--- a/arch/arm/cpu/armv8/u-boot.lds
+++ b/arch/arm/cpu/armv8/u-boot.lds
@@ -145,10 +145,10 @@ SECTIONS
 		*(.__rel_dyn_end)
 	}
 
-	_end = .;
-
 	. = ALIGN(8);
 
+	_end = .;
+
 	.bss_start : {
 		KEEP(*(.__bss_start));
 	}
diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds
index fb2189d50d..732ed42db1 100644
--- a/arch/arm/cpu/u-boot-spl.lds
+++ b/arch/arm/cpu/u-boot-spl.lds
@@ -55,6 +55,7 @@ SECTIONS
 
 	.end :
 	{
+		. = ALIGN(8);
 		*(.__end)
 	}
 
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index f25f72b2e0..274e1a7d30 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -193,6 +193,7 @@ SECTIONS
 
 	.end :
 	{
+		. = ALIGN(8);
 		*(.__end)
 	}
 
diff --git a/arch/arm/lib/elf_arm_efi.lds b/arch/arm/lib/elf_arm_efi.lds
index 767ebda635..f3867021d3 100644
--- a/arch/arm/lib/elf_arm_efi.lds
+++ b/arch/arm/lib/elf_arm_efi.lds
@@ -54,6 +54,11 @@ SECTIONS
 	.rel.data : { *(.rel.data) *(.rel.data*) }
 	_data_size = . - _etext;
 
+	.end : {
+		. = ALIGN(8);
+		*(.__end)
+	}
+
 	/DISCARD/ : {
 		*(.rel.reloc)
 		*(.eh_frame)
diff --git a/arch/arm/mach-at91/arm926ejs/u-boot-spl.lds b/arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
index 1a8bf94dee..d7e5d81ecc 100644
--- a/arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
+++ b/arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
@@ -31,7 +31,7 @@ SECTIONS
 	. = ALIGN(4);
 	__u_boot_list : { KEEP(*(SORT(__u_boot_list*))) } > .sram
 
-	. = ALIGN(4);
+	. = ALIGN(8);
 	__image_copy_end = .;
 
 	.end :
diff --git a/arch/arm/mach-at91/armv7/u-boot-spl.lds b/arch/arm/mach-at91/armv7/u-boot-spl.lds
index 6ca725fc4c..2a0a1b4b86 100644
--- a/arch/arm/mach-at91/armv7/u-boot-spl.lds
+++ b/arch/arm/mach-at91/armv7/u-boot-spl.lds
@@ -38,7 +38,7 @@ SECTIONS
 	. = ALIGN(4);
 	__u_boot_list : { KEEP(*(SORT(__u_boot_list*))) } > .sram
 
-	. = ALIGN(4);
+	. = ALIGN(8);
 	__image_copy_end = .;
 
 	.end :
diff --git a/arch/arm/mach-zynq/u-boot-spl.lds b/arch/arm/mach-zynq/u-boot-spl.lds
index 8c18d3f91f..c0320dbe1e 100644
--- a/arch/arm/mach-zynq/u-boot-spl.lds
+++ b/arch/arm/mach-zynq/u-boot-spl.lds
@@ -41,7 +41,7 @@ SECTIONS
 		KEEP(*(SORT(__u_boot_list*)));
 	} > .sram
 
-	. = ALIGN(4);
+	. = ALIGN(8);
 
 	_image_binary_end = .;
 
diff --git a/arch/mips/cpu/u-boot.lds b/arch/mips/cpu/u-boot.lds
index 9a4ebcd151..182e9bc6e5 100644
--- a/arch/mips/cpu/u-boot.lds
+++ b/arch/mips/cpu/u-boot.lds
@@ -56,7 +56,7 @@ SECTIONS
 		. += CONFIG_MIPS_RELOCATION_TABLE_SIZE - 4;
 	}
 
-	. = ALIGN(4);
+	. = ALIGN(8);
 	_end = .;
 
 	.bss __rel_start (OVERLAY) : {
diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds
index ba8dee50c7..3fbca6d248 100644
--- a/arch/sandbox/cpu/u-boot.lds
+++ b/arch/sandbox/cpu/u-boot.lds
@@ -51,6 +51,12 @@ SECTIONS
 		*(.dynsym)
 		__dyn_sym_end = .;
 	}
+
+	.end :
+	{
+		. = ALIGN(8);
+		*(.__end)
+	}
 }
 
 INSERT BEFORE .data;
diff --git a/arch/sh/cpu/u-boot.lds b/arch/sh/cpu/u-boot.lds
index d360eea7eb..226f50b19c 100644
--- a/arch/sh/cpu/u-boot.lds
+++ b/arch/sh/cpu/u-boot.lds
@@ -74,6 +74,8 @@ SECTIONS
 		KEEP(*(SORT(__u_boot_list*)));
 	} >ram
 
+	. = ALIGN(8);
+
 	PROVIDE (__init_end = .);
 	PROVIDE (reloc_dst_end = .);
 	PROVIDE (_end = .);
diff --git a/board/ti/am335x/u-boot.lds b/board/ti/am335x/u-boot.lds
index 087dee8bb2..deb9098a90 100644
--- a/board/ti/am335x/u-boot.lds
+++ b/board/ti/am335x/u-boot.lds
@@ -118,6 +118,7 @@ SECTIONS
 
 	.end :
 	{
+		. = ALIGN(8);
 		*(.__end)
 	}
 
diff --git a/tools/binman/test/u_boot_binman_embed.lds b/tools/binman/test/u_boot_binman_embed.lds
index e213fa8a84..93c0ae6aed 100644
--- a/tools/binman/test/u_boot_binman_embed.lds
+++ b/tools/binman/test/u_boot_binman_embed.lds
@@ -18,7 +18,7 @@ SECTIONS
 		*(.text*)
 	}
 
-	. = ALIGN(4);
+	. = ALIGN(8);
 	.data : {
 		dtb_embed_begin = .;
 		KEEP(*(.mydtb));
-- 
2.25.1


             reply	other threads:[~2022-12-15 11:58 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-15 11:58 Eugen Hristev [this message]
2022-12-15 14:24 ` [PATCH] lds: align u-boot-nodtb with 8 bytes boundary Simon Glass
2022-12-15 14:36   ` Eugen.Hristev
2022-12-15 15:00     ` Simon Glass
2022-12-15 15:57       ` Michal Simek
2022-12-21 21:49       ` Tom Rini
2022-12-16  0:13   ` Pali Rohár
2022-12-17 21:40     ` Simon Glass
2022-12-17 22:04       ` Pali Rohár
2022-12-17 22:54         ` Pali Rohár
2022-12-17 23:59           ` Pali Rohár
2022-12-21 14:47             ` Eugen.Hristev
2022-12-21 22:06               ` Pali Rohár
2022-12-22 15:49     ` Tom Rini
2022-12-30 15:31       ` Pali Rohár
2022-12-30 17:51         ` Simon Glass
2022-12-30 18:11           ` Mark Kettenis
2022-12-30 19:00             ` Simon Glass
2022-12-17 22:14 ` Mark Kettenis
2022-12-21 21:56   ` Tom Rini
2022-12-21 22:42     ` Mark Kettenis
2022-12-21 23:09       ` Tom Rini
2022-12-21 23:20         ` Mark Kettenis
2022-12-21 23:44           ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221215115825.827111-1-eugen.hristev@microchip.com \
    --to=eugen.hristev@microchip.com \
    --cc=alpernebiyasak@gmail.com \
    --cc=daniel.schwierzeck@gmail.com \
    --cc=marex@denx.de \
    --cc=michal.simek@amd.com \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.