5656#define SEND_BOOT_REQUEST
5757#endif /* CONFIG_NRF_MCUBOOT_BOOT_REQUEST && !CONFIG_MCUBOOT */
5858
59+ #ifdef CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES
60+ #include <bootutil/mcuboot_manifest.h>
61+ #endif /* CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
62+
5963#ifdef CONFIG_MCUBOOT
6064BOOT_LOG_MODULE_DECLARE (mcuboot );
6165#else
@@ -243,6 +247,45 @@ boot_read_copy_done(const struct flash_area *fap, uint8_t *copy_done)
243247 return boot_read_flag (fap , copy_done , boot_copy_done_off (fap ));
244248}
245249
250+ #if defined(SEND_BOOT_REQUEST ) || (!defined(MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP )) || \
251+ defined(CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES )
252+ static int flash_area_to_image_slot (const struct flash_area * fa , uint32_t * slot )
253+ {
254+ int id = flash_area_get_id (fa );
255+ #if BOOT_IMAGE_NUMBER > 1
256+ uint8_t i = 0 ;
257+
258+ for (i = 0 ; i < BOOT_IMAGE_NUMBER ; i ++ ) {
259+ if (FLASH_AREA_IMAGE_PRIMARY (i ) == id ) {
260+ if (slot != NULL ) {
261+ * slot = 0 ;
262+ }
263+ return i ;
264+ } else if (FLASH_AREA_IMAGE_SECONDARY (i ) == id ) {
265+ if (slot != NULL ) {
266+ * slot = 1 ;
267+ }
268+ return i ;
269+ }
270+ }
271+
272+ /* Image not found */
273+ * slot = UINT32_MAX ;
274+ #else
275+ (void )fa ;
276+ if (slot != NULL ) {
277+ if (FLASH_AREA_IMAGE_PRIMARY (0 ) == id ) {
278+ * slot = 0 ;
279+ } else if (FLASH_AREA_IMAGE_SECONDARY (0 ) == id ) {
280+ * slot = 1 ;
281+ } else {
282+ * slot = UINT32_MAX ;
283+ }
284+ }
285+ #endif
286+ return 0 ;
287+ }
288+ #endif /* SEND_BOOT_REQUEST || !MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP || CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
246289
247290int
248291boot_read_swap_state (const struct flash_area * fap ,
@@ -251,7 +294,23 @@ boot_read_swap_state(const struct flash_area *fap,
251294 uint8_t magic [BOOT_MAGIC_SZ ];
252295 uint32_t off ;
253296 uint8_t swap_info ;
254- int rc ;
297+ int rc = -1 ;
298+ #ifdef CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES
299+ enum boot_slot slot_id = BOOT_SLOT_NONE ;
300+ int image_id = flash_area_to_image_slot (fap , & slot_id );
301+
302+ /* If manifest-based updates are used, only the manifest image is considered. */
303+ image_id = CONFIG_NCS_MCUBOOT_MANIFEST_IMAGE_NUMBER ;
304+ if (slot_id == BOOT_SLOT_PRIMARY ) {
305+ rc = flash_area_open (FLASH_AREA_IMAGE_PRIMARY (image_id ), & fap );
306+ } else if (slot_id == BOOT_SLOT_SECONDARY ) {
307+ rc = flash_area_open (FLASH_AREA_IMAGE_SECONDARY (image_id ), & fap );
308+ }
309+
310+ if (rc != 0 ) {
311+ return rc ;
312+ }
313+ #endif /* CONFIG_NCS_MCUBOOT_MANIFEST_UPDATES */
255314
256315 off = boot_magic_off (fap );
257316 rc = flash_area_read (fap , off , magic , BOOT_MAGIC_SZ );
@@ -398,45 +457,6 @@ boot_write_image_ok(const struct flash_area *fap)
398457 return boot_write_trailer_flag (fap , off , BOOT_FLAG_SET );
399458}
400459
401- #if defined(SEND_BOOT_REQUEST ) || (!defined(MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP ))
402- static int flash_area_to_image_slot (const struct flash_area * fa , uint32_t * slot )
403- {
404- int id = flash_area_get_id (fa );
405- #if BOOT_IMAGE_NUMBER > 1
406- uint8_t i = 0 ;
407-
408- for (i = 0 ; i < BOOT_IMAGE_NUMBER ; i ++ ) {
409- if (FLASH_AREA_IMAGE_PRIMARY (i ) == id ) {
410- if (slot != NULL ) {
411- * slot = 0 ;
412- }
413- return i ;
414- } else if (FLASH_AREA_IMAGE_SECONDARY (i ) == id ) {
415- if (slot != NULL ) {
416- * slot = 1 ;
417- }
418- return i ;
419- }
420- }
421-
422- /* Image not found */
423- * slot = UINT32_MAX ;
424- #else
425- (void )fa ;
426- if (slot != NULL ) {
427- if (FLASH_AREA_IMAGE_PRIMARY (0 ) == id ) {
428- * slot = 0 ;
429- } else if (FLASH_AREA_IMAGE_SECONDARY (0 ) == id ) {
430- * slot = 1 ;
431- } else {
432- * slot = UINT32_MAX ;
433- }
434- }
435- #endif
436- return 0 ;
437- }
438- #endif /* SEND_BOOT_REQUEST || !MCUBOOT_BOOTUTIL_LIB_FOR_DIRECT_XIP */
439-
440460int
441461boot_read_image_ok (const struct flash_area * fap , uint8_t * image_ok )
442462{
0 commit comments