
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 ---
(no changes since v1)
common/board_r.c | 2 ++ include/dm/ofnode.h | 8 ++++++++ lib/fdtdec.c | 5 ++++- test/test-main.c | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/common/board_r.c b/common/board_r.c index 56eb60fa275..77e9ca0581f 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -233,6 +233,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; diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index e221591225b..46802366667 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -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 * diff --git a/lib/fdtdec.c b/lib/fdtdec.c index eca01081c5d..64c5b3da15e 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -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; }
diff --git a/test/test-main.c b/test/test-main.c index e06b5437121..1011dc16849 100644 --- a/test/test-main.c +++ b/test/test-main.c @@ -10,6 +10,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> @@ -98,6 +99,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();