8 #include "sw/device/lib/testing/aon_timer_testutils.h"
9 #include "sw/device/lib/testing/clkmgr_testutils.h"
10 #include "sw/device/lib/testing/pwrmgr_testutils.h"
11 #include "sw/device/lib/testing/sensor_ctrl_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
15 OTTF_DEFINE_TEST_CONFIG();
37 kWaitForCSRPollingUs = 1,
38 kMeasurementsPerRound = 100,
41 static dif_clkmgr_t clkmgr;
42 static dif_pwrmgr_t pwrmgr;
44 static const dt_pwrmgr_t kPwrmgrDt = 0;
45 static_assert(kDtPwrmgrCount == 1,
"this test expects a pwrmgr");
46 static const dt_aon_timer_t kAonTimerDt = 0;
47 static_assert(kDtAonTimerCount == 1,
"this test expects an aon_timer");
48 static const dt_clkmgr_t kClkmgrDt = 0;
49 static_assert(kDtClkmgrCount >= 1,
"this test expects a clkmgr");
50 static const dt_sensor_ctrl_t kSensorCtrlDt = 0;
51 static_assert(kDtSensorCtrlCount >= 1,
"this test expects a sensor_ctrl");
54 dif_sensor_ctrl_t sensor_ctrl;
55 dif_aon_timer_t aon_timer;
57 uint32_t delay_micros = 0;
58 CHECK_STATUS_OK(aon_timer_testutils_get_us_from_aon_cycles(
59 kMeasurementsPerRound, &delay_micros));
61 CHECK_DIF_OK(dif_clkmgr_init_from_dt(kClkmgrDt, &clkmgr));
62 CHECK_DIF_OK(dif_sensor_ctrl_init_from_dt(kSensorCtrlDt, &sensor_ctrl));
63 CHECK_DIF_OK(dif_pwrmgr_init_from_dt(kPwrmgrDt, &pwrmgr));
64 CHECK_DIF_OK(dif_aon_timer_init_from_dt(kAonTimerDt, &aon_timer));
69 kDtAonTimerWakeupWkupReq, &wakeup_sources));
75 if (UNWRAP(pwrmgr_testutils_is_wakeup_reason(&pwrmgr, 0)) ==
true) {
77 LOG_INFO(
"Run clock measurements right after POR");
79 clkmgr_testutils_enable_clock_counts_with_expected_thresholds(
80 &clkmgr,
false,
false,
85 CHECK_STATUS_OK(clkmgr_testutils_check_measurement_counts(&clkmgr));
86 CHECK_STATUS_OK(clkmgr_testutils_disable_clock_counts(&clkmgr));
96 aon_timer_testutils_wakeup_config(&aon_timer, wakeup_threshold));
98 LOG_INFO(
"Start clock measurements to cause an error for main and io clk.");
100 clkmgr_testutils_enable_clock_counts_with_expected_thresholds(
101 &clkmgr,
false,
true,
108 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(
109 &pwrmgr, wakeup_sources, kDifPwrmgrDomainOptionUsbClockInActivePower));
111 LOG_INFO(
"TEST: Issue WFI to enter deep sleep");
114 }
else if (UNWRAP(pwrmgr_testutils_is_wakeup_reason(
115 &pwrmgr, wakeup_sources)) ==
true) {
117 bool all_disabled = UNWRAP(clkmgr_testutils_check_measurement_enables(
124 LOG_INFO(
"Check for all clock measurements disabled done");
128 kDifClkmgrRecovErrTypeMainMeas | kDifClkmgrRecovErrTypeIoMeas;
131 CHECK(err_codes == expected_err_codes,
132 "expected main and io clk measurement error 0x%x, but got 0x%x",
133 expected_err_codes, err_codes);
138 LOG_INFO(
"TEST: one more measurement");
140 clkmgr_testutils_enable_clock_counts_with_expected_thresholds(
141 &clkmgr,
false,
false,
144 CHECK_STATUS_OK(clkmgr_testutils_check_measurement_counts(&clkmgr));
145 CHECK_STATUS_OK(clkmgr_testutils_disable_clock_counts(&clkmgr));
152 LOG_ERROR(
"Unexpected wakeup detected: type = %d, request_source = %d",