On 1/22/25 4:43 PM, Quentin Schulz wrote:
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?
Something like that , yes .