diff options
| -rw-r--r-- | common/board_r.c | 2 | ||||
| -rw-r--r-- | include/dm/ofnode.h | 8 | ||||
| -rw-r--r-- | lib/fdtdec.c | 5 | ||||
| -rw-r--r-- | test/test-main.c | 2 | 
4 files changed, 16 insertions, 1 deletions
| diff --git a/common/board_r.c b/common/board_r.c index 50670b5615a..6e1ad2bfce8 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -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; diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 8b0a1087062..7e9d3be96a2 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -28,6 +28,14 @@ struct ofnode_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   *   * This cannot be called if the reference contains an offset. 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 1fcbae3cd4e..d74df297c43 100644 --- a/test/test-main.c +++ b/test/test-main.c @@ -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(); | 
