13 #include "sw/device/lib/testing/test_framework/check.h"
15 #include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
18 #include "sram_ctrl_regs.h"
22 kSramCtrlTestDataSizeWords = 16,
25 OTTF_DEFINE_TEST_CONFIG();
31 static const uint32_t kRandomData[kSramCtrlTestDataSizeWords] = {
32 0x6b4abfae, 0x63bdb6e7, 0x87f99b1a, 0xa214dffe, 0xb12291f9, 0xd0cd1abe,
33 0x5c95e716, 0xe887aab1, 0x307f6ef9, 0x6f5c0464, 0x5882279d, 0x44c19574,
34 0x1bd20079, 0xf8250ead, 0x4bf362a4, 0xad41437d};
38 for (
int i = 0; i < kSramCtrlTestDataSizeWords; ++i) {
39 mmio_region_write32(sram_region, i * (ptrdiff_t)
sizeof(uint32_t),
49 static void check_data_matches(
mmio_region_t sram_region,
bool matches) {
50 for (
int i = 0; i < kSramCtrlTestDataSizeWords; ++i) {
52 mmio_region_read32(sram_region, i * (ptrdiff_t)
sizeof(uint32_t));
55 CHECK(word == kRandomData[i],
56 "Data at index %u mismached, expected: %04x, got: %04x", i,
57 kRandomData[i], word);
58 }
else if (word != kRandomData[i]) {
64 CHECK(matches,
"Data in SRAM was not rescrambled correctly");
68 static void init_sram(dif_sram_ctrl_t sram_ctrl) {
70 mmio_region_write32(sram_ctrl.base_addr, SRAM_CTRL_CTRL_REG_OFFSET, init);
78 CHECK((
status & kStatusRegMask) == 0x0,
79 "SRAM ret status error bits set, status = %08x.",
status);
84 dif_sram_ctrl_t sram_ctrl_ret;
85 CHECK_DIF_OK(dif_sram_ctrl_init(
89 init_sram(sram_ctrl_ret);
91 uintptr_t sram_ret_buffer_addr =
100 for (
size_t it = 0; it < 2; it++) {
102 write_data(sram_region_ret_addr);
104 check_data_matches(sram_region_ret_addr,
true);
116 "Readback feature not locked.");
119 init_sram(sram_ctrl_ret);
120 check_data_matches(sram_region_ret_addr,
false);