The alignment of 8 bytes would also work if code was expecting 4 byte 
alignment. So the explanation you give for reverting this does not make sense 
to me.

The version I use in production uses 4 byte alignment, but on advice of Tom 
Rini I extended to 8 bytes. Maybe we could switch to just forcing 4 bytes, 
although I can't see why 8 byte would not work?

Note also that I was getting SPL data abort crashes on my arm32 target when 
image size was not 4 byte aligned. So reverting this patch will break my 
platform.

-----Original Message-----
From: Marek Vasut <ma...@denx.de> 
Sent: Tuesday, 20 October 2020 10:40 am
To: u-boot@lists.denx.de
Cc: Marek Vasut <ma...@denx.de>; Reuben Dowle <reuben.do...@4rf.com>; Tom Rini 
<tr...@konsulko.com>
Subject: [PATCH] Revert "Fix data abort caused by mis-aligning FIT data"

This reverts commit eb39d8ba5f0d1468b01b89a2a464d18612d3ea76.
The commit breaks booting of fitImage by SPL, the system simply hangs.
This is because on arm32, the fitImage and all of its content can be aligned to 
4 bytes and U-Boot expects just that.

Signed-off-by: Marek Vasut <ma...@denx.de>
Cc: Reuben Dowle <reuben.do...@4rf.com>
Cc: Tom Rini <tr...@konsulko.com>
---
 common/spl/spl_fit.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 
0e27ad1d6a..a90d821c82 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -349,12 +349,9 @@ static int spl_fit_append_fdt(struct spl_image_info 
*spl_image,
 
        /*
         * Use the address following the image as target address for the
-        * device tree. Load address is aligned to 8 bytes to match the required
-        * alignment specified for linux arm [1] and arm 64 [2] booting
-        * [1]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/booting.rst#n126
-        * [2]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm64/booting.rst#n45
+        * device tree.
         */
-       image_info.load_addr = ALIGN(spl_image->load_addr + spl_image->size, 8);
+       image_info.load_addr = spl_image->load_addr + spl_image->size;
 
        /* Figure out which device tree the board wants to use */
        node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index++);
--
2.28.0

Reply via email to