Prevent fdt data loaded from a file from overwriting the kernel environment,

by having uboot_autoload() do the fdt setup (which may load a file) rather
than waiting until we're actually in the process of launching the kernel.

As part of making this happen...
 - Define LOADER_FDT_SUPPORT on the uboot/lib compile command line when
   MK_FDT is set.
 - Make fdt_setup_fdtb() public.
 - Declare public fdt_whatever() functions in a header instead of using
   scattered extern decls in .c files.
This commit is contained in:
Ian Lepore
2014-03-01 19:02:00 +00:00
parent 119aeb7241
commit bc837fc0c0
5 changed files with 26 additions and 8 deletions
+1 -1
View File
@@ -279,7 +279,7 @@ fdt_load_dtb_file(const char * filename)
return (0);
}
static int
int
fdt_setup_fdtp()
{
struct preloaded_file *bfp;
-4
View File
@@ -41,10 +41,6 @@ __FBSDID("$FreeBSD$");
#include "bootstrap.h"
#include "glue.h"
#if defined(LOADER_FDT_SUPPORT)
extern int fdt_copy(vm_offset_t);
#endif
/*
* Return a 'boothowto' value corresponding to the kernel arguments in
* (kargs) and any relevant environment variables.
+12
View File
@@ -1,5 +1,7 @@
# $FreeBSD$
.include <bsd.own.mk>
.PATH: ${.CURDIR}/../../common
LIB= uboot
@@ -18,6 +20,16 @@ SRCS+= disk.c
CFLAGS+= -DLOADER_DISK_SUPPORT
.endif
.if ${MK_FDT} != "no"
LOADER_FDT_SUPPORT= yes
.else
LOADER_FDT_SUPPORT= no
.endif
.if ${LOADER_FDT_SUPPORT} == "yes"
CFLAGS+= -DLOADER_FDT_SUPPORT
.endif
# Pick up FDT includes
CFLAGS+= -I${.CURDIR}/../../../../sys/contrib/libfdt/
+6
View File
@@ -69,3 +69,9 @@ struct file_format;
extern struct file_format uboot_elf;
void reboot(void);
#if defined(LOADER_FDT_SUPPORT)
extern int fdt_setup_fdtp();
extern int fdt_copy(vm_offset_t);
#endif
+7 -3
View File
@@ -29,19 +29,23 @@ __FBSDID("$FreeBSD$");
/*
* U-Boot-specific module functionality.
*
* XXX not much for now...
*
*/
#include <stand.h>
#include <string.h>
#include "bootstrap.h"
#include "libuboot.h"
int
uboot_autoload(void)
{
#if defined(LOADER_FDT_SUPPORT)
int err;
if ((err = fdt_setup_fdtp()) != 0)
return (err);
#endif
return(0);
}