[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