Skip to content

Commit 652fa0a

Browse files
committed
[nrf noup] boot: bootutil: loader: Fix image clean-up for sysbuild
Fixes the implementation so that it works with sysbuild. This will need to be reworked separately when support for parent/child images is removed Signed-off-by: Jamie McCrae <[email protected]>
1 parent 30525e9 commit 652fa0a

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

boot/bootutil/src/loader.c

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

14011406
static uint8_t sec_slot_assignmnet[SEC_SLOT_PHYSICAL_CNT] = {0};
1407+
#endif
14021408

14031409
static 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

14121438
static 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

Comments
 (0)