12 #include "sw/device/lib/testing/rstmgr_testutils.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
15 #include "sw/device/lib/testing/test_framework/ottf_utils.h"
19 OTTF_DEFINE_TEST_CONFIG();
21 static dif_pinmux_t pinmux;
22 static dif_sysrst_ctrl_t sysrst_ctrl;
23 static dif_pwrmgr_t pwrmgr;
24 static dif_rstmgr_t rstmgr;
27 const uint32_t kTestPhaseTimeoutUsec = 10000;
31 kTestPhaseCheckComboReset = 1,
32 kTestPhaseOverrideSetup = 2,
33 kTestPhaseOverrideZeros = 3,
34 kTestPhaseOverrideOnes = 4,
41 kLoopbackPartial = 0x5,
87 kDetectionTimeThreshold = 1024,
88 kEcResetDuration = 512,
89 kDebounceTimeThreshold = 128,
93 static volatile const uint8_t kTestPhase = 0;
97 static void pinmux_setup(
void) {
98 for (
int i = 0; i < kNumMioInputs; ++i) {
102 for (
int i = 0; i < kNumMioOutputs; ++i) {
104 kPeripheralOutputs[i]));
108 static void configure_combo_reset(
void) {
114 .detection_time_threshold = kDetectionTimeThreshold,
115 .embedded_controller_reset_duration = kEcResetDuration,
120 .debounce_time_threshold = kDebounceTimeThreshold,
129 .override_value =
true}));
131 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(&rstmgr));
135 dt_sysrst_ctrl_instance_id(kDtSysrstCtrlAon), kDtSysrstCtrlResetReqRstReq,
140 test_status_set(kTestStatusInWfi);
148 static void sync_with_testbench(uint8_t prior_phase) {
151 test_status_set(kTestStatusInWfi);
152 test_status_set(kTestStatusInTest);
154 kTestPhaseTimeoutUsec);
159 static void override_setup(uint8_t pins_to_override) {
160 for (
int i = 0; i < kOutputNumPads; ++i) {
161 if ((pins_to_override >> i) & 0x1) {
165 &sysrst_ctrl, kSysrstCtrlOutputs[i],
true,
true));
171 static void set_output_overrides(uint8_t override_value) {
172 for (
int i = 0; i < kOutputNumPads; ++i) {
174 &sysrst_ctrl, kSysrstCtrlOutputs[i], (override_value >> i) & 0x1));
179 CHECK_DIF_OK(dif_pinmux_init(
181 CHECK_DIF_OK(dif_sysrst_ctrl_init(
184 CHECK_DIF_OK(dif_pwrmgr_init_from_dt(kDtPwrmgrAon, &pwrmgr));
185 CHECK_DIF_OK(dif_rstmgr_init(
189 rstmgr_reset_info = rstmgr_testutils_reason_get();
195 uint8_t current_test_phase = kTestPhase;
196 while (current_test_phase < kTestPhaseDone) {
197 LOG_INFO(
"Test phase %d", current_test_phase);
198 switch (current_test_phase) {
199 case kTestPhaseSetup:
201 configure_combo_reset();
202 LOG_ERROR(
"We should have reset before this line.");
204 case kTestPhaseCheckComboReset:
205 CHECK(rstmgr_reset_info == kDifRstmgrResetInfoSysRstCtrl);
207 case kTestPhaseOverrideSetup:
208 override_setup(kAllOne);
210 case kTestPhaseOverrideZeros:
211 set_output_overrides(kAllZero);
213 case kTestPhaseOverrideOnes:
214 set_output_overrides(kAllOne);
217 LOG_ERROR(
"Unexpected test phase : %d", current_test_phase);
220 sync_with_testbench(current_test_phase);
221 current_test_phase = kTestPhase;