diff options
author | Simon Glass <sjg@chromium.org> | 2022-09-06 20:27:06 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-09-29 16:09:56 -0400 |
commit | eb6e903a569d35032ca3772d93c26fb1071ab3ae (patch) | |
tree | 0e2a9b9ced601089616d3b6dc0eb8c1158361b6a /test/test-main.c | |
parent | 0e4b697f884d1f2190a9972b662abc8498159333 (diff) | |
download | u-boot-eb6e903a569d35032ca3772d93c26fb1071ab3ae.tar.gz |
test: Detect a change in the device tree
If the device tree changes during a test and we cannot restore it, mark
it as such so that future tests which need the live tree are skipped.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test/test-main.c')
-rw-r--r-- | test/test-main.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/test/test-main.c b/test/test-main.c index 082821ef3e0..c12027ce680 100644 --- a/test/test-main.c +++ b/test/test-main.c @@ -79,6 +79,10 @@ static int dm_test_pre_run(struct unit_test_state *uts) { bool of_live = uts->of_live; + if (of_live && (gd->flags & GD_FLG_FDT_CHANGED)) { + printf("Cannot run live tree test as device tree changed\n"); + return -EFAULT; + } uts->root = NULL; uts->testdev = NULL; uts->force_fail_alloc = false; @@ -113,9 +117,17 @@ static int dm_test_post_run(struct unit_test_state *uts) uint chksum; chksum = crc8(0, gd->fdt_blob, fdt_totalsize(gd->fdt_blob)); - - if (chksum != uts->fdt_chksum) + if (chksum != uts->fdt_chksum) { + /* + * We cannot run any more tests that need the + * live tree, since its strings point into the + * flat tree, which has changed. This likely + * means that at least some of the pointers from + * the live tree point to different things + */ printf("Device tree changed: cannot run live tree tests\n"); + gd->flags |= GD_FLG_FDT_CHANGED; + } break; } case FDTCHK_NONE: @@ -415,7 +427,8 @@ static int ut_run_test_live_flat(struct unit_test_state *uts, * or it is a core test. */ if (!(test->flags & UT_TESTF_LIVE_TREE) && - (!runs || ut_test_run_on_flattree(test))) { + (!runs || ut_test_run_on_flattree(test)) && + !(gd->flags & GD_FLG_FDT_CHANGED)) { uts->of_live = false; ut_assertok(ut_run_test(uts, test, test->name)); runs++; |