blob: b8e80edced412b2c9f93ddcff99a06c621dafa55 [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/base/abs_mmio.h"
#include "sw/device/lib/testing/test_framework/check.h"
#include "sw/device/lib/testing/test_framework/ottf_main.h"
#include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
#include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
#include "uart_regs.h"
OTTF_DEFINE_TEST_CONFIG();
enum {
/**
* Base address of uart.
*/
kBaseUart = TOP_EARLGREY_UART0_BASE_ADDR,
};
static void uart_alert_trigger(void) {
abs_mmio_write32(
kBaseUart + UART_ALERT_TEST_REG_OFFSET,
bitfield_bit32_write(0, UART_ALERT_TEST_FATAL_FAULT_BIT, true));
}
bool test_main(void) {
LOG_INFO("Starting test...");
uint32_t reset_reasons = retention_sram_get()->reset_reasons;
switch (reset_reasons) {
case 1 << kRstmgrReasonPowerOn:
LOG_INFO("No alert escalation, going to trigger alert...");
uart_alert_trigger();
LOG_INFO("UART alert routine returned!");
return false;
case 1 << kRstmgrReasonEscalation:
LOG_INFO("Escalation detected!");
return true;
default:
LOG_INFO("Unhandled reset reason: %d", reset_reasons);
return false;
}
}