summaryrefslogtreecommitdiffstats
path: root/sys/boot/uboot/common/metadata.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot/uboot/common/metadata.c')
-rw-r--r--sys/boot/uboot/common/metadata.c19
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 "
OpenPOWER on IntegriCloud