12 #include "sw/device/lib/testing/pwrmgr_testutils.h"
13 #include "sw/device/lib/testing/rstmgr_testutils.h"
14 #include "sw/device/lib/testing/sysrst_ctrl_testutils.h"
15 #include "sw/device/lib/testing/test_framework/check.h"
20 OTTF_DEFINE_TEST_CONFIG();
22 static dif_pwrmgr_t pwrmgr;
23 static dif_rstmgr_t rstmgr;
24 static dif_sysrst_ctrl_t sysrst_ctrl;
25 static dif_gpio_t gpio;
28 kTestPhaseCheckComboReset = 0,
29 kTestPhaseCheckDeepSleepWakeup = 1,
30 kTestPhaseCheckDeepSleepReset = 2,
31 kTestPhaseFinalCheck = 3,
38 kDetectionTimeThreshold = 1024,
39 kEcResetDuration = 512,
40 kDebounceTimeThreshold = 128,
44 kOutputNumMioPads = 6,
71 static volatile const uint8_t kTestPhaseDV = 0;
73 static const uint32_t kGpioMask = 0x3;
75 static void check_combo_reset(
void) {
81 .detection_time_threshold = kDetectionTimeThreshold,
82 .embedded_controller_reset_duration = kEcResetDuration,
87 .debounce_time_threshold = kDebounceTimeThreshold,
95 .override_value =
true}));
97 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(&rstmgr));
99 kDifPwrmgrResetRequestSourceOne,
102 test_status_set(kTestStatusInWfi);
106 static void check_deep_sleep_wakeup(
void) {
109 .ac_power_debounce_time_threshold = 0,
110 .lid_open_debounce_time_threshold = 0,
111 .power_button_debounce_time_threshold = 0,
115 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(&rstmgr));
116 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(
117 &pwrmgr, kDifPwrmgrWakeupRequestSourceOne, 0));
119 test_status_set(kTestStatusInWfi);
123 static void check_deep_sleep_reset(
void) {
129 .detection_time_threshold = kDetectionTimeThreshold,
130 .embedded_controller_reset_duration = kEcResetDuration,
137 .override_value =
true}));
140 .debounce_time_threshold = kDebounceTimeThreshold,
145 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(&rstmgr));
147 kDifPwrmgrResetRequestSourceOne,
152 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(
153 &pwrmgr, kDifPwrmgrWakeupRequestSourceTwo, 0));
155 test_status_set(kTestStatusInWfi);
160 CHECK_DIF_OK(dif_pwrmgr_init(
162 CHECK_DIF_OK(dif_rstmgr_init(
164 CHECK_DIF_OK(dif_sysrst_ctrl_init(
171 rstmgr_reset_info = rstmgr_testutils_reason_get();
174 CHECK_DIF_OK(dif_pinmux_init(
178 for (
int i = 0; i < kOutputNumMioPads; ++i) {
185 sysrst_ctrl_testutils_setup_dio(&pinmux);
199 uint8_t kTestPhase = kTestPhaseDV;
203 kTestPhase = gpio_state & kGpioMask;
205 LOG_INFO(
"test phase: %u", kTestPhase);
207 switch (kTestPhase) {
208 case kTestPhaseCheckComboReset:
212 case kTestPhaseCheckDeepSleepWakeup:
213 CHECK(rstmgr_reset_info == kDifRstmgrResetInfoSysRstCtrl);
214 check_deep_sleep_wakeup();
216 case kTestPhaseCheckDeepSleepReset:
218 check_deep_sleep_reset();
220 case kTestPhaseFinalCheck:
221 CHECK(rstmgr_reset_info ==
226 LOG_ERROR(
"Unexpected test phase : %d", kTestPhase);