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));
133 kDifPwrmgrResetRequestSourceOne,
136 test_status_set(kTestStatusInWfi);
144 static void sync_with_testbench(uint8_t prior_phase) {
147 test_status_set(kTestStatusInWfi);
148 test_status_set(kTestStatusInTest);
150 kTestPhaseTimeoutUsec);
155 static void override_setup(uint8_t pins_to_override) {
156 for (
int i = 0; i < kOutputNumPads; ++i) {
157 if ((pins_to_override >> i) & 0x1) {
161 &sysrst_ctrl, kSysrstCtrlOutputs[i],
true,
true));
167 static void set_output_overrides(uint8_t override_value) {
168 for (
int i = 0; i < kOutputNumPads; ++i) {
170 &sysrst_ctrl, kSysrstCtrlOutputs[i], (override_value >> i) & 0x1));
175 CHECK_DIF_OK(dif_pinmux_init(
177 CHECK_DIF_OK(dif_sysrst_ctrl_init(
180 CHECK_DIF_OK(dif_pwrmgr_init(
182 CHECK_DIF_OK(dif_rstmgr_init(
186 rstmgr_reset_info = rstmgr_testutils_reason_get();
192 uint8_t current_test_phase = kTestPhase;
193 while (current_test_phase < kTestPhaseDone) {
194 LOG_INFO(
"Test phase %d", current_test_phase);
195 switch (current_test_phase) {
196 case kTestPhaseSetup:
198 configure_combo_reset();
199 LOG_ERROR(
"We should have reset before this line.");
201 case kTestPhaseCheckComboReset:
202 CHECK(rstmgr_reset_info == kDifRstmgrResetInfoSysRstCtrl);
204 case kTestPhaseOverrideSetup:
205 override_setup(kAllOne);
207 case kTestPhaseOverrideZeros:
208 set_output_overrides(kAllZero);
210 case kTestPhaseOverrideOnes:
211 set_output_overrides(kAllOne);
214 LOG_ERROR(
"Unexpected test phase : %d", current_test_phase);
217 sync_with_testbench(current_test_phase);
218 current_test_phase = kTestPhase;