riscv: Copy the reserved-memory nodes to final DT
authorAtish Patra <atish.patra@wdc.com>
Tue, 21 Apr 2020 18:15:03 +0000 (11:15 -0700)
committerAndes <uboot@andestech.com>
Thu, 23 Apr 2020 02:14:16 +0000 (10:14 +0800)
The DT used by U-Boot may be different from the DT being passed to
the OS if the DT is loaded from external media such as network or
mmc. In that case, the reserved-memory node needs to be copied to
the DT passed to the OS.

Signed-off-by: Atish Patra <atish.patra@wdc.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
arch/riscv/lib/bootm.c

index 87cadad5016d25636bbeffd70b9403dbcb4497af..8ff8db6bf533b13f5777c7e7530151540b8a2798 100644 (file)
@@ -28,8 +28,8 @@ __weak void board_quiesce_devices(void)
 
 int arch_fixup_fdt(void *blob)
 {
-#ifdef CONFIG_EFI_LOADER
        int err;
+#ifdef CONFIG_EFI_LOADER
        u32 size;
        int chosen_offset;
 
@@ -50,6 +50,12 @@ int arch_fixup_fdt(void *blob)
        /* Overwrite the boot-hartid as U-Boot is the last stage BL */
        fdt_setprop_u32(blob, chosen_offset, "boot-hartid", gd->arch.boot_hart);
 #endif
+
+       /* Copy the reserved-memory node to the DT used by OS */
+       err = riscv_fdt_copy_resv_mem_node(gd->fdt_blob, blob);
+       if (err < 0)
+               return err;
+
        return 0;
 }