[PATCH u-boot-marvell v2 12/20] tools: kwbimage: Enforce 128-bit boundary alignment only for Sheeva CPU

Stefan Roese sr at denx.de
Thu Jan 13 07:40:53 CET 2022


On 1/12/22 18:20, Pali Rohár wrote:
> This alignment is required only for platforms based on Sheeva CPU core
> which are A370 and AXP. Now when U-Boot build system correctly propagates
> LOAD_ADDRESS there is no need to have enabled 128-bit boundary alignment on
> platforms which do not need it. Previously it was required because load
> address was implicitly rounded to 128-bit boundary and U-Boot build system
> expected it and misused it. Now with explicit setting of LOAD_ADDRESS there
> is no guessing for load address anymore.
> 
> Signed-off-by: Pali Rohár <pali at kernel.org>

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan

> ---
>   tools/kwbimage.c | 12 ++++++++----
>   1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/kwbimage.c b/tools/kwbimage.c
> index ce053a4a5a78..7c2106006ad7 100644
> --- a/tools/kwbimage.c
> +++ b/tools/kwbimage.c
> @@ -1101,8 +1101,10 @@ static size_t image_headersz_v1(int *hasext)
>   				return 0;
>   			}
>   			headersz = e->binary.loadaddr - base_addr;
> -		} else {
> +		} else if (cpu_sheeva) {
>   			headersz = ALIGN(headersz, 16);
> +		} else {
> +			headersz = ALIGN(headersz, 4);
>   		}
>   
>   		headersz += ALIGN(s.st_size, 4) + sizeof(uint32_t);
> @@ -1158,8 +1160,8 @@ static int add_binary_header_v1(uint8_t **cur, uint8_t **next_ext,
>   	*cur += (binarye->binary.nargs + 1) * sizeof(uint32_t);
>   
>   	/*
> -	 * ARM executable code inside the BIN header on some mvebu platforms
> -	 * (e.g. A370, AXP) must always be aligned with the 128-bit boundary.
> +	 * ARM executable code inside the BIN header on platforms with Sheeva
> +	 * CPU (A370 and AXP) must always be aligned with the 128-bit boundary.
>   	 * In the case when this code is not position independent (e.g. ARM
>   	 * SPL), it must be placed at fixed load and execute address.
>   	 * This requirement can be met by inserting dummy arguments into
> @@ -1170,8 +1172,10 @@ static int add_binary_header_v1(uint8_t **cur, uint8_t **next_ext,
>   	offset = *cur - (uint8_t *)main_hdr;
>   	if (binarye->binary.loadaddr)
>   		add_args = (binarye->binary.loadaddr - base_addr - offset) / sizeof(uint32_t);
> -	else
> +	else if (cpu_sheeva)
>   		add_args = ((16 - offset % 16) % 16) / sizeof(uint32_t);
> +	else
> +		add_args = 0;
>   	if (add_args) {
>   		*(args - 1) = cpu_to_le32(binarye->binary.nargs + add_args);
>   		*cur += add_args * sizeof(uint32_t);
> 

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list