1818#include "sw/device/lib/testing/otp_ctrl_testutils.h"
1919#include "sw/device/lib/testing/rstmgr_testutils.h"
2020#include "sw/device/lib/testing/test_framework/check.h"
21+ #include "sw/device/lib/testing/test_framework/ottf_alerts.h"
2122#include "sw/device/silicon_creator/lib/base/chip.h"
2223#include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
2324
@@ -78,8 +79,10 @@ status_t keymgr_testutils_flash_init(
7879 const keymgr_testutils_secret_t * creator_secret ,
7980 const keymgr_testutils_secret_t * owner_secret ) {
8081 // Initialize flash secrets.
81- write_info_page (flash , kFlashInfoPageIdCreatorSecret , creator_secret ,
82- /*scramble=*/ true);
82+ if (creator_secret ) {
83+ write_info_page (flash , kFlashInfoPageIdCreatorSecret , creator_secret ,
84+ /*scramble=*/ true);
85+ }
8386 write_info_page (flash , kFlashInfoPageIdOwnerSecret , owner_secret ,
8487 /*scramble=*/ true);
8588 return OK_STATUS ();
@@ -189,6 +192,7 @@ status_t keymgr_testutils_try_startup(dif_keymgr_t *keymgr, dif_kmac_t *kmac,
189192status_t keymgr_testutils_init_nvm_then_reset (void ) {
190193 dif_flash_ctrl_state_t flash ;
191194 dif_rstmgr_t rstmgr ;
195+ dif_otp_ctrl_t otp_ctrl ;
192196
193197 TRY (dif_rstmgr_init (mmio_region_from_addr (TOP_EARLGREY_RSTMGR_AON_BASE_ADDR ),
194198 & rstmgr ));
@@ -201,8 +205,22 @@ status_t keymgr_testutils_init_nvm_then_reset(void) {
201205
202206 TRY (dif_flash_ctrl_init_state (
203207 & flash , mmio_region_from_addr (TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR )));
204-
205- TRY (keymgr_testutils_flash_init (& flash , & kCreatorSecret , & kOwnerSecret ));
208+ TRY (dif_otp_ctrl_init (
209+ mmio_region_from_addr (TOP_EARLGREY_OTP_CTRL_CORE_BASE_ADDR ),
210+ & otp_ctrl ));
211+
212+ bool secret2_computed = false;
213+ TRY (dif_otp_ctrl_is_digest_computed (& otp_ctrl , kDifOtpCtrlPartitionSecret2 ,
214+ & secret2_computed ));
215+
216+ // Only initialise the creator secret if `SECRET2` digest has not been
217+ // computed. `flash_ctrl` will throw a recoverable error if we try to write
218+ // this afterwards.
219+ const keymgr_testutils_secret_t * creator_secret = NULL ;
220+ if (!secret2_computed ) {
221+ creator_secret = & kCreatorSecret ;
222+ }
223+ TRY (keymgr_testutils_flash_init (& flash , creator_secret , & kOwnerSecret ));
206224
207225 TRY (check_lock_otp_partition ());
208226
0 commit comments