5 #include "sw/device/lib/testing/alert_handler_testutils.h"
7 #include "dt/dt_alert_handler.h"
13 #include "sw/device/lib/testing/test_framework/check.h"
15 #include "alert_handler_regs.h"
17 #define MODULE_ID MAKE_MODULE_ID('a', 'h', 't')
24 static uint32_t get_next_n_bits(
26 int *word_index,
int *bit_index) {
27 CHECK(num_bits <= 32);
28 CHECK(*bit_index < 32);
29 uint32_t word = dump[*word_index] >> *bit_index;
30 if (*bit_index + num_bits >= 32) {
32 *bit_index = *bit_index + num_bits - 32;
34 *bit_index += num_bits;
36 word &= (1 << num_bits) - 1;
40 status_t alert_handler_testutils_info_parse(
45 for (
int i = 0; i < ALERT_HANDLER_PARAM_N_CLASSES; ++i) {
46 info->class_esc_state[i] =
47 get_next_n_bits(3, dump, &word_index, &bit_index);
49 for (
int i = 0; i < ALERT_HANDLER_PARAM_N_CLASSES; ++i) {
50 info->class_esc_cnt[i] = get_next_n_bits(32, dump, &word_index, &bit_index);
52 for (
int i = 0; i < ALERT_HANDLER_PARAM_N_CLASSES; ++i) {
53 info->class_accum_cnt[i] =
54 (uint16_t)get_next_n_bits(16, dump, &word_index, &bit_index);
56 info->loc_alert_cause =
57 (uint8_t)get_next_n_bits(7, dump, &word_index, &bit_index);
58 TRY_CHECK(word_index < dump_size);
59 for (
int i = 0; i < ALERT_HANDLER_PARAM_N_ALERTS; ++i) {
60 info->alert_cause[i] = get_next_n_bits(1, dump, &word_index, &bit_index);
62 TRY_CHECK(word_index < dump_size);
66 void alert_handler_testutils_info_dump(
69 LOG_INFO(
"esc_state [0]=%x, [1]=%x, [2]=%x, [3]=%x", info->class_esc_state[0],
70 info->class_esc_state[1], info->class_esc_state[2],
71 info->class_esc_state[3]);
72 LOG_INFO(
"esc_cnt [0]=0x%x, [1]=0x%x, [2]=0x%x, [3]=0x%x",
73 info->class_esc_cnt[0], info->class_esc_cnt[1],
74 info->class_esc_cnt[2], info->class_esc_cnt[3]);
75 LOG_INFO(
"accum_cnt [0]=0x%x, [1]=0x%x, [2]=0x%x, [3]=0x%x",
76 info->class_accum_cnt[0], info->class_accum_cnt[1],
77 info->class_accum_cnt[2], info->class_accum_cnt[3]);
78 LOG_INFO(
"loc_alert_cause=0x%x", info->loc_alert_cause);
83 for (
int i = 0; i < ALERT_HANDLER_PARAM_N_ALERTS; ++i) {
84 if (info->alert_cause[i]) {
94 status_t alert_handler_testutils_configure_all(
97 TRY_CHECK(alert_handler != NULL);
118 ALERT_HANDLER_PING_TIMEOUT_CYC_SHADOWED_PING_TIMEOUT_CYC_SHADOWED_MASK);
148 status_t alert_handler_testutils_get_cycles_from_us(uint64_t microseconds,
151 microseconds * dt_clock_frequency(dt_alert_handler_clock(
152 (dt_alert_handler_t)0, kDtAlertHandlerClockClk)),
155 TRY_CHECK(cycles_ < UINT32_MAX,
156 "The value 0x%08x%08x can't fit into the 32 bits timer counter.",
157 (uint32_t)(cycles_ >> 32), (uint32_t)cycles_);
158 *cycles = (uint32_t)cycles_;
162 uint32_t alert_handler_testutils_cycle_rescaling_factor(
void) {