aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2018-11-18 17:58:50 +0100
committerAlexander Graf <agraf@suse.de>2018-12-02 21:59:37 +0100
commitf980c99985dda829f4300bfec32695dfe4731849 (patch)
tree75b0741f160b42314a020503969061dd628072d1
parentc3772ca1e38f36f2486b44c27094421442414e5e (diff)
downloadu-boot-f980c99985dda829f4300bfec32695dfe4731849.zip
u-boot-f980c99985dda829f4300bfec32695dfe4731849.tar.gz
u-boot-f980c99985dda829f4300bfec32695dfe4731849.tar.bz2
fdt: sandbox: correct use of ${fdtcontroladdr}
The sandbox uses a virtual address space that is neither the physical nor the virtual address space of the operating system. All address used on the command line live in this address space. So also the environment variable ${fdtcontroladdr} has to be in this address space. Commands like bootefi and booti receive the fdt address as parameter. Without the patch ${fdtcontroladdr} cannot be used as parameter value on the sandbox. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--common/board_r.c3
-rw-r--r--lib/fdtdec.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/common/board_r.c b/common/board_r.c
index c55e33e..745212b 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -453,7 +453,8 @@ static int initr_env(void)
else
set_default_env(NULL, 0);
#ifdef CONFIG_OF_CONTROL
- env_set_addr("fdtcontroladdr", gd->fdt_blob);
+ env_set_hex("fdtcontroladdr",
+ (unsigned long)map_to_sysmem(gd->fdt_blob));
#endif
/* Initialize from environment */
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index d28f2cb..cbdc077 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -11,6 +11,7 @@
#include <errno.h>
#include <fdtdec.h>
#include <fdt_support.h>
+#include <mapmem.h>
#include <linux/libfdt.h>
#include <serial.h>
#include <asm/sections.h>
@@ -1253,8 +1254,9 @@ int fdtdec_setup(void)
# if CONFIG_IS_ENABLED(OF_PRIOR_STAGE)
gd->fdt_blob = (void *)prior_stage_fdt_address;
# else
- gd->fdt_blob = (void *)env_get_ulong("fdtcontroladdr", 16,
- (uintptr_t)gd->fdt_blob);
+ gd->fdt_blob = map_sysmem
+ (env_get_ulong("fdtcontroladdr", 16,
+ (unsigned long)map_to_sysmem(gd->fdt_blob)), 0);
# endif
# endif