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"
17 #include "sensor_ctrl_regs.h"
19 OTTF_DEFINE_TEST_CONFIG();
21 static const dt_pwrmgr_t kPwrmgrDt = 0;
22 static_assert(kDtPwrmgrCount == 1,
"this test expects a pwrmgr");
23 static const dt_rv_plic_t kRvPlicDt = 0;
24 static_assert(kDtRvPlicCount == 1,
"this test expects exactly one rv_plic");
25 static const dt_sensor_ctrl_t kSensorCtrlDt = 0;
26 static_assert(kDtSensorCtrlCount == 1,
27 "this test expects exactly one sensor_ctrl");
33 static dif_pwrmgr_t pwrmgr;
34 static dif_rv_plic_t plic;
36 static bool get_wakeup_status(
void) {
40 return (wake_req > 0);
46 bool ottf_handle_irq(uint32_t *exc_info, dt_instance_id_t devid,
48 if (devid == dt_pwrmgr_instance_id(kPwrmgrDt) &&
49 irq_id == dt_pwrmgr_irq_to_plic_id(kPwrmgrDt, kDtPwrmgrIrqWakeup)) {
50 CHECK_DIF_OK(dif_pwrmgr_irq_acknowledge(&pwrmgr, kDtPwrmgrIrqWakeup));
58 dif_sensor_ctrl_t sensor_ctrl;
61 irq_global_ctrl(
true);
62 irq_external_ctrl(
true);
65 CHECK_DIF_OK(dif_rv_plic_init_from_dt(kRvPlicDt, &plic));
68 CHECK_DIF_OK(dif_pwrmgr_init_from_dt(kPwrmgrDt, &pwrmgr));
71 CHECK_DIF_OK(dif_sensor_ctrl_init_from_dt(kSensorCtrlDt, &sensor_ctrl));
75 dt_pwrmgr_irq_to_plic_id(kPwrmgrDt, kDtPwrmgrIrqWakeup);
76 rv_plic_testutils_irq_range_enable(&plic, kPlicTarget, plic_id, plic_id);
82 uint32_t sensor_ctrl_events = SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS;
85 kDifPwrmgrDomainOptionMainPowerInLowPower;
88 for (
size_t i = 0; i < sensor_ctrl_events; ++i) {
92 for (
size_t i = 0; i < sensor_ctrl_events; ++i) {
93 LOG_INFO(
"Testing sensor_ctrl event %d", i);
107 dt_sensor_ctrl_instance_id(kSensorCtrlDt), kDtSensorCtrlWakeupWkupReq,
109 CHECK_STATUS_OK(pwrmgr_testutils_enable_low_power(&pwrmgr, wakeup_sources,
113 LOG_INFO(
"Issue WFI to enter sleep");
122 if (events != (1 << i)) {
123 LOG_ERROR(
"Recoverable event 0x%x does not match expectation %d", events,