27 #include "sw/device/lib/testing/test_framework/check.h"
29 #include "sw/device/lib/testing/test_framework/ottf_utils.h"
30 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
33 #include "sram_ctrl_regs.h"
40 kCommandTimeoutMicros = 1 * 1000 * 1000,
43 static dif_alert_handler_t alert_handler;
44 static dif_lc_ctrl_t lc_ctrl;
45 static dif_sram_ctrl_t sram_ctrl_main;
46 static dif_sram_ctrl_t sram_ctrl_ret;
52 static volatile uint32_t sram_buffer_main;
58 static volatile uint8_t test_phase = kTestPhaseCfg;
60 static volatile uintptr_t sram_buffer_addr_main;
61 static volatile uintptr_t sram_buffer_addr_ret;
64 static bool write_read_data(
mmio_region_t sram_region, uint32_t data) {
65 mmio_region_write32(sram_region, 0, data);
66 uint32_t read_data = mmio_region_read32(sram_region, 0);
68 return read_data == data;
85 CHECK((status_main & kStatusRegMask) == 0x0,
86 "SRAM main status error bits set, status = %08x.", status_main);
87 CHECK((status_ret & kStatusRegMask) == 0x0,
88 "SRAM ret status error bits set, status = %08x.", status_ret);
93 status_t configure_alert_handler(
void) {
94 TRY(dif_alert_handler_init(
101 .duration_cycles = UINT32_MAX,
106 .accumulator_threshold = 0,
107 .irq_deadline_cycles = 1000,
108 .escalation_phases = esc_phases,
109 .escalation_phases_len =
ARRAYSIZE(esc_phases),
123 OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control =
true);
126 CHECK_DIF_OK(dif_lc_ctrl_init(
129 CHECK_STATUS_OK(configure_alert_handler());
130 CHECK_STATUS_OK(configure_srams());
134 sram_buffer_addr_main = (uintptr_t)&sram_buffer_main;
142 CHECK(write_read_data(sram_region_main, 0x6b4abfae),
143 "main SRAM was not written to/read from correctly");
144 CHECK(write_read_data(sram_region_ret, 0x6b4abfae),
145 "retention SRAM was not written to/read from correctly");
147 OTTF_WAIT_FOR(test_phase == kTestPhaseEscalate, kCommandTimeoutMicros);
151 dif_lc_ctrl_alert_force(&lc_ctrl, kDifLcCtrlAlertFatalBusIntegError));
155 LOG_ERROR(
"Did not expect to execute after alert fired");