[U-Boot] [PATCH] vexpress: qemu can load the fdt to ram base
Gerd Hoffmann
kraxel at redhat.com
Tue Oct 21 12:05:40 CEST 2014
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
More information about the U-Boot
mailing list