8 #include "sw/device/lib/runtime/irq.h"
10 #include "sw/device/lib/testing/aon_timer_testutils.h"
11 #include "sw/device/lib/testing/clkmgr_testutils.h"
12 #include "sw/device/lib/testing/pwrmgr_testutils.h"
13 #include "sw/device/lib/testing/rv_plic_testutils.h"
14 #include "sw/device/lib/testing/sensor_ctrl_testutils.h"
15 #include "sw/device/lib/testing/test_framework/check.h"
19 #include "sw/device/lib/testing/autogen/isr_testutils.h"
21 OTTF_DEFINE_TEST_CONFIG();
33 kWaitForCSRPollingMicros = 1,
34 kMeasurementsPerRound = 100,
37 static dif_clkmgr_t clkmgr;
38 static dif_pwrmgr_t pwrmgr;
39 static dif_rv_plic_t rv_plic;
41 static plic_isr_ctx_t plic_ctx = {.rv_plic = &rv_plic,
44 static pwrmgr_isr_ctx_t pwrmgr_isr_ctx = {
47 .expected_irq = kDifPwrmgrIrqWakeup,
50 static volatile bool isr_entered;
55 void ottf_external_isr(uint32_t *exc_info) {
56 dif_pwrmgr_irq_t irq_id;
60 isr_testutils_pwrmgr_isr(plic_ctx, pwrmgr_isr_ctx, &peripheral, &irq_id);
64 "IRQ peripheral: %d is incorrect", peripheral);
65 CHECK(irq_id == kDifPwrmgrIrqWakeup,
"IRQ ID: %d is incorrect", irq_id);
69 dif_sensor_ctrl_t sensor_ctrl;
70 dif_aon_timer_t aon_timer;
72 uint32_t delay_micros = 0;
73 CHECK_STATUS_OK(aon_timer_testutils_get_us_from_aon_cycles(
74 kMeasurementsPerRound, &delay_micros));
77 irq_global_ctrl(
true);
78 irq_external_ctrl(
true);
80 CHECK_DIF_OK(dif_clkmgr_init(
82 CHECK_DIF_OK(dif_sensor_ctrl_init(
85 CHECK_DIF_OK(dif_pwrmgr_init(
87 CHECK_DIF_OK(dif_aon_timer_init(
89 CHECK_DIF_OK(dif_rv_plic_init(
96 CHECK(UNWRAP(pwrmgr_testutils_is_wakeup_reason(&pwrmgr, 0)) ==
true);
98 CHECK_STATUS_OK(clkmgr_testutils_enable_clock_counts_with_expected_thresholds(
99 &clkmgr,
false,
false,
104 CHECK_STATUS_OK(clkmgr_testutils_check_measurement_counts(&clkmgr));
105 CHECK_STATUS_OK(clkmgr_testutils_disable_clock_counts(&clkmgr));
108 CHECK_STATUS_OK(clkmgr_testutils_enable_clock_counts_with_expected_thresholds(
109 &clkmgr,
false,
false,
120 aon_timer_testutils_wakeup_config(&aon_timer, wakeup_threshold));
130 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(
131 &pwrmgr, kDifPwrmgrWakeupRequestSourceFive,
133 kDifPwrmgrDomainOptionUsbClockInActivePower |
134 kDifPwrmgrDomainOptionMainPowerInLowPower));
136 LOG_INFO(
"TEST: Issue WFI to enter sleep");
142 CHECK_STATUS_OK(clkmgr_testutils_check_measurement_counts(&clkmgr));
143 bool all_enabled = UNWRAP(