u-boot.lists.denx.de archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).