@@ -243,6 +243,10 @@ void RAMFUNCTION wolfBoot_check_self_update(void)
243243}
244244#endif /* RAM_CODE for self_update */
245245
246+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
247+ /* The swap-based update machinery (wolfBoot_copy_sector, wolfBoot_update, etc.)
248+ * is not used in monolithic self-update mode. */
249+
246250static int RAMFUNCTION wolfBoot_copy_sector (struct wolfBoot_image * src ,
247251 struct wolfBoot_image * dst , uint32_t sector )
248252{
@@ -860,7 +864,10 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
860864 * magic has not been set flag will have an un-determined value when we go
861865 * to check it */
862866 uint8_t flag = SECT_FLAG_NEW ;
863- struct wolfBoot_image boot , update , swap ;
867+ struct wolfBoot_image boot , update ;
868+ #ifndef DISABLE_BACKUP
869+ struct wolfBoot_image swap ;
870+ #endif
864871 uint16_t update_type ;
865872 uint32_t fw_size ;
866873 uint32_t size ;
@@ -912,7 +919,9 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
912919 return -1 ;
913920#endif
914921 wolfBoot_open_image (& boot , PART_BOOT );
922+ #ifndef DISABLE_BACKUP
915923 wolfBoot_open_image (& swap , PART_SWAP );
924+ #endif
916925
917926#if defined(EXT_ENCRYPTED ) && defined(DELTA_UPDATES )
918927 wolfBoot_printf ("Update partition fallback image: %d\n" , fallback_image );
@@ -1270,6 +1279,7 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
12701279#ifdef __CCRX__
12711280#pragma section
12721281#endif
1282+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
12731283
12741284#if defined(ARCH_SIM ) && defined(WOLFBOOT_TPM ) && defined(WOLFBOOT_TPM_SEAL )
12751285int wolfBoot_unlock_disk (void )
@@ -1382,12 +1392,14 @@ int wolfBoot_unlock_disk(void)
13821392void RAMFUNCTION wolfBoot_start (void )
13831393{
13841394 int bootRet ;
1395+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
13851396 int updateRet ;
13861397#ifndef DISABLE_BACKUP
13871398 int resumedFinalErase ;
13881399#endif
13891400 uint8_t bootState ;
13901401 uint8_t updateState ;
1402+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
13911403 struct wolfBoot_image boot ;
13921404
13931405#if defined(ARCH_SIM ) && defined(WOLFBOOT_TPM ) && defined(WOLFBOOT_TPM_SEAL )
@@ -1398,6 +1410,8 @@ void RAMFUNCTION wolfBoot_start(void)
13981410 wolfBoot_check_self_update ();
13991411#endif
14001412
1413+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
1414+
14011415#ifdef NVM_FLASH_WRITEONCE
14021416 /* nvm_select_fresh_sector needs unlocked flash in cases where the unused
14031417 * sector needs to be erased */
@@ -1456,6 +1470,12 @@ void RAMFUNCTION wolfBoot_start(void)
14561470 }
14571471 }
14581472
1473+ #else /* WOLFBOOT_SELF_UPDATE_MONOLITHIC */
1474+ #ifdef SECURE_PKCS11
1475+ WP11_Library_Init ();
1476+ #endif
1477+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
1478+
14591479 bootRet = wolfBoot_open_image (& boot , PART_BOOT );
14601480 wolfBoot_printf ("Booting version: 0x%x\n" ,
14611481 wolfBoot_get_blob_version (boot .hdr ));
@@ -1467,6 +1487,7 @@ void RAMFUNCTION wolfBoot_start(void)
14671487 ) {
14681488 wolfBoot_printf ("Boot failed: Hdr %d, Hash %d, Sig %d\n" ,
14691489 boot .hdr_ok , boot .sha_ok , boot .signature_ok );
1490+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
14701491 wolfBoot_printf ("Trying emergency update\n" );
14711492 if (likely (wolfBoot_update (1 ) < 0 )) {
14721493 /* panic: no boot option available. */
@@ -1490,6 +1511,13 @@ void RAMFUNCTION wolfBoot_start(void)
14901511 wolfBoot_panic ();
14911512 }
14921513 }
1514+ #else
1515+ /* Monolithic mode: no emergency update path available */
1516+ #ifdef WOLFBOOT_TPM
1517+ wolfBoot_tpm2_deinit ();
1518+ #endif
1519+ wolfBoot_panic ();
1520+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
14931521 }
14941522 if ((boot .hdr_ok != 1U ) || (boot .sha_ok != 1U ) ||
14951523 (boot .signature_ok != 1U )) {
0 commit comments