6 #include "sw/device/lib/base/status.h"
12 #include "sw/device/lib/testing/flash_ctrl_testutils.h"
13 #include "sw/device/silicon_creator/manuf/lib/flash_info_fields.h"
17 #ifndef AST_PROGRAM_UNITTEST
21 #define ast_write(addr, data) abs_mmio_write32(addr, data)
23 static dif_pinmux_t pinmux;
24 static dif_uart_t uart0;
29 extern void ast_write(uint32_t addr, uint32_t data);
35 static status_t setup_uart(
bool enable) {
63 status_t ast_program_init(
bool verbose) {
70 TRY(flash_ctrl_testutils_wait_for_init(&flash_state));
74 TRY(flash_ctrl_testutils_info_region_setup_properties(
75 &flash_state, kFlashInfoFieldAstCalibrationData.page,
76 kFlashInfoFieldAstCalibrationData.bank,
77 kFlashInfoFieldAstCalibrationData.partition,
79 .ecc_en = kMultiBitBool4True,
80 .high_endurance_en = kMultiBitBool4False,
81 .erase_en = kMultiBitBool4True,
82 .prog_en = kMultiBitBool4True,
83 .rd_en = kMultiBitBool4True,
84 .scramble_en = kMultiBitBool4False},
90 status_t ast_program_config(
bool verbose) {
91 TRY(ast_program_init(verbose));
96 uint32_t byte_address =
97 (kFlashInfoFieldAstCalibrationData.page * device_info.
bytes_per_page) +
98 kFlashInfoFieldAstCalibrationData.byte_offset;
99 uint32_t ast_data[kFlashInfoAstCalibrationDataSizeIn32BitWords];
100 TRY(flash_ctrl_testutils_wait_for_init(&flash_state));
101 TRY(flash_ctrl_testutils_read(&flash_state, byte_address,
102 kFlashInfoFieldAstCalibrationData.partition,
103 ast_data, kDifFlashCtrlPartitionTypeInfo,
104 kFlashInfoAstCalibrationDataSizeIn32BitWords,
108 LOG_INFO(
"Programming %u AST words",
109 kFlashInfoAstCalibrationDataSizeIn32BitWords);
110 for (
size_t i = 0; i < kFlashInfoAstCalibrationDataSizeIn32BitWords; ++i) {
112 uint32_t data = ast_data[i];
113 LOG_INFO(
"\tAddress = 0x%08x, Data = 0x%08x", addr, data);
114 ast_write(addr, data);