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 .

Reply via email to