@@ -1388,6 +1388,11 @@ boot_update_security_counter(uint8_t image_index, int slot,
13881388#define SEC_SLOT_TOUCHED 1
13891389#define SEC_SLOT_ASSIGNED 2
13901390
1391+ #if !defined(LEGACY_CHILD_PARENT_S0_S1_UPDATE_ENABLED )
1392+ /* Sysbuild */
1393+ static uint8_t sec_slot_assignmnet [MCUBOOT_IMAGE_NUMBER ] = {0 };
1394+ #else
1395+ /* Legacy child/parent image */
13911396#if (MCUBOOT_IMAGE_NUMBER == 2 ) && defined(PM_B0_ADDRESS ) && \
13921397 !defined(CONFIG_NRF53_MULTI_IMAGE_UPDATE )
13931398/* This configuration is peculiar - the one physical secondary slot is
@@ -1399,21 +1404,56 @@ boot_update_security_counter(uint8_t image_index, int slot,
13991404#endif
14001405
14011406static uint8_t sec_slot_assignmnet [SEC_SLOT_PHYSICAL_CNT ] = {0 };
1407+ #endif
14021408
14031409static inline void sec_slot_touch (struct boot_loader_state * state )
14041410{
1411+ #if !defined(LEGACY_CHILD_PARENT_S0_S1_UPDATE_ENABLED )
1412+ /* Sysbuild */
1413+ #if CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1
1414+ if (BOOT_CURR_IMG (state ) == CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER ) {
1415+ if (sec_slot_assignmnet [CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER ] == SEC_SLOT_VIRGIN ) {
1416+ sec_slot_assignmnet [CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER ] = SEC_SLOT_TOUCHED ;
1417+ }
1418+ } else if (BOOT_CURR_IMG (state ) == CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER ) {
1419+ if (sec_slot_assignmnet [CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER ] == SEC_SLOT_VIRGIN ) {
1420+ sec_slot_assignmnet [CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER ] = SEC_SLOT_TOUCHED ;
1421+ }
1422+ }
1423+ #endif
1424+
1425+ if (sec_slot_assignmnet [BOOT_CURR_IMG (state )] == SEC_SLOT_VIRGIN ) {
1426+ sec_slot_assignmnet [BOOT_CURR_IMG (state )] = SEC_SLOT_TOUCHED ;
1427+ }
1428+ #else
1429+ /* Legacy child/parent image */
14051430 uint8_t idx = (SEC_SLOT_PHYSICAL_CNT == 1 ) ? 0 : BOOT_CURR_IMG (state );
14061431
14071432 if (SEC_SLOT_VIRGIN == sec_slot_assignmnet [idx ]) {
14081433 sec_slot_assignmnet [idx ] = SEC_SLOT_TOUCHED ;
14091434 }
1435+ #endif
14101436}
14111437
14121438static inline void sec_slot_mark_assigned (struct boot_loader_state * state )
14131439{
1440+ #if !defined(LEGACY_CHILD_PARENT_S0_S1_UPDATE_ENABLED )
1441+ /* Sysbuild */
1442+ #if CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1
1443+ if (BOOT_CURR_IMG (state ) == CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER ) {
1444+ sec_slot_assignmnet [CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER ] = SEC_SLOT_ASSIGNED ;
1445+ } else if (BOOT_CURR_IMG (state ) == CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER ) {
1446+ sec_slot_assignmnet [CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER ] = SEC_SLOT_ASSIGNED ;
1447+ }
1448+ #endif
1449+
1450+ sec_slot_assignmnet [BOOT_CURR_IMG (state )] = SEC_SLOT_ASSIGNED ;
1451+ #else
1452+ /* Legacy child/parent image */
14141453 uint8_t idx = (SEC_SLOT_PHYSICAL_CNT == 1 ) ? 0 : BOOT_CURR_IMG (state );
14151454
14161455 sec_slot_assignmnet [idx ] = SEC_SLOT_ASSIGNED ;
1456+ #endif
14171457}
14181458
14191459/**
@@ -1429,7 +1469,13 @@ static void sec_slot_cleanup_if_unusable(void)
14291469{
14301470 uint8_t idx ;
14311471
1472+ #if !defined(LEGACY_CHILD_PARENT_S0_S1_UPDATE_ENABLED )
1473+ /* Sysbuild */
1474+ for (idx = 0 ; idx < MCUBOOT_IMAGE_NUMBER ; idx ++ ) {
1475+ #else
1476+ /* Legacy child/parent image */
14321477 for (idx = 0 ; idx < SEC_SLOT_PHYSICAL_CNT ; idx ++ ) {
1478+ #endif
14331479 if (SEC_SLOT_TOUCHED == sec_slot_assignmnet [idx ]) {
14341480 const struct flash_area * secondary_fa ;
14351481 int rc ;
@@ -1439,12 +1485,12 @@ static void sec_slot_cleanup_if_unusable(void)
14391485 if (!rc ) {
14401486 rc = flash_area_erase (secondary_fa , 0 , secondary_fa -> fa_size );
14411487 if (!rc ) {
1442- BOOT_LOG_ERR ("Cleaned-up secondary slot of %d. image. " , idx );
1488+ BOOT_LOG_ERR ("Cleaned-up secondary slot of image %d " , idx );
14431489 }
14441490 }
14451491
14461492 if (rc ) {
1447- BOOT_LOG_ERR ("Can not cleanup secondary slot of %d. image. " , idx );
1493+ BOOT_LOG_ERR ("Failed to clean-up secondary slot of image %d: %d " , idx , rc );
14481494 }
14491495 }
14501496 }
0 commit comments