Add this functionality to ut_run_list() so it can be removed from
dm_test_run().

At this point all tests are run through ut_run_list().

Signed-off-by: Simon Glass <[email protected]>
---

 test/dm/test-dm.c | 11 -----------
 test/test-main.c  | 31 ++++++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/test/dm/test-dm.c b/test/dm/test-dm.c
index 30046c71509..4f7d5736a53 100644
--- a/test/dm/test-dm.c
+++ b/test/dm/test-dm.c
@@ -23,21 +23,10 @@ int dm_test_run(const char *test_name)
 {
        struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
        const int n_ents = ll_entry_count(struct unit_test, dm_test);
-       struct device_node *of_root;
        int ret;
 
-       of_root = gd_of_root();
        ret = ut_run_list("driver model", "dm_test_", tests, n_ents, test_name);
 
-       /* Put everything back to normal so that sandbox works as expected */
-       gd_set_of_root(of_root);
-       gd->dm_root = NULL;
-       if (dm_init(CONFIG_IS_ENABLED(OF_LIVE)))
-               return CMD_RET_FAILURE;
-       dm_scan_plat(false);
-       if (!CONFIG_IS_ENABLED(OF_PLATDATA))
-               dm_scan_fdt(false);
-
        return ret ? CMD_RET_FAILURE : 0;
 }
 
diff --git a/test/test-main.c b/test/test-main.c
index 3b1c471d46f..893cbf45630 100644
--- a/test/test-main.c
+++ b/test/test-main.c
@@ -139,7 +139,7 @@ static bool test_matches(const char *prefix, const char 
*test_name,
        return false;
 }
 
-/*
+/**
  * ut_list_has_dm_tests() - Check if a list of tests has driver model ones
  *
  * @tests: List of tests to run
@@ -158,6 +158,28 @@ static bool ut_list_has_dm_tests(struct unit_test *tests, 
int count)
        return false;
 }
 
+/**
+ * dm_test_restore() Put things back to normal so sandbox works as expected
+ *
+ * @of_root: Value to set for of_root
+ * @return 0 if OK, -ve on error
+ */
+static int dm_test_restore(struct device_node *of_root)
+{
+       int ret;
+
+       gd_set_of_root(of_root);
+       gd->dm_root = NULL;
+       ret = dm_init(CONFIG_IS_ENABLED(OF_LIVE));
+       if (ret)
+               return ret;
+       dm_scan_plat(false);
+       if (!CONFIG_IS_ENABLED(OF_PLATDATA))
+               dm_scan_fdt(false);
+
+       return 0;
+}
+
 /**
  * test_pre_run() - Handle any preparation needed to run a test
  *
@@ -357,10 +379,12 @@ int ut_run_list(const char *category, const char *prefix,
                struct unit_test *tests, int count, const char *select_name)
 {
        struct unit_test_state uts = { .fail_count = 0 };
+       bool has_dm_tests = false;
        int ret;
 
        if (!CONFIG_IS_ENABLED(OF_PLATDATA) &&
            ut_list_has_dm_tests(tests, count)) {
+               has_dm_tests = true;
                /*
                 * If we have no device tree, or it only has a root node, then
                 * these * tests clearly aren't going to work...
@@ -375,6 +399,7 @@ int ut_run_list(const char *category, const char *prefix,
        if (!select_name)
                printf("Running %d %s tests\n", count, category);
 
+
        uts.of_root = gd_of_root();
        ret = ut_run_tests(&uts, prefix, tests, count, select_name);
 
@@ -383,5 +408,9 @@ int ut_run_list(const char *category, const char *prefix,
        else
                printf("Failures: %d\n", uts.fail_count);
 
+       /* Best efforts only...ignore errors */
+       if (has_dm_tests)
+               dm_test_restore(uts.of_root);
+
        return ret;
 }
-- 
2.30.0.280.ga3ce27912f-goog

Reply via email to