5 #include "dt/dt_sram_ctrl.h"
11 #include "sw/device/lib/testing/test_framework/check.h"
13 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
17 #define SRAM_CTRL_TEST_DATA_SIZE_WORDS 16
19 static_assert(kDtSramCtrlCount >= 1,
20 "This test requires at least one RAM Control instance");
21 static_assert(kDtSramCtrlCount < 100,
22 "The reported SRAM_CTRL instance number may be incorrect");
24 #define SRAM_CTRL_NAME(x) #x
26 OTTF_DEFINE_TEST_CONFIG();
32 static const uint32_t kRandomData[SRAM_CTRL_TEST_DATA_SIZE_WORDS] = {
33 0x6b4abfae, 0x63bdb6e7, 0x87f99b1a, 0xa214dffe, 0xb12291f9, 0xd0cd1abe,
34 0x5c95e716, 0xe887aab1, 0x307f6ef9, 0x6f5c0464, 0x5882279d, 0x44c19574,
35 0x1bd20079, 0xf8250ead, 0x4bf362a4, 0xad41437d};
59 } sram_ctrl[kDtSramCtrlCount];
65 static volatile uint32_t sram_main_buffer[SRAM_CTRL_TEST_DATA_SIZE_WORDS];
71 static
void write_read_check(
void) {
72 for (
int i = 0; i < SRAM_CTRL_TEST_DATA_SIZE_WORDS; ++i) {
73 for (dt_sram_ctrl_t sc = (dt_sram_ctrl_t)0; sc < kDtSramCtrlCount; ++sc) {
74 mmio_region_write32(sram_ctrl[sc].region, i * (ptrdiff_t)
sizeof(uint32_t),
76 uint32_t rw_data_32 = mmio_region_read32(sram_ctrl[sc].region,
77 i * (ptrdiff_t)
sizeof(uint32_t));
78 CHECK(rw_data_32 == kRandomData[i],
79 "Memory Write/Read Mismatch for %s, index %d, data read = %08x "
80 "data_expected = %08x.",
81 sram_ctrl[sc].name, i, rw_data_32, kRandomData[i]);
88 for (dt_sram_ctrl_t sc = (dt_sram_ctrl_t)0; sc < kDtSramCtrlCount; ++sc) {
89 CHECK_DIF_OK(dif_sram_ctrl_init_from_dt(sc, &sram_ctrl[sc].dif));
95 sram_ctrl[sc].buf = (uintptr_t)sram_main_buffer;
96 sram_ctrl[sc].name = SRAM_CTRL_NAME(kDtSramCtrlMain);
102 (uintptr_t)dt_sram_ctrl_reg_block(sc, kDtSramCtrlRegBlockRam);
104 unsigned dig = (unsigned)sc / 10;
105 sram_ctrl[sc].nameBuf[0] = (char)(
'0' + dig);
106 sram_ctrl[sc].nameBuf[1] = (char)(
'0' + ((
unsigned)sc - dig * 10));
107 sram_ctrl[sc].name = sram_ctrl[sc].nameBuf;
115 for (dt_sram_ctrl_t sc = (dt_sram_ctrl_t)0; sc < kDtSramCtrlCount; ++sc) {
118 CHECK((
status & kStatusRegMask) == 0x0,
119 "SRAM %s status error bits set, status = %08x.", sram_ctrl[sc].name,