16 #include "sw/device/lib/runtime/irq.h"
18 #include "sw/device/lib/testing/ret_sram_testutils.h"
19 #include "sw/device/lib/testing/rstmgr_testutils.h"
20 #include "sw/device/lib/testing/rv_plic_testutils.h"
21 #include "sw/device/lib/testing/test_framework/FreeRTOSConfig.h"
22 #include "sw/device/lib/testing/test_framework/check.h"
24 #include "sw/device/tests/pwrmgr_sleep_resets_lib.h"
28 OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control =
true);
33 irq_global_ctrl(
true);
34 irq_external_ctrl(
true);
38 ret_sram_testutils_init();
41 rv_plic_testutils_irq_range_enable(plic, kPlicTarget,
45 config_alert_handler();
49 rst_info = rstmgr_testutils_reason_get();
50 rstmgr_testutils_reason_clear();
52 enum { kCounterResets = 0 };
54 CHECK_STATUS_OK(ret_sram_testutils_counter_clear(kCounterResets));
56 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
58 rst_info == kDifRstmgrResetInfoSysRstCtrl ||
59 rst_info == kDifRstmgrResetInfoWatchdog ||
62 rst_info == (kDifRstmgrResetInfoSysRstCtrl |
66 rst_info == (kDifRstmgrResetInfoWatchdog |
71 "Wrong reset reason %02X", rst_info);
73 uint32_t reset_case = 0;
74 CHECK_STATUS_OK(ret_sram_testutils_counter_get(kCounterResets, &reset_case));
75 CHECK_STATUS_OK(ret_sram_testutils_counter_increment(kCounterResets));
77 LOG_INFO(
" case %d, normal sleep mode", reset_case);
83 prepare_for_sysrst(kPwrmgrSleepResetsLibModesNormalSleep);
86 LOG_INFO(
"Watchdog reset in normal sleep mode");
88 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
89 config_wdog(200, 2 * 200);
90 prepare_for_wdog(kPwrmgrSleepResetsLibModesNormalSleep);
93 LOG_INFO(
"Rstmgr software reset in normal sleep mode");
95 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
101 config_wdog(200, 2 * 200);
104 prepare_for_wdog(kPwrmgrSleepResetsLibModesNormalSleep);
107 LOG_INFO(
"Escalation reset in normal sleep mode");
108 LOG_INFO(
"Let SV wait timer reset");
109 trigger_escalation();
115 LOG_INFO(
"Booting for undefined case %0d", reset_case);