[PATCH 07/40] dm: core: Avoid registering an inaccessible tree

Simon Glass sjg at chromium.org
Thu Jun 1 18:22:31 CEST 2023


At present there are various restrictions on the use of livetree:

- It is only available once the tree is unflattened, i.e. after relocation
- It is designed to be used with the control FDT
- It can (in principle) be used with other FDTs, but only if they are
  unflattened first; this is not supported

Add a few checks to make sure that any tree that is created is actually
valid. Otherwise it can be confusing when nodes and properties cannot
actually be accessed.

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

 drivers/core/ofnode.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index ec574c446079..1d4ab5bb6f2f 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -60,6 +60,11 @@ static oftree oftree_ensure(void *fdt)
 				return oftree_null();
 			}
 
+			if (of_live_active()) {
+				log_err("Cannot register a flattree when OF_LIVE is active\n");
+				return oftree_null();
+			}
+
 			/* register the new tree */
 			i = oftree_count++;
 			oftree_list[i] = fdt;
@@ -133,6 +138,10 @@ oftree oftree_from_fdt(void *fdt)
 	if (CONFIG_IS_ENABLED(OFNODE_MULTI_TREE))
 		return oftree_ensure(fdt);
 
+#ifdef OF_CHECKS
+	if (of_live_active())
+		return oftree_null();
+#endif
 	tree.fdt = fdt;
 
 	return tree;
-- 
2.41.0.rc0.172.g3f132b7071-goog



More information about the U-Boot mailing list