Check if the fdt is there (happens only when passed via -dtb cmd line
switch to qemu), then setup env accordingly.  If present use it.
Otherwise try to load from disk.

Also tweak CONFIG_SYS_LOAD_ADDR and LINUX_BOOT_PARAM_ADDR a bit to
avoid them overriding the fdt.
---
 board/armltd/vexpress/vexpress_common.c | 18 ++++++++++++++++++
 include/configs/vexpress_common.h       |  9 ++++-----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/board/armltd/vexpress/vexpress_common.c 
b/board/armltd/vexpress/vexpress_common.c
index cb2de2f..dafa4b2 100644
--- a/board/armltd/vexpress/vexpress_common.c
+++ b/board/armltd/vexpress/vexpress_common.c
@@ -20,6 +20,7 @@
 #include <malloc.h>
 #include <errno.h>
 #include <netdev.h>
+#include <libfdt.h>
 #include <asm/io.h>
 #include <asm/arch/systimer.h>
 #include <asm/arch/sysctrl.h>
@@ -60,6 +61,23 @@ int board_init(void)
        return 0;
 }
 
+int board_late_init(void)
+{
+       struct fdt_header *fdt = (void*)V2M_BASE;
+
+       if (fdt_magic(fdt) == FDT_MAGIC) {
+               setenv_addr("fdt_addr", (void*)(ulong)V2M_BASE);
+               printf("QEMU: fdt found at %s, using it.\n", 
getenv("fdt_addr"));
+       } else {
+               setenv_addr("fdt_addr_r", (void*)((ulong)V2M_BASE + 
0x27f00000));
+               setenv("fdtfile", CONFIG_DEFAULT_FDT_FILE);
+               printf("QEMU: will try to load %s from disk.\n",
+                      getenv("fdtfile"));
+       }
+
+       return 0;
+}
+
 int board_eth_init(bd_t *bis)
 {
        int rc = 0;
diff --git a/include/configs/vexpress_common.h 
b/include/configs/vexpress_common.h
index e378c10..e490804 100644
--- a/include/configs/vexpress_common.h
+++ b/include/configs/vexpress_common.h
@@ -184,8 +184,8 @@
 
 /* Miscellaneous configurable options */
 #undef CONFIG_SYS_CLKS_IN_HZ
-#define CONFIG_SYS_LOAD_ADDR           (V2M_BASE + 0x8000)
-#define LINUX_BOOT_PARAM_ADDR          (V2M_BASE + 0x2000)
+#define CONFIG_SYS_LOAD_ADDR           (V2M_BASE + 0x100000)
+#define LINUX_BOOT_PARAM_ADDR          (V2M_BASE + 0x200000)
 
 /* Physical Memory Map */
 #define CONFIG_NR_DRAM_BANKS           2
@@ -207,6 +207,8 @@
 #include <config_distro_defaults.h>
 #include <config_distro_bootcmd.h>
 
+#define CONFIG_BOARD_LATE_INIT
+
 /* Basic environment settings */
 #define CONFIG_BOOTCOMMAND             "run bootflash;"
 #ifdef CONFIG_VEXPRESS_ORIGINAL_MEMORY_MAP
@@ -215,7 +217,6 @@
                "kernel_addr_r="  "0x80008000\0" \
                "scriptaddr="     "0x87d00000\0" \
                "pxefile_addr_r=" "0x87e00000\0" \
-               "fdt_addr_r="     "0x87f00000\0" \
                "ramdisk_addr_r=" "0x88000000\0"
 #elif defined(CONFIG_VEXPRESS_EXTENDED_MEMORY_MAP)
 #define CONFIG_PLATFORM_ENV_SETTINGS \
@@ -223,7 +224,6 @@
                "kernel_addr_r="  "0xa0008000\0" \
                "scriptaddr="     "0xa7d00000\0" \
                "pxefile_addr_r=" "0xa7e00000\0" \
-               "fdt_addr_r="     "0xa7f00000\0" \
                "ramdisk_addr_r=" "0xa8000000\0"
 #endif
 
@@ -235,7 +235,6 @@
 #define CONFIG_EXTRA_ENV_SETTINGS \
                CONFIG_PLATFORM_ENV_SETTINGS \
                "console=ttyAMA0,115200n8\0" \
-               "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
                 BOOTENV
 
 /* FLASH and environment organization */
-- 
1.8.3.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to