mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: barebox@lists.infradead.org
Subject: [PATCH 34/37] bootm: Pass unflattened devicetree to handlers
Date: Mon,  4 Mar 2013 10:53:37 +0100	[thread overview]
Message-ID: <1362390820-10333-35-git-send-email-s.hauer@pengutronix.de> (raw)
In-Reply-To: <1362390820-10333-1-git-send-email-s.hauer@pengutronix.de>

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>
---
 arch/arm/lib/bootm.c    |    8 ++------
 arch/ppc/Kconfig        |    1 +
 arch/ppc/lib/ppclinux.c |    8 ++++++++
 commands/bootm.c        |   24 +++++++++---------------
 include/boot.h          |    1 +
 5 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 2a7d0f5..00c4908 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 d124065..db269dd 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 95dc83b..ef69ead 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);
 
 	/*
diff --git a/commands/bootm.c b/commands/bootm.c
index 65a75e2..ea5a35b 100644
--- a/commands/bootm.c
+++ b/commands/bootm.c
@@ -138,9 +138,8 @@ static int bootm_open_initrd_uimage(struct image_data *data)
 static int bootm_open_oftree(struct image_data *data, const char *oftree, int num)
 {
 	enum filetype ft;
-	struct fdt_header *fdt, *fixfdt;
+	struct fdt_header *fdt;
 	size_t size;
-	struct device_node *node;
 
 	printf("Loading devicetree from '%s'\n", oftree);
 
@@ -188,23 +187,14 @@ static int bootm_open_oftree(struct image_data *data, const char *oftree, int nu
 				file_type_to_string(ft));
 	}
 
-	node = of_unflatten_dtb(NULL, fdt);
-	if (!node) {
+	data->of_root_node = of_unflatten_dtb(NULL, fdt);
+	if (!data->of_root_node) {
 		pr_err("unable to unflatten devicetree\n");
 		return -EINVAL;
 	}
 
-	if (bootm_verbose(data) > 1)
-		of_print_nodes(node, 0);
-
-	fixfdt = of_get_fixed_tree(node);
-	if (!fixfdt)
-		return -EINVAL;
-
 	free(fdt);
 
-	data->oftree = fixfdt;
-
 	return 0;
 }
 #endif
@@ -408,10 +398,14 @@ static int do_bootm(int argc, char *argv[])
 		if (ret)
 			goto err_out;
 	} else {
-		data.oftree = of_get_fixed_tree(NULL);
-		if (bootm_verbose(&data) && data.oftree)
+		data.of_root_node = of_get_root_node();
+		if (bootm_verbose(&data) && data.of_root_node)
 			printf("using internal devicetree\n");
 	}
+
+
+	if (bootm_verbose(&data) > 1 && data.of_root_node)
+		of_print_nodes(data.of_root_node, 0);
 #endif
 	if (data.os_address == UIMAGE_SOME_ADDRESS)
 		data.os_address = UIMAGE_INVALID_ADDRESS;
diff --git a/include/boot.h b/include/boot.h
index 3ce0de1..971a403 100644
--- a/include/boot.h
+++ b/include/boot.h
@@ -41,6 +41,7 @@ struct image_data {
 
 	unsigned long initrd_address;
 
+	struct device_node *of_root_node;
 	struct fdt_header *oftree;
 
 	int verify;
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2013-03-04  9:53 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-04  9:53 [PATCH v2] remove libfdt Sascha Hauer
2013-03-04  9:53 ` [PATCH 01/37] of: unflatten: allocate root node explicitly Sascha Hauer
2013-03-04  9:53 ` [PATCH 02/37] of: export of_find_child Sascha Hauer
2013-03-04  9:53 ` [PATCH 03/37] of: removed unused variables Sascha Hauer
2013-03-04  9:53 ` [PATCH 04/37] of: Let of_find_node_by_path iterate over tree Sascha Hauer
2013-03-04  9:53 ` [PATCH 05/37] of: remove allnodes list Sascha Hauer
2013-03-04  9:53 ` [PATCH 06/37] ARM bootm: Use of_get_fixed_tree Sascha Hauer
2013-03-04  9:53 ` [PATCH 07/37] of: Add of_set_property and of_create_node Sascha Hauer
2013-03-04  9:53 ` [PATCH 08/37] of_node command: use of_create_node Sascha Hauer
2013-03-04  9:53 ` [PATCH 09/37] of: Add missing prototype for of_device_is_compatible Sascha Hauer
2013-03-04  9:53 ` [PATCH 10/37] of: let of_unflatten_dtb return the unflattened tree Sascha Hauer
2013-03-04  9:53 ` [PATCH 11/37] of: Add root node argument to of_find_node_by_path Sascha Hauer
2013-03-04  9:53 ` [PATCH 12/37] of: Add of_write_number helper Sascha Hauer
2013-03-04  9:53 ` [PATCH 13/37] of: Add initrd helper Sascha Hauer
2013-03-04 12:01   ` Alexander Aring
2013-03-04  9:53 ` [PATCH 14/37] of: make unflatten independent of libfdt Sascha Hauer
2013-03-04  9:53 ` [PATCH 15/37] of: make flatten " Sascha Hauer
2013-03-04  9:53 ` [PATCH 16/37] of/fdt: use optimized endianess conversion Sascha Hauer
2013-03-04  9:53 ` [PATCH 17/37] oftree command: Use of_print_nodes Sascha Hauer
2013-03-04  9:53 ` [PATCH 18/37] of: move OFTREE Kconfig option to drivers/of/ Sascha Hauer
2013-03-04  9:53 ` [PATCH 19/37] of: make OFDEVICE a user selectable option Sascha Hauer
2013-03-04  9:53 ` [PATCH 20/37] oftree command: retire CMD_OFTREE_PROBE Kconfig option Sascha Hauer
2013-03-04  9:53 ` [PATCH 21/37] of: move oftree Kconfig to the top of the drivers menu Sascha Hauer
2013-03-04  9:53 ` [PATCH 22/37] of: Pass barebox internal format devicetree to of_get_fixed_tree Sascha Hauer
2013-03-04  9:53 ` [PATCH 23/37] bootm: Use of_print_nodes instead of fdt_print Sascha Hauer
2013-03-04  9:53 ` [PATCH 24/37] of: move flat devicetree functions to separate file Sascha Hauer
2013-03-04  9:53 ` [PATCH 25/37] of: Add of property write functions for u32 Sascha Hauer
2013-03-04  9:53 ` [PATCH 26/37] of: make value of property in of_new_property optional Sascha Hauer
2013-03-04  9:53 ` [PATCH 27/37] of: Add missing prototype for size/address counting functions Sascha Hauer
2013-03-04  9:53 ` [PATCH 28/37] of: fixup unflattened devicetree Sascha Hauer
2013-03-04  9:53 ` [PATCH 29/37] of_* commands: print usage when insufficient arguments are given Sascha Hauer
2013-03-04  9:53 ` [PATCH 30/37] of_property command: Fix crash with empty property value Sascha Hauer
2013-03-04  9:53 ` [PATCH 31/37] ARM: bootm: rework concatenated oftree Sascha Hauer
2013-03-04  9:53 ` [PATCH 32/37] of: memory: Use of_write_number Sascha Hauer
2013-03-04  9:53 ` [PATCH 33/37] of: Add reservemap handling Sascha Hauer
2013-03-04  9:53 ` Sascha Hauer [this message]
2013-03-04  9:53 ` [PATCH 35/37] ARM bootm: Switch initrd support to unflattened tree Sascha Hauer
2013-03-04  9:53 ` [PATCH 36/37] of: remove unused libfdt Sascha Hauer
2013-03-04  9:53 ` [PATCH 37/37] of: make locally used functions static Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1362390820-10333-35-git-send-email-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox