diff --git a/headers/private/kernel/boot/platform/u-boot/platform_kernel_args.h b/headers/private/kernel/boot/platform/u-boot/platform_kernel_args.h index ae65dbc361..8a78bc69c4 100644 --- a/headers/private/kernel/boot/platform/u-boot/platform_kernel_args.h +++ b/headers/private/kernel/boot/platform/u-boot/platform_kernel_args.h @@ -22,8 +22,8 @@ typedef struct { void *openfirmware_entry; char rtc_path[128]; - // TODO: add FDT - char dummy; + // Flattened Device Tree blob + void *fdt; } platform_kernel_args; #endif /* KERNEL_BOOT_PLATFORM_UBOOT_KERNEL_ARGS_H */ diff --git a/src/system/boot/platform/u-boot/start.cpp b/src/system/boot/platform/u-boot/start.cpp index 15838ebc83..e1dbee62aa 100644 --- a/src/system/boot/platform/u-boot/start.cpp +++ b/src/system/boot/platform/u-boot/start.cpp @@ -105,6 +105,12 @@ platform_start_kernel(void) addr_t stackTop = gKernelArgs.cpu_kstack[0].start + gKernelArgs.cpu_kstack[0].size; + if (gFDT) { + // clone the Flattened Device Tree blob + gKernelArgs.platform_args.fdt = kernel_args_malloc(fdt_totalsize(gFDT)); + memcpy(gKernelArgs.platform_args.fdt, gFDT, fdt_totalsize(gFDT)); + } + // smp_init_other_cpus(); serial_cleanup(); mmu_init_for_kernel();