sandbox: Add a way to reset sandbox state for tests
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:13 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:09 +0000 (07:03 -0600)
Running a new test should reset the sandbox state to avoid tests
interferring with each other. Move the existing state-reset code into a
function so it can be used from tests.

Also update the code to reset the SPI devices and adjust the test code to
call it.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/state.c
arch/sandbox/include/asm/state.h
test/dm/test-main.c

index 2b4dbd341ff3c538cbcc34c100d421a34c2fe8f5..07584486dbea7c35e69fb83afefd2c974c7f7053 100644 (file)
@@ -351,6 +351,16 @@ bool state_get_skip_delays(void)
        return state->skip_delays;
 }
 
+void state_reset_for_test(struct sandbox_state *state)
+{
+       /* No reset yet, so mark it as such. Always allow power reset */
+       state->last_sysreset = SYSRESET_COUNT;
+       state->sysreset_allowed[SYSRESET_POWER] = true;
+
+       memset(&state->wdt, '\0', sizeof(state->wdt));
+       memset(state->spi, '\0', sizeof(state->spi));
+}
+
 int state_init(void)
 {
        state = &main_state;
@@ -359,10 +369,7 @@ int state_init(void)
        state->ram_buf = os_malloc(state->ram_size);
        assert(state->ram_buf);
 
-       /* No reset yet, so mark it as such. Always allow power reset */
-       state->last_sysreset = SYSRESET_COUNT;
-       state->sysreset_allowed[SYSRESET_POWER] = true;
-
+       state_reset_for_test(state);
        /*
         * Example of how to use GPIOs:
         *
index 987cc7b49dcd70dad7e341f3e87dc1f2f0a2d2fb..617f95291ab816f6d658d8c2157433c38fab1959 100644 (file)
@@ -213,6 +213,13 @@ void state_set_skip_delays(bool skip_delays);
  */
 bool state_get_skip_delays(void);
 
+/**
+ * state_reset_for_test() - Reset ready to re-run tests
+ *
+ * This clears out any test state ready for another test run.
+ */
+void state_reset_for_test(struct sandbox_state *state);
+
 /**
  * Initialize the test system state
  */
index 67c0082fb841fff3a7f20c43df38fd1c6bd15958..9aa9d3a9533f7efecf30a0e8455b145e3055b2fb 100644 (file)
@@ -29,6 +29,7 @@ static int dm_test_init(struct unit_test_state *uts)
        memset(dms, '\0', sizeof(*dms));
        gd->dm_root = NULL;
        memset(dm_testdrv_op_count, '\0', sizeof(dm_testdrv_op_count));
+       state_reset_for_test(state_get_current());
 
        ut_assertok(dm_init(false));
        dms->root = dm_root();