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,
54 rst_info = rstmgr_testutils_reason_get();
55 rstmgr_testutils_reason_clear();
57 enum { kCounterResets = 0 };
59 CHECK_STATUS_OK(ret_sram_testutils_counter_clear(kCounterResets));
61 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
63 uint32_t reset_case = 0;
64 CHECK_STATUS_OK(ret_sram_testutils_counter_get(kCounterResets, &reset_case));
65 CHECK_STATUS_OK(ret_sram_testutils_counter_increment(kCounterResets));
67 LOG_INFO(
" case %d, active mode. reason 0x%x", reset_case, rst_info);
75 prepare_for_sysrst(kPwrmgrSleepResetsLibModesActive);
78 CHECK(rst_info == kDifRstmgrResetInfoSysRstCtrl,
79 "Wrong reset reason 0x%x", rst_info);
80 LOG_INFO(
"Watchdog reset in deep sleep mode");
82 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
83 config_wdog(200, 2 * 200);
84 prepare_for_wdog(kPwrmgrSleepResetsLibModesActive);
87 CHECK(rst_info == kDifRstmgrResetInfoWatchdog,
"Wrong reset reason 0x%x",
89 LOG_INFO(
"Rstmgr software reset in deep sleep mode");
91 CHECK_STATUS_OK(rstmgr_testutils_pre_reset(rstmgr));
97 config_wdog(200, 2 * 200);
100 prepare_for_wdog(kPwrmgrSleepResetsLibModesActive);
105 LOG_INFO(
"Booting and running normal sleep followed by escalation reset");
106 LOG_INFO(
"Let SV wait timer reset");
107 config_alert_handler();
108 trigger_escalation();
112 "Wrong reset reason 0x%x", rst_info);
116 LOG_INFO(
"Booting for undefined case %d", reset_case);