7 #include "sw/device/lib/testing/test_framework/check.h"
9 #include "sw/device/silicon_creator/lib/drivers/flash_ctrl.h"
10 #include "sw/device/silicon_creator/lib/drivers/otp.h"
11 #include "sw/device/silicon_creator/lib/manifest_def.h"
13 #include "flash_ctrl_regs.h"
15 #include "otp_ctrl_regs.h"
17 OTTF_DEFINE_TEST_CONFIG();
19 #define RUN_TEST(test_) \
20 LOG_INFO("Starting test " #test_ "..."); \
22 LOG_INFO("Finished test " #test_ ": ok.");
54 uint32_t expected_bank) {
55 #define INFO_PAGE_BANK_CASE_(name_, bank_, page_) \
56 if (&name_ == info_page) { \
57 CHECK(bank_ == expected_bank); \
61 FLASH_CTRL_INFO_PAGES_DEFINE(INFO_PAGE_BANK_CASE_);
64 #undef INFO_PAGE_BANK_CASE_
71 uint32_t expected_pagenum) {
72 #define INFO_PAGE_PAGENUM_CASE_(name_, bank_, page_) \
73 if (&name_ == info_page) { \
74 CHECK(page_ == expected_pagenum); \
78 FLASH_CTRL_INFO_PAGES_DEFINE(INFO_PAGE_PAGENUM_CASE_);
81 #undef INFO_PAGE_PAGENUM_CASE_
110 static void default_cfg_test(
void) {
112 uint32_t otp_default_cfg_value =
113 otp_read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_FLASH_DATA_DEFAULT_CFG_OFFSET);
116 .scrambling_en = FLASH_CTRL_OTP_FIELD_SCRAMBLING,
117 .ecc_en = FLASH_CTRL_OTP_FIELD_ECC,
118 .he_en = FLASH_CTRL_OTP_FIELD_HE,
122 uint32_t default_cfg_value =
123 abs_mmio_read32(kBase + FLASH_CTRL_DEFAULT_REGION_REG_OFFSET);
126 .scrambling_en = FLASH_CTRL_DEFAULT_REGION_SCRAMBLE_EN_FIELD,
127 .ecc_en = FLASH_CTRL_DEFAULT_REGION_ECC_EN_FIELD,
128 .he_en = FLASH_CTRL_DEFAULT_REGION_HE_EN_FIELD,
132 check_cfg_match(default_cfg, otp_default_cfg);
143 static void boot_info_cfg_test(
void) {
151 check_info_page_bank(&kFlashCtrlInfoPageBootData0, 1);
152 check_info_page_pagenum(&kFlashCtrlInfoPageBootData0, 0);
153 check_info_page_bank(&kFlashCtrlInfoPageBootData1, 1);
154 check_info_page_pagenum(&kFlashCtrlInfoPageBootData1, 1);
157 uint32_t otp_boot_info_cfg_value =
158 otp_read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_FLASH_INFO_BOOT_DATA_CFG_OFFSET);
161 .scrambling_en = FLASH_CTRL_OTP_FIELD_SCRAMBLING,
162 .ecc_en = FLASH_CTRL_OTP_FIELD_ECC,
163 .he_en = FLASH_CTRL_OTP_FIELD_HE,
167 uint32_t page0_cfg_value =
168 abs_mmio_read32(kBase + FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_REG_OFFSET);
171 .scrambling_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_SCRAMBLE_EN_0_FIELD,
172 .ecc_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_ECC_EN_0_FIELD,
173 .he_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_HE_EN_0_FIELD,
175 check_cfg_match(page0_cfg, otp_boot_info_cfg);
178 uint32_t page1_cfg_value =
179 abs_mmio_read32(kBase + FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_REG_OFFSET);
182 .scrambling_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_SCRAMBLE_EN_1_FIELD,
183 .ecc_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_ECC_EN_1_FIELD,
184 .he_en = FLASH_CTRL_BANK1_INFO0_PAGE_CFG_1_HE_EN_1_FIELD,
186 check_cfg_match(page1_cfg, otp_boot_info_cfg);
192 static void is_initialized_test(
void) {
195 uint32_t init = abs_mmio_read32(kBase + FLASH_CTRL_INIT_REG_OFFSET);
200 uint32_t phy_status =
201 abs_mmio_read32(kBase + FLASH_CTRL_PHY_STATUS_REG_OFFSET);
207 uint32_t
status = abs_mmio_read32(kBase + FLASH_CTRL_STATUS_REG_OFFSET);
214 RUN_TEST(default_cfg_test);
215 RUN_TEST(boot_info_cfg_test);
216 RUN_TEST(is_initialized_test);