[PATCH] Revert "Fix data abort caused by mis-aligning FIT data"

Marek Vasut marex at denx.de
Mon Oct 19 23:59:22 CEST 2020


On 10/19/20 11:50 PM, Reuben Dowle wrote:
> 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.

Well, since U-Boot 2020.10-rc5, any STM32MP1 board does no longer boot
and if I revert this patch, it works again (per git bisect). But this
also applies to any other arm32 boards which load fitImage in SPL, all
of those boards are broken in U-Boot 2020.10.

It seems that the end of the U-Boot image is at 4-byte aligned offset on
arm32, and that is where the DT is also loaded ; but your patch forces
the alignment to 8-bytes, so suddenly the DT location is 4-bytes off.

> 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.

Which platform is that ?

(also, please do not top-post)

[...]

> 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 <marex at denx.de>
> Cc: Reuben Dowle <reuben.dowle at 4rf.com>
> Cc: Tom Rini <trini at 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

[...]


More information about the U-Boot mailing list