aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-09-06 20:27:06 -0600
committerTom Rini <trini@konsulko.com>2022-09-29 16:09:56 -0400
commiteb6e903a569d35032ca3772d93c26fb1071ab3ae (patch)
tree0e2a9b9ced601089616d3b6dc0eb8c1158361b6a
parent0e4b697f884d1f2190a9972b662abc8498159333 (diff)
downloadu-boot-eb6e903a569d35032ca3772d93c26fb1071ab3ae.zip
u-boot-eb6e903a569d35032ca3772d93c26fb1071ab3ae.tar.gz
u-boot-eb6e903a569d35032ca3772d93c26fb1071ab3ae.tar.bz2
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>
-rw-r--r--include/asm-generic/global_data.h4
-rw-r--r--test/test-main.c19
2 files changed, 20 insertions, 3 deletions
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index 4aeb61f..2d55fe2 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -646,6 +646,10 @@ enum gd_flags {
* @GD_FLG_SMP_READY: SMP initialization is complete
*/
GD_FLG_SMP_READY = 0x80000,
+ /**
+ * @GD_FLG_FDT_CHANGED: Device tree change has been detected by tests
+ */
+ GD_FLG_FDT_CHANGED = 0x100000,
};
#endif /* __ASSEMBLY__ */
diff --git a/test/test-main.c b/test/test-main.c
index 082821e..c12027c 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++;