11 #include "sw/device/lib/testing/flash_ctrl_testutils.h"
12 #include "sw/device/lib/testing/test_framework/check.h"
15 #include "flash_ctrl_regs.h"
38 OTTF_DEFINE_TEST_CONFIG();
73 #define BANK1_START_PAGE 256
74 #define START_PAGE_ADDR \
75 TOP_EARLGREY_FLASH_CTRL_MEM_BASE_ADDR + FLASH_CTRL_PARAM_BYTES_PER_BANK
77 static const test_t kRegion[] = {
79 .randomdata = {0x77777770, 0x66666660},
81 .write_permission = {
false,
false},
82 .read_permission = {
true,
true},
85 .base = BANK1_START_PAGE + 12,
89 .rd_en = kMultiBitBool4True,
90 .prog_en = kMultiBitBool4False,
91 .erase_en = kMultiBitBool4True,
92 .scramble_en = kMultiBitBool4True,
93 .ecc_en = kMultiBitBool4True,
94 .high_endurance_en = kMultiBitBool4False,
98 .randomdata = {0x88888880, 0x77777770, 0x66666660, 0x55555550},
100 .write_permission = {
true,
true,
true,
true},
101 .read_permission = {
false,
false,
false,
false},
104 .base = BANK1_START_PAGE + 11,
108 .rd_en = kMultiBitBool4False,
109 .prog_en = kMultiBitBool4True,
110 .erase_en = kMultiBitBool4True,
111 .scramble_en = kMultiBitBool4True,
112 .ecc_en = kMultiBitBool4True,
113 .high_endurance_en = kMultiBitBool4False,
117 .randomdata = {0xaaaaaaa0, 0xbbbbbbb0, 0xccccccc0, 0xddddddd0, 0xeeeeeee0,
120 .write_permission = {
true,
true,
true,
true,
true,
true},
121 .read_permission = {
true,
true,
true,
true,
true,
true},
124 .base = BANK1_START_PAGE + 10,
128 .rd_en = kMultiBitBool4True,
129 .prog_en = kMultiBitBool4True,
130 .erase_en = kMultiBitBool4True,
131 .scramble_en = kMultiBitBool4True,
132 .ecc_en = kMultiBitBool4True,
133 .high_endurance_en = kMultiBitBool4False,
143 static void test_mem_access(
test_t region) {
145 uintptr_t start_epage =
146 (uintptr_t)(START_PAGE_ADDR +
147 FLASH_CTRL_PARAM_BYTES_PER_PAGE * region.
page_start);
148 uint32_t wdata[FLASH_CTRL_PARAM_WORDS_PER_PAGE];
150 for (uint32_t i = 0; i < page_size; i++) {
151 for (
size_t j = 0; j <
ARRAYSIZE(wdata); j++)
154 CHECK_STATUS_OK(flash_ctrl_testutils_erase_page(
156 0, kDifFlashCtrlPartitionTypeData));
157 CHECK_STATUS_OK(flash_ctrl_testutils_write(&flash, start_epage,
159 kDifFlashCtrlPartitionTypeData,
161 LOG_INFO(
"test_mem_access: page %d write complete",
164 CHECK_STATUS_NOT_OK(flash_ctrl_testutils_write(
166 0, wdata, kDifFlashCtrlPartitionTypeData,
168 LOG_INFO(
"test_mem_access: page %d write is not allowed",
171 uint32_t rdata[FLASH_CTRL_PARAM_WORDS_PER_PAGE];
174 CHECK_STATUS_OK(flash_ctrl_testutils_read(
175 &flash, start_epage, 0, rdata,
176 kDifFlashCtrlPartitionTypeData,
ARRAYSIZE(rdata),
178 CHECK_ARRAYS_EQ(rdata, wdata,
ARRAYSIZE(rdata));
179 LOG_INFO(
"test_mem_access: page %d read check complete",
182 CHECK_STATUS_NOT_OK(flash_ctrl_testutils_read(
183 &flash, start_epage, 0, rdata,
184 kDifFlashCtrlPartitionTypeData,
ARRAYSIZE(rdata),
186 LOG_INFO(
"test_mem_access: page %d read is not allowed",
189 start_epage += (uintptr_t)FLASH_CTRL_PARAM_BYTES_PER_PAGE;
202 CHECK_STATUS_OK(flash_ctrl_testutils_default_region_access(
203 &flash,
true,
true,
true,
204 false,
false,
false));
207 for (
int i = 2; i >= 0; i--) {
209 &flash, kRegion[i].region_index, kRegion[i].data_region));
212 test_mem_access(kRegion[i]);