@@ -233,6 +233,10 @@ void RAMFUNCTION wolfBoot_check_self_update(void)
233233}
234234#endif /* RAM_CODE for self_update */
235235
236+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
237+ /* The swap-based update machinery (wolfBoot_copy_sector, wolfBoot_update, etc.)
238+ * is not used in monolithic self-update mode. */
239+
236240static int RAMFUNCTION wolfBoot_copy_sector (struct wolfBoot_image * src ,
237241 struct wolfBoot_image * dst , uint32_t sector )
238242{
@@ -804,7 +808,10 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
804808 * magic has not been set flag will have an un-determined value when we go
805809 * to check it */
806810 uint8_t flag = SECT_FLAG_NEW ;
807- struct wolfBoot_image boot , update , swap ;
811+ struct wolfBoot_image boot , update ;
812+ #ifndef DISABLE_BACKUP
813+ struct wolfBoot_image swap ;
814+ #endif
808815 uint16_t update_type ;
809816 uint32_t fw_size ;
810817 uint32_t size ;
@@ -856,7 +863,9 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
856863 return -1 ;
857864#endif
858865 wolfBoot_open_image (& boot , PART_BOOT );
866+ #ifndef DISABLE_BACKUP
859867 wolfBoot_open_image (& swap , PART_SWAP );
868+ #endif
860869
861870#if defined(EXT_ENCRYPTED ) && defined(DELTA_UPDATES )
862871 wolfBoot_printf ("Update partition fallback image: %d\n" , fallback_image );
@@ -1208,6 +1217,7 @@ static int RAMFUNCTION wolfBoot_update(int fallback_allowed)
12081217#ifdef __CCRX__
12091218#pragma section
12101219#endif
1220+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
12111221
12121222#if defined(ARCH_SIM ) && defined(WOLFBOOT_TPM ) && defined(WOLFBOOT_TPM_SEAL )
12131223int wolfBoot_unlock_disk (void )
@@ -1319,12 +1329,14 @@ int wolfBoot_unlock_disk(void)
13191329void RAMFUNCTION wolfBoot_start (void )
13201330{
13211331 int bootRet ;
1332+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
13221333 int updateRet ;
13231334#ifndef DISABLE_BACKUP
13241335 int resumedFinalErase ;
13251336#endif
13261337 uint8_t bootState ;
13271338 uint8_t updateState ;
1339+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
13281340 struct wolfBoot_image boot ;
13291341
13301342#if defined(ARCH_SIM ) && defined(WOLFBOOT_TPM ) && defined(WOLFBOOT_TPM_SEAL )
@@ -1335,6 +1347,8 @@ void RAMFUNCTION wolfBoot_start(void)
13351347 wolfBoot_check_self_update ();
13361348#endif
13371349
1350+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
1351+
13381352#ifdef NVM_FLASH_WRITEONCE
13391353 /* nvm_select_fresh_sector needs unlocked flash in cases where the unused
13401354 * sector needs to be erased */
@@ -1393,6 +1407,12 @@ void RAMFUNCTION wolfBoot_start(void)
13931407 }
13941408 }
13951409
1410+ #else /* WOLFBOOT_SELF_UPDATE_MONOLITHIC */
1411+ #ifdef SECURE_PKCS11
1412+ WP11_Library_Init ();
1413+ #endif
1414+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
1415+
13961416 bootRet = wolfBoot_open_image (& boot , PART_BOOT );
13971417 wolfBoot_printf ("Booting version: 0x%x\n" ,
13981418 wolfBoot_get_blob_version (boot .hdr ));
@@ -1404,6 +1424,7 @@ void RAMFUNCTION wolfBoot_start(void)
14041424 ) {
14051425 wolfBoot_printf ("Boot failed: Hdr %d, Hash %d, Sig %d\n" ,
14061426 boot .hdr_ok , boot .sha_ok , boot .signature_ok );
1427+ #ifndef WOLFBOOT_SELF_UPDATE_MONOLITHIC
14071428 wolfBoot_printf ("Trying emergency update\n" );
14081429 if (likely (wolfBoot_update (1 ) < 0 )) {
14091430 /* panic: no boot option available. */
@@ -1427,6 +1448,13 @@ void RAMFUNCTION wolfBoot_start(void)
14271448 wolfBoot_panic ();
14281449 }
14291450 }
1451+ #else
1452+ /* Monolithic mode: no emergency update path available */
1453+ #ifdef WOLFBOOT_TPM
1454+ wolfBoot_tpm2_deinit ();
1455+ #endif
1456+ wolfBoot_panic ();
1457+ #endif /* !WOLFBOOT_SELF_UPDATE_MONOLITHIC */
14301458 }
14311459 PART_SANITY_CHECK (& boot );
14321460#else
0 commit comments