8 #include "sw/device/lib/testing/alert_handler_testutils.h"
11 #include "hw/top_darjeeling/sw/autogen/top_darjeeling.h"
12 #include "soc_proxy_regs.h"
14 OTTF_DEFINE_TEST_CONFIG();
20 .duration_cycles = 1000},
24 .duration_cycles = 1000},
28 .duration_cycles = 300}};
36 .accumulator_threshold = 0,
38 .irq_deadline_cycles = 0,
40 .escalation_phases = kEscProfiles,
41 .escalation_phases_len = 3,
51 .accumulator_threshold = 10000,
53 .irq_deadline_cycles = 0,
55 .escalation_phases = kEscProfiles,
56 .escalation_phases_len = 3,
63 dif_alert_handler_t alert_handler;
67 CHECK_DIF_OK(dif_alert_handler_init(
70 CHECK_DIF_OK(dif_rstmgr_init(
74 const top_darjeeling_alert_id_t FIRST_SOC_PROXY_FATAL_ALERT_ID =
75 kTopDarjeelingAlertIdSocProxyFatalAlertExternal0;
78 const top_darjeeling_alert_id_t LAST_SOC_PROXY_FATAL_ALERT_ID =
79 kTopDarjeelingAlertIdSocProxyFatalAlertExternal23;
83 const top_darjeeling_alert_id_t LAST_SOC_PROXY_RECOV_ALERT_ID =
84 FIRST_SOC_PROXY_FATAL_ALERT_ID + SOC_PROXY_PARAM_NUM_ALERTS - 1;
87 bool alert_before_reset =
false;
88 top_darjeeling_alert_id_t previous_alert_id;
89 size_t rstmgr_alert_info_size;
92 if (rstmgr_alert_info_size > 0) {
95 size_t rstmgr_alert_info_dump_segments;
97 &rstmgr, alert_info_dump, rstmgr_alert_info_size,
98 &rstmgr_alert_info_dump_segments));
100 CHECK_STATUS_OK(alert_handler_testutils_info_parse(
101 alert_info_dump, (
int)rstmgr_alert_info_size, &alert_info));
103 for (top_darjeeling_alert_id_t alert_id = FIRST_SOC_PROXY_FATAL_ALERT_ID;
104 alert_id <= LAST_SOC_PROXY_FATAL_ALERT_ID; alert_id++) {
105 if (alert_info.alert_cause[alert_id]) {
106 LOG_INFO(
"Alert ID %0d registered before latest reset.", alert_id);
107 alert_before_reset =
true;
108 previous_alert_id = alert_id;
112 for (
unsigned class = 0;
class < ALERT_HANDLER_PARAM_N_CLASSES;
class ++) {
113 alert_handler_class_state_t state = alert_info.class_esc_state[
class];
114 if (state != kCstateIdle) {
115 LOG_INFO(
"Alert class %0d: esc_state=%0d.",
class, state);
125 top_darjeeling_alert_id_t expected_alert_id;
126 if (alert_before_reset) {
127 expected_alert_id = previous_alert_id + 1;
129 expected_alert_id = FIRST_SOC_PROXY_FATAL_ALERT_ID;
133 while (expected_alert_id <= LAST_SOC_PROXY_RECOV_ALERT_ID) {
138 if (expected_alert_id > LAST_SOC_PROXY_FATAL_ALERT_ID) {
141 profile = kConfigProfiles[1];
145 profile = kConfigProfiles[0];
150 &alert_handler, expected_alert_id, kDifAlertHandlerClassA,
155 &alert_handler, kDifAlertHandlerClassA, profile,
158 LOG_INFO(
"Alert handler configured.");
160 if (expected_alert_id > LAST_SOC_PROXY_FATAL_ALERT_ID) {
165 &alert_handler, expected_alert_id, &is_cause));
171 LOG_INFO(
"Alert ID %0d is cause.", expected_alert_id);