10 #include "sw/device/lib/runtime/irq.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/test_framework/check.h"
18 #include "sensor_ctrl_regs.h"
19 #include "sw/device/lib/testing/autogen/isr_testutils.h"
21 OTTF_DEFINE_TEST_CONFIG();
23 static dif_pwrmgr_t pwrmgr;
24 static dif_rv_plic_t plic;
25 static plic_isr_ctx_t plic_ctx = {.rv_plic = &plic,
28 static pwrmgr_isr_ctx_t pwrmgr_isr_ctx = {
31 .expected_irq = kDifPwrmgrIrqWakeup,
34 static bool get_wakeup_status(
void) {
38 return (wake_req > 0);
44 void ottf_external_isr(uint32_t *exc_info) {
45 dif_pwrmgr_irq_t irq_id;
48 isr_testutils_pwrmgr_isr(plic_ctx, pwrmgr_isr_ctx, &peripheral, &irq_id);
52 "IRQ peripheral: %d is incorrect", peripheral);
53 CHECK(irq_id == kDifPwrmgrIrqWakeup,
"IRQ ID: %d is incorrect", irq_id);
57 dif_sensor_ctrl_t sensor_ctrl;
60 irq_global_ctrl(
true);
61 irq_external_ctrl(
true);
66 CHECK_DIF_OK(dif_rv_plic_init(plic_base_addr, &plic));
69 CHECK_DIF_OK(dif_pwrmgr_init(
73 CHECK_DIF_OK(dif_sensor_ctrl_init(
86 uint32_t sensor_ctrl_events = SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS;
89 kDifPwrmgrDomainOptionMainPowerInLowPower;
92 for (
size_t i = 0; i < sensor_ctrl_events; ++i) {
96 for (
size_t i = 0; i < sensor_ctrl_events; ++i) {
97 LOG_INFO(
"Testing sensor_ctrl event %d", i);
108 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(
109 &pwrmgr, kDifPwrmgrWakeupRequestSourceSix, sleep_config));
112 LOG_INFO(
"Issue WFI to enter sleep");
121 if (events != (1 << i)) {
122 LOG_ERROR(
"Recoverable event 0x%x does not match expectation %d", events,