diff options
Diffstat (limited to 'sys/boot/uboot/common/metadata.c')
-rw-r--r-- | sys/boot/uboot/common/metadata.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/sys/boot/uboot/common/metadata.c b/sys/boot/uboot/common/metadata.c index 40accc0..74497a9 100644 --- a/sys/boot/uboot/common/metadata.c +++ b/sys/boot/uboot/common/metadata.c @@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$"); #include "glue.h" #if defined(LOADER_FDT_SUPPORT) -extern vm_offset_t fdt_fixup(void); +extern int fdt_copy(vm_offset_t); #endif /* @@ -279,7 +279,10 @@ md_load(char *args, vm_offset_t *modulep) vm_offset_t envp; vm_offset_t size; vm_offset_t vaddr; +#if defined(LOADER_FDT_SUPPORT) vm_offset_t dtbp; + int dtb_size; +#endif char *rootdevname; int howto; int i; @@ -325,6 +328,16 @@ md_load(char *args, vm_offset_t *modulep) /* Pad to a page boundary */ addr = roundup(addr, PAGE_SIZE); +#if defined(LOADER_FDT_SUPPORT) + /* Handle device tree blob */ + dtbp = addr; + dtb_size = fdt_copy(addr); + + /* Pad to a page boundary */ + if (dtb_size) + addr += roundup(dtb_size, PAGE_SIZE); +#endif + kernend = 0; kfp = file_findfile(NULL, "elf32 kernel"); if (kfp == NULL) @@ -335,9 +348,7 @@ md_load(char *args, vm_offset_t *modulep) file_addmetadata(kfp, MODINFOMD_ENVP, sizeof envp, &envp); #if defined(LOADER_FDT_SUPPORT) - /* Handle device tree blob */ - dtbp = fdt_fixup(); - if (dtbp != 0) + if (dtb_size) file_addmetadata(kfp, MODINFOMD_DTBP, sizeof dtbp, &dtbp); else pager_output("WARNING! Trying to fire up the kernel, but no " |