]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: Provide a way to reset the device tree
authorSimon Glass <sjg@chromium.org>
Wed, 7 Sep 2022 02:27:19 +0000 (20:27 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 30 Sep 2022 02:43:43 +0000 (22:43 -0400)
At present there is only one device tree used by the ofnode functions,
except for some esoteric use of live tree. In preparation for supporting
more than one, add a way to reset the list of device trees.

For now this does nothing.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/board_r.c
include/dm/ofnode.h
lib/fdtdec.c
test/test-main.c

index 50670b5615a5d3fae5b8d408b76b8559372bc5e0..6e1ad2bfce8ff515a3298173447a579f8bd310fd 100644 (file)
@@ -234,6 +234,8 @@ static int initr_dm(void)
 {
        int ret;
 
+       oftree_reset();
+
        /* Save the pre-reloc driver model and start a new one */
        gd->dm_root_f = gd->dm_root;
        gd->dm_root = NULL;
index 8b0a10870625f7727471875c2e97f26e743052aa..7e9d3be96a2158a6638fc551492405cf35aa1cf9 100644 (file)
@@ -27,6 +27,14 @@ struct ofnode_phandle_args {
        uint32_t args[OF_MAX_PHANDLE_ARGS];
 };
 
+/**
+ * oftree_reset() - reset the state of the oftree list
+ *
+ * Reset the oftree list so it can be started again. This should be called
+ * once the control FDT is in place, but before the ofnode interface is used.
+ */
+static inline void oftree_reset(void) {}
+
 /**
  * ofnode_to_np() - convert an ofnode to a live DT node pointer
  *
index eca01081c5d4989d96ce236a9d3960f3d3d3f390..64c5b3da15ef9a25709688959bf9ea9839c4d54b 100644 (file)
@@ -13,7 +13,6 @@
 #include <log.h>
 #include <malloc.h>
 #include <net.h>
-#include <dm/of_extra.h>
 #include <env.h>
 #include <errno.h>
 #include <fdtdec.h>
@@ -24,6 +23,8 @@
 #include <serial.h>
 #include <asm/global_data.h>
 #include <asm/sections.h>
+#include <dm/ofnode.h>
+#include <dm/of_extra.h>
 #include <linux/ctype.h>
 #include <linux/lzo.h>
 #include <linux/ioport.h>
@@ -1668,6 +1669,8 @@ int fdtdec_setup(void)
        ret = fdtdec_prepare_fdt();
        if (!ret)
                ret = fdtdec_board_setup(gd->fdt_blob);
+       oftree_reset();
+
        return ret;
 }
 
index 1fcbae3cd4e2d82f8fdc7eef32cb5e7cecb607ba..d74df297c43a6a88d2e2241b2bca3bd5904a055c 100644 (file)
@@ -11,6 +11,7 @@
 #include <event.h>
 #include <of_live.h>
 #include <os.h>
+#include <dm/ofnode.h>
 #include <dm/root.h>
 #include <dm/test.h>
 #include <dm/uclass-internal.h>
@@ -99,6 +100,7 @@ static int dm_test_pre_run(struct unit_test_state *uts)
 
        /* Determine whether to make the live tree available */
        gd_set_of_root(of_live ? uts->of_root : NULL);
+       oftree_reset();
        ut_assertok(dm_init(of_live));
        uts->root = dm_root();