9 #include "sw/device/lib/dif/dif_rv_core_ibex.h"
12 #include "sw/device/lib/testing/aon_timer_testutils.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
16 static_assert(kDtAonTimerCount >= 1,
17 "This test requires at least one AON Timer instance");
18 static_assert(kDtRvCoreIbexCount >= 1,
19 "This test requires at least one rv_core_ibex instance");
21 static const dt_aon_timer_t kTestAonTimer = (dt_aon_timer_t)0;
22 static const dt_rv_core_ibex_t kTestRvCoreIbex = (dt_rv_core_ibex_t)0;
24 OTTF_DEFINE_TEST_CONFIG();
26 static dif_aon_timer_t aon;
27 static dif_rv_core_ibex_t rv_core_ibex;
28 static volatile bool wdog_fired =
false;
30 static void aon_timer_test_wakeup_timer(dif_aon_timer_t *aon) {
34 CHECK_STATUS_OK(aon_timer_testutils_wakeup_config(aon, 1));
40 CHECK_DIF_OK(dif_aon_timer_irq_is_pending(
41 aon, kDifAonTimerIrqWkupTimerExpired, &is_pending));
47 dif_aon_timer_irq_acknowledge(aon, kDifAonTimerIrqWkupTimerExpired));
55 void ottf_external_nmi_handler(
void) {
60 CHECK_DIF_OK(dif_aon_timer_irq_is_pending(&aon, kDifAonTimerIrqWdogTimerBark,
68 dif_aon_timer_irq_acknowledge(&aon, kDifAonTimerIrqWdogTimerBark));
70 CHECK_DIF_OK(dif_rv_core_ibex_clear_nmi_state(&rv_core_ibex,
71 kDifRvCoreIbexNmiSourceWdog));
75 static void aon_timer_test_watchdog_timer(dif_aon_timer_t *aon) {
80 aon_timer_testutils_watchdog_config(aon, 1, UINT32_MAX,
false));
84 CHECK_DIF_OK(dif_rv_core_ibex_get_nmi_state(&rv_core_ibex, &nmi_state));
91 CHECK_DIF_OK(dif_aon_timer_irq_is_pending(aon, kDifAonTimerIrqWdogTimerBark,
98 dif_aon_timer_irq_acknowledge(aon, kDifAonTimerIrqWdogTimerBark));
108 CHECK_DIF_OK(dif_aon_timer_init_from_dt(kTestAonTimer, &aon));
109 CHECK_DIF_OK(dif_rv_core_ibex_init_from_dt(kTestRvCoreIbex, &rv_core_ibex));
111 aon_timer_test_wakeup_timer(&aon);
112 aon_timer_test_watchdog_timer(&aon);