8 #include "sw/device/lib/runtime/irq.h"
10 #include "sw/device/lib/testing/rv_plic_testutils.h"
12 #include "sw/device/lib/testing/test_framework/status.h"
14 #include "hw/top_darjeeling/sw/autogen/top_darjeeling.h"
15 #include "sw/device/lib/testing/autogen/isr_testutils.h"
17 OTTF_DEFINE_TEST_CONFIG();
19 static dif_pwrmgr_t pwrmgr;
20 static dif_rv_plic_t plic;
22 static plic_isr_ctx_t plic_ctx = {.rv_plic = &plic,
23 .hart_id = kTopDarjeelingPlicTargetIbex0};
25 static pwrmgr_isr_ctx_t pwrmgr_isr_ctx = {
27 .plic_pwrmgr_start_irq_id = kTopDarjeelingPlicIrqIdPwrmgrAonWakeup,
28 .expected_irq = kDifPwrmgrIrqWakeup,
32 CHECK_DIF_OK(dif_pwrmgr_init(
34 CHECK_DIF_OK(dif_rv_plic_init(
38 irq_global_ctrl(
true);
39 irq_external_ctrl(
true);
42 rv_plic_testutils_irq_range_enable(&plic, kTopDarjeelingPlicTargetIbex0,
43 kTopDarjeelingPlicIrqIdPwrmgrAonWakeup,
44 kTopDarjeelingPlicIrqIdPwrmgrAonWakeup);
54 (1u << kTopDarjeelingPowerManagerWakeUpsSocProxyWkupExternalReq);
55 wakeup_req_srcs |= ext_wkup_req;
58 LOG_INFO(
"Power Manager configured.");
62 test_status_set(kTestStatusInWfi);
64 test_status_set(kTestStatusInTest);
71 if (cur_wakeup_srcs & ext_wkup_req) {
72 LOG_INFO(
"External wakeup request detected.");
82 void ottf_external_isr(
void) {
83 dif_pwrmgr_irq_t irq_id;
84 top_darjeeling_plic_peripheral_t peripheral;
86 isr_testutils_pwrmgr_isr(plic_ctx, pwrmgr_isr_ctx, &peripheral, &irq_id);
89 CHECK(peripheral == kTopDarjeelingPlicPeripheralPwrmgrAon,
90 "IRQ peripheral %d is incorrect!", peripheral);
91 CHECK(irq_id == kDifPwrmgrIrqWakeup,
"IRQ ID %d is incorrect!", irq_id);