6 #include "sw/device/lib/base/status.h"
10 #include "sw/device/lib/testing/pwrmgr_testutils.h"
11 #include "sw/device/lib/testing/test_framework/check.h"
13 #include "sw/device/silicon_creator/lib/boot_svc/boot_svc_empty.h"
14 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
15 #include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
16 #include "sw/device/silicon_creator/rom_ext/e2e/boot_svc/boot_svc_test_lib.h"
18 static const dt_pwrmgr_t kPwrmgrDt = 0;
19 static_assert(kDtPwrmgrCount == 1,
"this test expects a pwrmgr");
20 static const dt_aon_timer_t kAonTimerDt = 0;
21 static_assert(kDtAonTimerCount >= 1,
22 "this test expects at least one aon_timer");
24 OTTF_DEFINE_TEST_CONFIG();
26 static dif_pwrmgr_t pwrmgr;
27 static dif_aon_timer_t aon_timer;
32 CHECK_DIF_OK(dif_aon_timer_init_from_dt(kAonTimerDt, &aon_timer));
33 TRY(dif_pwrmgr_init_from_dt(kPwrmgrDt, &pwrmgr));
36 kDtAonTimerWakeupWkupReq, &wakeup_sources));
40 static status_t deep_sleep_enter(uint32_t wakeup_ticks) {
42 TRY(pwrmgr_testutils_enable_low_power(&pwrmgr, wakeup_sources,
47 LOG_INFO(
"Unexpected wakeup from deep sleep.");
51 static status_t deep_sleep_check(
void) {
52 bool wkup = TRY(pwrmgr_testutils_is_wakeup_reason(&pwrmgr, wakeup_sources));
53 return OK_STATUS(wkup);
58 boot_svc_empty_req_init(&msg.empty);
60 state->state = kBootSvcTestStateCheckEmpty;
67 if (!TRY(deep_sleep_check())) {
68 LOG_ERROR(
"Expected wakup from deep sleep");
72 TRY(boot_svc_header_check(&msg.
header));
75 TRY_CHECK(msg.
header.
type == kBootSvcEmptyReqType);
76 state->state = kBootSvcTestStateFinal;
80 static status_t empty_message_test(
void) {
83 TRY(boot_svc_test_init(retram, kBootSvcTestWakeup));
87 LOG_INFO(
"Test state = %d", state->state);
88 switch (state->state) {
89 case kBootSvcTestStateInit:
90 TRY(initialize(retram, state));
92 case kBootSvcTestStateCheckEmpty:
93 TRY(check_empty(retram, state));
95 case kBootSvcTestStateFinal:
104 status_t sts = empty_message_test();
105 if (status_err(sts)) {
106 LOG_ERROR(
"boot_svc_wakeup_test: %r", sts);
108 return status_ok(sts);