summaryrefslogtreecommitdiff
path: root/zephyr/test/ap_power/src/ap_pwrseq.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/ap_power/src/ap_pwrseq.c')
-rw-r--r--zephyr/test/ap_power/src/ap_pwrseq.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/zephyr/test/ap_power/src/ap_pwrseq.c b/zephyr/test/ap_power/src/ap_pwrseq.c
new file mode 100644
index 0000000000..6c2fd4fd7f
--- /dev/null
+++ b/zephyr/test/ap_power/src/ap_pwrseq.c
@@ -0,0 +1,141 @@
+/* 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 "ap_power/ap_power.h"
+#include "ap_power/ap_power_interface.h"
+#include "chipset.h"
+#include "emul/emul_power_signals.h"
+#include "test_state.h"
+
+#include <zephyr/drivers/espi.h>
+#include <zephyr/drivers/espi_emul.h>
+#include <zephyr/drivers/gpio/gpio_emul.h>
+#include <zephyr/kernel.h>
+#include <zephyr/logging/log.h>
+#include <zephyr/ztest.h>
+
+#include <ap_power/ap_pwrseq.h>
+
+static struct ap_power_ev_callback test_cb;
+static int power_resume_count;
+static int power_start_up_count;
+static int power_hard_off_count;
+static int power_shutdown_count;
+static int power_shutdown_complete_count;
+static int power_suspend_count;
+
+static void emul_ev_handler(struct ap_power_ev_callback *callback,
+ struct ap_power_ev_data data)
+{
+ switch (data.event) {
+ case AP_POWER_RESUME:
+ power_resume_count++;
+ break;
+
+ case AP_POWER_STARTUP:
+ power_start_up_count++;
+ break;
+
+ case AP_POWER_HARD_OFF:
+ power_hard_off_count++;
+ break;
+
+ case AP_POWER_SHUTDOWN:
+ power_shutdown_count++;
+ break;
+
+ case AP_POWER_SHUTDOWN_COMPLETE:
+ power_shutdown_complete_count++;
+ break;
+
+ case AP_POWER_SUSPEND:
+ power_suspend_count++;
+ break;
+ default:
+ break;
+ };
+}
+
+ZTEST(ap_pwrseq, test_ap_pwrseq_0)
+{
+ zassert_equal(0,
+ power_signal_emul_load(
+ EMUL_POWER_SIGNAL_TEST_PLATFORM(tp_sys_g3_to_s0)),
+ "Unable to load test platfform `tp_sys_g3_to_s0`");
+
+ k_msleep(500);
+
+ zassert_equal(1, power_start_up_count,
+ "AP_POWER_STARTUP event not generated");
+ zassert_equal(1, power_resume_count,
+ "AP_POWER_RESUME event not generated");
+}
+
+ZTEST(ap_pwrseq, test_ap_pwrseq_1)
+{
+ zassert_equal(0,
+ power_signal_emul_load(EMUL_POWER_SIGNAL_TEST_PLATFORM(
+ tp_sys_s0_power_fail)),
+ "Unable to load test platfform `tp_sys_s0_power_fail`");
+
+ /*
+ * Once emulated power signals are loaded, we need to wake AP power
+ * Sequence thread up to start executing new set of power signals
+ */
+ ap_pwrseq_wake();
+ k_msleep(500);
+ zassert_equal(1, power_shutdown_count,
+ "AP_POWER_SHUTDOWN event not generated");
+ zassert_equal(1, power_shutdown_complete_count,
+ "AP_POWER_SHUTDOWN_COMPLETE event not generated");
+ zassert_equal(0, power_suspend_count,
+ "AP_POWER_SUSPEND event generated");
+}
+
+ZTEST(ap_pwrseq, test_ap_pwrseq_2)
+{
+ zassert_equal(
+ 0,
+ power_signal_emul_load(EMUL_POWER_SIGNAL_TEST_PLATFORM(
+ tp_sys_g3_to_s0_power_down)),
+ "Unable to load test platfform `tp_sys_g3_to_s0_power_down`");
+
+ ap_power_exit_hardoff();
+ k_msleep(2000);
+ zassert_equal(3, power_shutdown_count,
+ "AP_POWER_SHUTDOWN event not generated");
+ zassert_equal(3, power_shutdown_complete_count,
+ "AP_POWER_SHUTDOWN_COMPLETE event not generated");
+ zassert_equal(1, power_suspend_count,
+ "AP_POWER_SUSPEND event generated");
+ zassert_equal(1, power_hard_off_count,
+ "AP_POWER_HARD_OFF event generated");
+}
+
+void ap_pwrseq_after_test(void *data)
+{
+ power_signal_emul_unload();
+}
+
+void *ap_pwrseq_setup_suite(void)
+{
+ ap_power_ev_init_callback(&test_cb, emul_ev_handler,
+ AP_POWER_RESUME | AP_POWER_STARTUP |
+ AP_POWER_HARD_OFF | AP_POWER_SUSPEND |
+ AP_POWER_SHUTDOWN |
+ AP_POWER_SHUTDOWN_COMPLETE);
+
+ ap_power_ev_add_callback(&test_cb);
+
+ return NULL;
+}
+
+void ap_pwrseq_teardown_suite(void *data)
+{
+ ap_power_ev_remove_callback(&test_cb);
+}
+
+ZTEST_SUITE(ap_pwrseq, ap_power_predicate_post_main, ap_pwrseq_setup_suite,
+ NULL, ap_pwrseq_after_test, NULL);