blob: 691441bd213f270b9013413272573221445c686d [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#include "sw/device/lib/dif/dif_alert_handler.h"
#include "sw/device/lib/dif/dif_base.h"
#include "sw/device/lib/testing/test_framework/check.h"
#include "alert_handler_regs.h" // Generated
void alert_handler_testutils_configure_all(
const dif_alert_handler_t *alert_handler, dif_alert_handler_config_t config,
dif_toggle_t locked) {
CHECK(alert_handler != NULL);
CHECK(dif_is_valid_toggle(locked));
// Check lengths of alert, local alert, and class arrays.
CHECK((config.alerts_len > 0 && config.alerts != NULL &&
config.alert_classes != NULL) ||
(config.alerts_len == 0 && config.alerts == NULL &&
config.alert_classes == NULL));
CHECK((config.local_alerts_len > 0 && config.local_alerts != NULL &&
config.local_alert_classes != NULL) ||
(config.local_alerts_len == 0 && config.local_alerts == NULL &&
config.local_alert_classes == NULL));
CHECK((config.classes_len > 0 && config.classes != NULL &&
config.class_configs != NULL) ||
(config.classes_len == 0 && config.classes == NULL &&
config.class_configs == NULL));
// Check that the provided ping timeout actually fits in the timeout
// register, which is smaller than a native word length.
CHECK(config.ping_timeout <=
ALERT_HANDLER_PING_TIMEOUT_CYC_SHADOWED_PING_TIMEOUT_CYC_SHADOWED_MASK);
// Configure and enable the requested alerts.
for (int i = 0; i < config.alerts_len; ++i) {
CHECK_DIF_OK(dif_alert_handler_configure_alert(
alert_handler, config.alerts[i], config.alert_classes[i],
kDifToggleEnabled, locked));
}
// Configure and enable the requested local alerts.
for (int i = 0; i < config.local_alerts_len; ++i) {
CHECK_DIF_OK(dif_alert_handler_configure_local_alert(
alert_handler, config.local_alerts[i], config.local_alert_classes[i],
kDifToggleEnabled, locked));
}
// Configure and enable the requested classes.
for (int i = 0; i < config.classes_len; ++i) {
CHECK_DIF_OK(dif_alert_handler_configure_class(
alert_handler, config.classes[i], config.class_configs[i],
kDifToggleEnabled, locked));
}
// Configure the ping timer.
CHECK_DIF_OK(dif_alert_handler_configure_ping_timer(
alert_handler, config.ping_timeout, kDifToggleEnabled, locked));
}