Software APIs
rom_e2e_shutdown_alert_config_test.c
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
6 #include "sw/device/lib/testing/test_framework/check.h"
8 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
9 #include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
10 
12 #include "uart_regs.h"
13 
14 OTTF_DEFINE_TEST_CONFIG();
15 
16 enum {
17  /**
18  * Base address of uart.
19  */
20  kBaseUart = TOP_EARLGREY_UART0_BASE_ADDR,
21 };
22 
23 static void uart_alert_trigger(void) {
24  abs_mmio_write32(
25  kBaseUart + UART_ALERT_TEST_REG_OFFSET,
26  bitfield_bit32_write(0, UART_ALERT_TEST_FATAL_FAULT_BIT, true));
27 }
28 
29 bool test_main(void) {
30  LOG_INFO("Starting test...");
31  uint32_t reset_reasons = retention_sram_get()->creator.reset_reasons;
32  switch (reset_reasons) {
33  case 1 << kRstmgrReasonPowerOn:
34  LOG_INFO("No alert escalation, going to trigger alert...");
35  uart_alert_trigger();
36  LOG_INFO("UART alert routine returned!");
37  return false;
38  case 1 << kRstmgrReasonEscalation:
39  LOG_INFO("Escalation detected!");
40  return true;
41  default:
42  LOG_INFO("Unhandled reset reason: %d", reset_reasons);
43  return false;
44  }
45 }