5 #include "sw/device/silicon_creator/lib/bootstrap.h"
7 #include "dt/dt_gpio.h"
11 #include "sw/device/silicon_creator/lib/drivers/flash_ctrl.h"
12 #include "sw/device/silicon_creator/lib/drivers/otp.h"
13 #include "sw/device/silicon_creator/lib/error.h"
15 #include "flash_ctrl_regs.h"
16 #include "gpio_regs.h"
17 #include "otp_ctrl_regs.h"
19 static const dt_gpio_t kGpioDt = kDtGpio;
21 rom_error_t bootstrap_chip_erase(
void) {
23 rom_error_t err_0 = flash_ctrl_data_erase(0, kFlashCtrlEraseTypeBank);
24 rom_error_t err_1 = flash_ctrl_data_erase(FLASH_CTRL_PARAM_BYTES_PER_BANK,
25 kFlashCtrlEraseTypeBank);
28 HARDENED_RETURN_IF_ERROR(err_0);
32 rom_error_t bootstrap_erase_verify(
void) {
33 rom_error_t err_0 = flash_ctrl_data_erase_verify(0, kFlashCtrlEraseTypeBank);
34 rom_error_t err_1 = flash_ctrl_data_erase_verify(
35 FLASH_CTRL_PARAM_BYTES_PER_BANK, kFlashCtrlEraseTypeBank);
36 HARDENED_RETURN_IF_ERROR(err_0);
41 uint32_t bootstrap_dis =
42 otp_read32(OTP_CTRL_PARAM_OWNER_SW_CFG_ROM_BOOTSTRAP_DIS_OFFSET);
53 res ^= abs_mmio_read32(dt_gpio_primary_reg_block(kGpioDt) +
54 GPIO_DATA_IN_REG_OFFSET) &
63 rom_error_t bootstrap(
void) {
66 return kErrorBootstrapNotRequested;
70 return enter_bootstrap();