summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-10-03 11:31:40 -0600
committerSimon Glass <sjg@chromium.org>2020-10-29 14:42:18 -0600
commit8a38abfc43f94a92b63e428738714111710bda53 (patch)
tree3457b30a58ed529fea91199bb7e9284f7e42292b /test
parentbb44ebdd0f3eccece2081ec51cf3b3554dafd801 (diff)
dm: Use driver_info index instead of pointer
At present we use a 'node' pointer in the of-platadata phandle_n_arg structs. This is a pointer to the struct driver_info for a particular device, and we can use it to obtain the struct udevice pointer itself. Since we don't know the struct udevice pointer until it is allocated in memory, we have to fix up the phandle_n_arg.node at runtime. This is annoying since it requires that SPL's data is writable and adds a small amount of extra (generated) code in the dm_populate_phandle_data() function. Now that we can find a driver_info by its index, it is easier to put the index in the phandle_n_arg structures. Update dtoc to do this, add a new device_get_by_driver_info_idx() to look up a device by drive_info index and update the tests to match. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test')
-rw-r--r--test/dm/of_platdata.c10
-rw-r--r--test/dm/test-main.c24
2 files changed, 25 insertions, 9 deletions
diff --git a/test/dm/of_platdata.c b/test/dm/of_platdata.c
index bad733fbee..4f3cc159d0 100644
--- a/test/dm/of_platdata.c
+++ b/test/dm/of_platdata.c
@@ -183,22 +183,22 @@ static int dm_test_of_platdata_phandle(struct unit_test_state *uts)
ut_asserteq_str("sandbox_clk_test", dev->name);
plat = dev_get_platdata(dev);
- ut_assertok(device_get_by_driver_info(plat->clocks[0].node, &clk));
+ ut_assertok(device_get_by_driver_info_idx(plat->clocks[0].idx, &clk));
ut_asserteq_str("fixed_clock", clk->name);
- ut_assertok(device_get_by_driver_info(plat->clocks[1].node, &clk));
+ ut_assertok(device_get_by_driver_info_idx(plat->clocks[1].idx, &clk));
ut_asserteq_str("sandbox_clk", clk->name);
ut_asserteq(1, plat->clocks[1].arg[0]);
- ut_assertok(device_get_by_driver_info(plat->clocks[2].node, &clk));
+ ut_assertok(device_get_by_driver_info_idx(plat->clocks[2].idx, &clk));
ut_asserteq_str("sandbox_clk", clk->name);
ut_asserteq(0, plat->clocks[2].arg[0]);
- ut_assertok(device_get_by_driver_info(plat->clocks[3].node, &clk));
+ ut_assertok(device_get_by_driver_info_idx(plat->clocks[3].idx, &clk));
ut_asserteq_str("sandbox_clk", clk->name);
ut_asserteq(3, plat->clocks[3].arg[0]);
- ut_assertok(device_get_by_driver_info(plat->clocks[4].node, &clk));
+ ut_assertok(device_get_by_driver_info_idx(plat->clocks[4].idx, &clk));
ut_asserteq_str("sandbox_clk", clk->name);
ut_asserteq(2, plat->clocks[4].arg[0]);
diff --git a/test/dm/test-main.c b/test/dm/test-main.c
index 9d22df8c4d..fd24635006 100644
--- a/test/dm/test-main.c
+++ b/test/dm/test-main.c
@@ -127,6 +127,24 @@ static bool dm_test_run_on_flattree(struct unit_test *test)
return !strstr(fname, "video") || strstr(test->name, "video_base");
}
+static bool test_matches(const char *test_name, const char *find_name)
+{
+ if (!find_name)
+ return true;
+
+ if (!strcmp(test_name, find_name))
+ return true;
+
+ /* All tests have this prefix */
+ if (!strncmp(test_name, "dm_test_", 8))
+ test_name += 8;
+
+ if (!strcmp(test_name, find_name))
+ return true;
+
+ return false;
+}
+
int dm_test_main(const char *test_name)
{
struct unit_test *tests = ll_entry_start(struct unit_test, dm_test);
@@ -152,6 +170,7 @@ int dm_test_main(const char *test_name)
if (!test_name)
printf("Running %d driver model tests\n", n_ents);
+ else
found = 0;
uts->of_root = gd_of_root();
@@ -159,10 +178,7 @@ int dm_test_main(const char *test_name)
const char *name = test->name;
int runs;
- /* All tests have this prefix */
- if (!strncmp(name, "dm_test_", 8))
- name += 8;
- if (test_name && strcmp(test_name, name))
+ if (!test_matches(name, test_name))
continue;
/* Run with the live tree if possible */