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);