[PATCH v3] image: apply FDTOs on FDT image node without a load property

Quentin Schulz quentin.schulz at cherry.de
Wed Jan 22 16:43:02 CET 2025


Hi Marek,

On 1/22/25 3:32 PM, Marek Vasut wrote:
> On 1/22/25 3:21 PM, Quentin Schulz wrote:
> 
> [...]
> 
>>> @@ -2395,17 +2395,18 @@ int boot_get_fdt_fit(struct bootm_headers 
>>> *images, ulong addr,
>>>       /* we need to apply overlays */
>>>   #ifdef CONFIG_OF_LIBFDT_OVERLAY
>>> -    image_start = addr;
>>> -    image_end = addr + fit_get_size(fit);
>>> -    /* verify that relocation took place by load address not being 
>>> in fit */
>>> -    if (load >= image_start && load < image_end) {
>>> -        /* check is simplified; fit load checks for overlaps */
>>> -        printf("Overlayed FDT requires relocation\n");
>>> +    /* Relocate FDT so resizing does not overwrite other data in 
>>> FIT. */
>>> +    of_flat_tree = map_sysmem(load, len);
>>> +    len = ALIGN(fdt_totalsize(load), SZ_4K);
>>> +    err = boot_relocate_fdt(&of_flat_tree, &len);
>>
>> My bad, I mistakenly "compile-tested" this with a defconfig that 
>> doesn't enable CONFIG_OF_LIBFDT_OVERLAY so this was never built.
>>
>> The compiler is actually not happy about that, it wants it cast to 
>> (char **).
>>
>> @Marek, what do you prefer? We go back to having of_flat_tree a char* 
>> or do the cast in boot_relocate_fdt?
> What about -- go back and add a code comment ?
> 

Not entirely sure to understand the kind of comment you'd like to see there?

Would something like:

// of_flat_tree is storing the void * returned by map_sysmem, then
// its address is passed to boot_relocate_fdt which expects a char **
// and it is then cast into a ulong. Setting its type to void * would
// require to cast its address to char ** when passing it to
// boot_relocate_fdt. Instead, let's be lazy and use void *.

work for you?

Cheers,
Quentin


More information about the U-Boot mailing list