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"
34 OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control =
true);
40 irq_global_ctrl(
true);
41 irq_external_ctrl(
true);
45 ret_sram_testutils_init();
48 rv_plic_testutils_irq_range_enable(plic, kPlicTarget,
52 config_alert_handler();
56 rst_info = rstmgr_testutils_reason_get();
57 rstmgr_testutils_reason_clear();
59 enum { kCounterResets = 0 };
61 CHECK_STATUS_OK(ret_sram_testutils_counter_clear(kCounterResets));
63 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
65 rst_info == kDifRstmgrResetInfoSysRstCtrl ||
66 rst_info == kDifRstmgrResetInfoWatchdog ||
69 rst_info == (kDifRstmgrResetInfoSysRstCtrl |
73 rst_info == (kDifRstmgrResetInfoWatchdog |
78 "Wrong reset reason %02X", rst_info);
80 uint32_t reset_case = 0;
81 CHECK_STATUS_OK(ret_sram_testutils_counter_get(kCounterResets, &reset_case));
82 CHECK_STATUS_OK(ret_sram_testutils_counter_increment(kCounterResets));
84 LOG_INFO(
" case %d, deep sleep mode", reset_case);
90 prepare_for_sysrst(kPwrmgrSleepResetsLibModesDeepSleep);
93 LOG_INFO(
"Watchdog reset in deep sleep mode");
95 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
96 config_wdog(200, 2 * 200);
97 prepare_for_wdog(kPwrmgrSleepResetsLibModesDeepSleep);
100 LOG_INFO(
"Rstmgr software reset in deep sleep mode");
101 LOG_INFO(
"Let SV wait timer reset");
102 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
108 config_wdog(200, 2 * 200);
111 prepare_for_wdog(kPwrmgrSleepResetsLibModesDeepSleep);
114 LOG_INFO(
"Booting and running normal sleep followed by escalation reset");
115 LOG_INFO(
"Let SV wait timer reset");
116 trigger_escalation();
122 LOG_INFO(
"Booting for undefined case %0d", reset_case);