[PATCH 13/37] of: Add initrd helper

Sascha Hauer s.hauer at pengutronix.de
Mon Mar 4 04:53:16 EST 2013


Add a helper to set the initrd properties in the unflattened tree.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 drivers/of/base.c |   39 +++++++++++++++++++++++++++++++++++++++
 include/of.h      |    3 +++
 2 files changed, 42 insertions(+)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index 721db29..4dbe11e 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1201,3 +1201,42 @@ int of_device_is_stdout_path(struct device_d *dev)
 
 	return 0;
 }
+
+/**
+ * of_add_initrd - add initrd properties to the devicetree
+ * @root - the root node of the tree
+ * @start - physical start address of the initrd image
+ * @end - physical end address of the initrd image
+ *
+ * Add initrd properties to the devicetree, or, if end is 0,
+ * delete them.
+ */
+int of_add_initrd(struct device_node *root, resource_size_t start,
+		resource_size_t end)
+{
+	struct device_node *chosen;
+	__be32 buf[2];
+
+	chosen = of_find_node_by_path(root, "/chosen");
+	if (!chosen)
+		return -EINVAL;
+
+	if (end) {
+		of_write_number(buf, start, 2);
+		of_set_property(chosen, "linux,initrd-start", buf, 8, 1);
+		of_write_number(buf, end, 2);
+		of_set_property(chosen, "linux,initrd-end", buf, 8, 1);
+	} else {
+		struct property *pp;
+
+		pp = of_find_property(chosen, "linux,initrd-start");
+		if (pp)
+			of_delete_property(pp);
+
+		pp = of_find_property(chosen, "linux,initrd-end");
+		if (pp)
+			of_delete_property(pp);
+	}
+
+	return 0;
+}
diff --git a/include/of.h b/include/of.h
index 6154490..1562f4e 100644
--- a/include/of.h
+++ b/include/of.h
@@ -68,6 +68,9 @@ struct driver_d;
 
 int of_match(struct device_d *dev, struct driver_d *drv);
 
+int of_add_initrd(struct device_node *root, resource_size_t start,
+		resource_size_t end);
+
 struct property *of_find_property(const struct device_node *node, const char *name);
 
 struct device_node *of_find_node_by_path(struct device_node *root, const char *path);
-- 
1.7.10.4




More information about the barebox mailing list