summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/chipset.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/default/src/chipset.c')
-rw-r--r--zephyr/test/drivers/default/src/chipset.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/zephyr/test/drivers/default/src/chipset.c b/zephyr/test/drivers/default/src/chipset.c
new file mode 100644
index 0000000000..89ba761c23
--- /dev/null
+++ b/zephyr/test/drivers/default/src/chipset.c
@@ -0,0 +1,101 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "chipset.h"
+#include "console.h"
+#include "test/drivers/test_state.h"
+
+#include <stdint.h>
+
+#include <zephyr/fff.h>
+#include <zephyr/shell/shell.h>
+#include <zephyr/ztest.h>
+
+#include <ap_power/ap_power.h>
+#include <ap_power/ap_power_events.h>
+
+ZTEST(chipset, test_get_ap_reset_stats__bad_pointers)
+{
+ zassert_equal(EC_ERROR_INVAL, get_ap_reset_stats(NULL, 0, NULL));
+}
+
+ZTEST(chipset, test_get_ap_reset_stats__happy_path)
+{
+ struct ap_reset_log_entry reset_log_entries[4];
+ uint32_t actual_reset_count, reset_count;
+
+ memset(reset_log_entries, 0, sizeof(reset_log_entries));
+
+ /* Report two AP resets */
+ report_ap_reset(CHIPSET_RESET_AP_WATCHDOG);
+ report_ap_reset(CHIPSET_RESET_HANG_REBOOT);
+
+ zassert_equal(EC_SUCCESS,
+ get_ap_reset_stats(reset_log_entries,
+ ARRAY_SIZE(reset_log_entries),
+ &reset_count));
+
+ /* Check the reset causes. The reset entry log is not a FIFO, so we get
+ * the last two empty slots followed by the two we triggered above.
+ */
+ zassert_equal(0, reset_log_entries[0].reset_cause);
+ zassert_equal(0, reset_log_entries[1].reset_cause);
+ zassert_equal(CHIPSET_RESET_AP_WATCHDOG,
+ reset_log_entries[2].reset_cause);
+ zassert_equal(CHIPSET_RESET_HANG_REBOOT,
+ reset_log_entries[3].reset_cause);
+
+ /* Check reset count */
+ actual_reset_count = test_chipset_get_ap_resets_since_ec_boot();
+ zassert_equal(actual_reset_count, reset_count,
+ "Found %d resets, expected %d", reset_count,
+ actual_reset_count);
+}
+
+ZTEST(chipset, test_console_cmd_apreset)
+{
+ struct ap_reset_log_entry reset_log_entries[4];
+ uint32_t reset_count;
+
+ zassert_ok(shell_execute_cmd(get_ec_shell(), "apreset"));
+
+ /* Make sure an AP reset happened. The expected reset log entry is at
+ * index 3 because we read out 3 empty slots first.
+ */
+ zassert_ok(get_ap_reset_stats(reset_log_entries,
+ ARRAY_SIZE(reset_log_entries),
+ &reset_count));
+
+ zassert_equal(CHIPSET_RESET_CONSOLE_CMD,
+ reset_log_entries[3].reset_cause);
+}
+
+ZTEST(chipset, test_console_cmd_apshutdown)
+{
+ struct ap_reset_log_entry reset_log_entries[4];
+ uint32_t reset_count;
+
+ zassert_ok(shell_execute_cmd(get_ec_shell(), "apshutdown"));
+
+ /* Make sure an AP reset happened. The expected reset log entry is at
+ * index 3 because we read out 3 empty slots first.
+ */
+ zassert_ok(get_ap_reset_stats(reset_log_entries,
+ ARRAY_SIZE(reset_log_entries),
+ &reset_count));
+
+ zassert_equal(CHIPSET_SHUTDOWN_CONSOLE_CMD,
+ reset_log_entries[3].reset_cause);
+}
+
+static void reset(void *arg)
+{
+ ARG_UNUSED(arg);
+
+ test_chipset_corrupt_reset_log_checksum();
+ init_reset_log();
+}
+
+ZTEST_SUITE(chipset, drivers_predicate_post_main, NULL, reset, reset, NULL);