fdt: sandbox: correct use of ${fdtcontroladdr}
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 18 Nov 2018 16:58:50 +0000 (17:58 +0100)
committerAlexander Graf <agraf@suse.de>
Sun, 2 Dec 2018 20:59:37 +0000 (21:59 +0100)
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>
common/board_r.c
lib/fdtdec.c

index c55e33eec275fdc80911332716619ae8c4948019..745212be71a27ab1e54022974f6118c8f421671e 100644 (file)
@@ -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 */
index d28f2cbb1cf6a9aad1492bb294a3f84a02619826..cbdc0778258bb33305033528e7d13c1c3268a407 100644 (file)
@@ -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