[PATCH 10/17] spl: Align FDT load address
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Feb 24 16:54:09 CET 2025
On 24.02.25 15:56, Tom Rini wrote:
> On Mon, Feb 24, 2025 at 09:59:42AM +0100, Heinrich Schuchardt wrote:
>> On 2/24/25 06:55, Sam Edwards wrote:
>>> While the image size is generally a multiple of 8 bytes, this is not
>>> actually guaranteed; some linkers (like LLD) may shave a few bytes off
>>> of the end of output sections if there are no content bytes there. Since
>>> libfdt imposes a hard rule of 8-byte alignment, make the SPL also be
>>> explicit about the alignment when loading the FDT.
>>>
>>> Signed-off-by: Sam Edwards <CFSworks at gmail.com>
>>> ---
>>> common/spl/spl_fit.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
>>> index 49b4df60560..86506d6905c 100644
>>> --- a/common/spl/spl_fit.c
>>> +++ b/common/spl/spl_fit.c
>>> @@ -397,7 +397,7 @@ 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.
>>> */
>>> - image_info.load_addr = spl_image->load_addr + spl_image->size;
>>> + image_info.load_addr = ALIGN(spl_image->load_addr + spl_image->size, 8);
>>
>> We want to keep the SPL code size as small as possible as on many
>> platforms it is restricted to the cache size.
>>
>> Can't we fix this linker issue in the linker script by properly aligning
>> the SPL image end address?
>
> Size growth is always something to watch for, but not at the expense of
> correctness and saving a few bytes. We really do need to fix the places
> where U-Boot could but doesn't ensure the device tree is correctly
> aligned in memory.
>
Hello Tom,
spl_image->load_addr is always a multiple of 8.
Adding
. = ALIGN(8)"
in arch/riscv/cpu/u-boot-spl.lds before
_end = .;
_image_binary_end = .;
is all it takes.
Best regards
Heinrich
More information about the U-Boot
mailing list