Correct flash_ctrl_data_erase_verify parameter. Need the base address of the flash memory, not the controller registers. Requires plumbing through the bootstrap api's. Bug: 362960646 Bypass-Presubmit-Reason: topic passed on manual retry Change-Id: Ibe11b0f0cf5d10206f6d86113e94c2cce1487ffe
diff --git a/sw/device/lib/testing/test_rom/test_rom.c b/sw/device/lib/testing/test_rom/test_rom.c index c277750..85de7ab 100644 --- a/sw/device/lib/testing/test_rom/test_rom.c +++ b/sw/device/lib/testing/test_rom/test_rom.c
@@ -226,8 +226,10 @@ LOG_INFO("Boot strap requested"); const uintptr_t flash_ctrl_addr = TOP_MATCHA_FLASH_CTRL_CORE_BASE_ADDR; + const uintptr_t flash_mem_addr = TOP_MATCHA_FLASH_CTRL_MEM_BASE_ADDR; const uintptr_t spi_device_addr = TOP_MATCHA_SPI_DEVICE_BASE_ADDR; - rom_error_t bootstrap_err = bootstrap(flash_ctrl_addr, spi_device_addr, otp_addr, gpio_addr); + rom_error_t bootstrap_err = bootstrap(flash_ctrl_addr, flash_mem_addr, + spi_device_addr, otp_addr, gpio_addr); if (bootstrap_err != kErrorOk) { LOG_ERROR("Bootstrap failed with status code: %08x", (uint32_t)bootstrap_err);
diff --git a/sw/device/lib/testing/test_rom/test_rom_cheri.c b/sw/device/lib/testing/test_rom/test_rom_cheri.c index 5040f97..d12d04f 100644 --- a/sw/device/lib/testing/test_rom/test_rom_cheri.c +++ b/sw/device/lib/testing/test_rom/test_rom_cheri.c
@@ -257,11 +257,14 @@ const uintptr_t flash_ctrl_addr = get_mmio_ptr(root_cap, TOP_MATCHA_FLASH_CTRL_CORE_BASE_ADDR, TOP_MATCHA_FLASH_CTRL_CORE_SIZE_BYTES); + const uintptr_t flash_mem_addr = + get_mmio_ptr(root_cap, TOP_MATCHA_FLASH_CTRL_MEM_BASE_ADDR, + TOP_MATCHA_FLASH_CTRL_MEM_SIZE_BYTES); const uintptr_t spi_device_addr = get_mmio_ptr(root_cap, TOP_MATCHA_SPI_DEVICE_BASE_ADDR, TOP_MATCHA_SPI_DEVICE_BASE_ADDR); - rom_error_t bootstrap_err = bootstrap(flash_ctrl_addr, spi_device_addr, - otp_addr, gpio_addr); + rom_error_t bootstrap_err = bootstrap(flash_ctrl_addr, flash_mem_addr, + spi_device_addr, otp_addr, gpio_addr); if (bootstrap_err != kErrorOk) { LOG_ERROR("Bootstrap failed with status code: %08x", (uint32_t)bootstrap_err);
diff --git a/sw/device/silicon_creator/rom/bootstrap.c b/sw/device/silicon_creator/rom/bootstrap.c index bfccc7c..5104b23 100644 --- a/sw/device/silicon_creator/rom/bootstrap.c +++ b/sw/device/silicon_creator/rom/bootstrap.c
@@ -274,11 +274,13 @@ * @param state Bootstrap state. * @return Result of the operation. */ -static rom_error_t bootstrap_handle_erase_verify(uintptr_t flash_ctrl_addr, uintptr_t spi_device_addr, bootstrap_state_t *state) { +static rom_error_t bootstrap_handle_erase_verify(uintptr_t flash_mem_addr, + uintptr_t spi_device_addr, + bootstrap_state_t *state) { HARDENED_CHECK_EQ(*state, kBootstrapStateEraseVerify); - rom_error_t err_0 = flash_ctrl_data_erase_verify(flash_ctrl_addr, 0, kFlashCtrlEraseTypeBank); - rom_error_t err_1 = flash_ctrl_data_erase_verify(flash_ctrl_addr, + rom_error_t err_0 = flash_ctrl_data_erase_verify(flash_mem_addr, 0, kFlashCtrlEraseTypeBank); + rom_error_t err_1 = flash_ctrl_data_erase_verify(flash_mem_addr, FLASH_CTRL_PARAM_BYTES_PER_BANK, kFlashCtrlEraseTypeBank); HARDENED_RETURN_IF_ERROR(err_0); HARDENED_RETURN_IF_ERROR(err_1); @@ -374,6 +376,7 @@ // NB: assumes flash_ctrl_init is already called rom_error_t bootstrap(uintptr_t flash_ctrl_addr, + uintptr_t flash_mem_addr, uintptr_t spi_device_addr, uintptr_t otp_addr, uintptr_t gpio_addr) { @@ -396,7 +399,7 @@ break; case kBootstrapStateEraseVerify: HARDENED_CHECK_EQ(state, kBootstrapStateEraseVerify); - error = bootstrap_handle_erase_verify(flash_ctrl_addr, spi_device_addr, &state); + error = bootstrap_handle_erase_verify(flash_mem_addr, spi_device_addr, &state); break; case kBootstrapStateProgram: HARDENED_CHECK_EQ(state, kBootstrapStateProgram);
diff --git a/sw/device/silicon_creator/rom/bootstrap.h b/sw/device/silicon_creator/rom/bootstrap.h index c67b88e..185d98c 100644 --- a/sw/device/silicon_creator/rom/bootstrap.h +++ b/sw/device/silicon_creator/rom/bootstrap.h
@@ -54,6 +54,7 @@ * @return Result of the operation. */ rom_error_t bootstrap(uintptr_t flash_ctrl_addr, + uintptr_t flash_mem_addr, uintptr_t spi_device_addr, uintptr_t otp_addr, uintptr_t gpio_addr);