diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-03-03 14:04:57 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-03-06 11:41:29 +0100 |
commit | 6d6edfcf53be19efa040b3a6fcb7583ce1fca573 (patch) | |
tree | 0a3fc1ea02aec09c2459c5787f0731db06e8d6d9 /arch | |
parent | 0ba9a2347a747ae307e072030fc47fd684971249 (diff) | |
download | barebox-6d6edfcf53be19efa040b3a6fcb7583ce1fca573.tar.gz barebox-6d6edfcf53be19efa040b3a6fcb7583ce1fca573.tar.xz |
bootm: Pass unflattened devicetree to handlers
This makes it possible to modify the tree in the handlers.
This is necessary because the initrd addresses are only
known inside the handlers, but not to the generic bootm
code.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/lib/bootm.c | 8 | ||||
-rw-r--r-- | arch/ppc/Kconfig | 1 | ||||
-rw-r--r-- | arch/ppc/lib/ppclinux.c | 8 |
3 files changed, 11 insertions, 6 deletions
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 2a7d0f58f2..00c49086c6 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -169,16 +169,12 @@ static int do_bootz_linux_fdt(int fd, struct image_data *data) } if (IS_BUILTIN(CONFIG_OFTREE)) { - struct device_node *node; - - node = of_unflatten_dtb(NULL, oftree); - if (!node) { + data->of_root_node = of_unflatten_dtb(NULL, oftree); + if (!data->of_root_node) { pr_err("unable to unflatten devicetree\n"); ret = -EINVAL; goto err_free; } - - data->oftree = of_get_fixed_tree(node); } else { data->oftree = oftree; } diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index d12406522e..db269dd971 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -4,6 +4,7 @@ config PPC select HAS_KALLSYMS select HAS_MODULES select HAVE_CONFIGURABLE_MEMORY_LAYOUT + select OFTREE default y choice diff --git a/arch/ppc/lib/ppclinux.c b/arch/ppc/lib/ppclinux.c index 95dc83bfe5..ef69eadfb7 100644 --- a/arch/ppc/lib/ppclinux.c +++ b/arch/ppc/lib/ppclinux.c @@ -18,6 +18,14 @@ static int do_bootm_linux(struct image_data *data) if (!data->os_res) return -EINVAL; + data->oftree = of_get_fixed_tree(data->of_root_node); + if (!data->oftree) { + pr_err("bootm: No devicetree given.\n"); + return -EINVAL; + } + + fdt_add_reserve_map(data->oftree); + kernel = (void *)(data->os_address + data->os_entry); /* |