[U-Boot] [PATCH 04/22] dm: Add livetree definitions

Simon Glass sjg at chromium.org
Wed Jan 18 06:50:33 CET 2017


Add a Kconfig option to enable a live device tree, built at run time from
the flat tree. Also all structure definitions and a root node.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 dts/Kconfig                       | 11 ++++++++
 include/asm-generic/global_data.h |  3 +++
 include/dm/of.h                   | 53 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+)
 create mode 100644 include/dm/of.h

diff --git a/dts/Kconfig b/dts/Kconfig
index 4b7d8b15cc0..0fa1fb5c656 100644
--- a/dts/Kconfig
+++ b/dts/Kconfig
@@ -22,6 +22,17 @@ config SPL_OF_CONTROL
 	  which is not enough to support device tree. Enable this option to
 	  allow such boards to be supported by U-Boot SPL.
 
+config OF_LIVE
+	bool "Enable use of a live tree"
+	depends on OF_CONTROL
+	help
+	  Normally U-Boot uses a flat device tree which saves space and
+	  avoids the need to unpack the tree before use. However a flat
+	  tree does not support modifcation from within U-Boot since it
+	  can invalidate driver-model device tree offsets. This option
+	  enables a live tree which is available during relocation,
+	  and can be adjusted as needed.
+
 choice
 	prompt "Provider of DTB for DT control"
 	depends on OF_CONTROL
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index e02863dc031..c35f5d0c330 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -72,6 +72,9 @@ typedef struct global_data {
 	const void *fdt_blob;		/* Our device tree, NULL if none */
 	void *new_fdt;			/* Relocated FDT */
 	unsigned long fdt_size;		/* Space reserved for relocated FDT */
+#ifdef CONFIG_OF_LIVE
+	struct device_node *of_root;
+#endif
 	struct jt_funcs *jt;		/* jump table */
 	char env_buf[32];		/* buffer for getenv() before reloc. */
 #ifdef CONFIG_TRACE
diff --git a/include/dm/of.h b/include/dm/of.h
new file mode 100644
index 00000000000..716fd73ab38
--- /dev/null
+++ b/include/dm/of.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017 Google, Inc
+ * Written by Simon Glass <sjg at chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _DM_OF_H
+#define _DM_OF_H
+
+typedef u32 phandle;
+typedef u32 ihandle;
+
+struct property {
+	char	*name;
+	int	length;
+	void	*value;
+	struct property *next;
+};
+
+struct device_node {
+	const char *name;
+	phandle phandle;
+	const char *full_name;
+
+	struct	property *properties;
+	struct	device_node *parent;
+	struct	device_node *child;
+	struct	device_node *sibling;
+};
+
+#define OF_MAX_PHANDLE_ARGS 16
+struct of_phandle_args {
+	struct device_node *np;
+	int args_count;
+	uint32_t args[OF_MAX_PHANDLE_ARGS];
+};
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_OF_LIVE
+static inline bool of_use_livetree(void)
+{
+	return gd->of_root != NULL;
+}
+#else
+static inline bool of_use_livetree(void)
+{
+	return false;
+}
+#endif
+
+#endif
-- 
2.11.0.483.g087da7b7c-goog



More information about the U-Boot mailing list