|
57 | 57 |
|
58 | 58 | #ifdef __ZEPHYR__
|
59 | 59 | #include <zephyr/sys/reboot.h>
|
| 60 | +#if defined(CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS) |
| 61 | +#include <zephyr/kernel.h> |
| 62 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS */ |
60 | 63 | #endif
|
61 | 64 |
|
62 | 65 | #if defined(CONFIG_SOC_NRF5340_CPUAPP) && defined(PM_CPUNET_B0N_ADDRESS) && defined(CONFIG_PCD_APP)
|
@@ -761,9 +764,42 @@ boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
|
761 | 764 | }
|
762 | 765 | #endif
|
763 | 766 |
|
764 |
| - FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
765 |
| - NULL, 0, NULL); |
| 767 | + for (int i = 1; i <= CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT; i++ ) { |
| 768 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 769 | + BOOT_LOG_DBG("Image validation attempt %d/%d", i, CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT); |
| 770 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
766 | 771 |
|
| 772 | +#if defined(MCUBOOT_SWAP_USING_OFFSET) && defined(MCUBOOT_SERIAL_RECOVERY) |
| 773 | + FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
| 774 | + NULL, 0, NULL, 0); |
| 775 | +#else |
| 776 | + FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
| 777 | + NULL, 0, NULL); |
| 778 | +#endif |
| 779 | + |
| 780 | + if (FIH_EQ(fih_rc, FIH_SUCCESS)) { |
| 781 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 782 | + BOOT_LOG_DBG("Image validation attempt %d/%d success", i, CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT); |
| 783 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 784 | + break; |
| 785 | + } else { |
| 786 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 787 | + BOOT_LOG_WRN("Image validation attempt %d/%d failure: %d", |
| 788 | + i, |
| 789 | + CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT, fih_rc); |
| 790 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 791 | + |
| 792 | + if (i < CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT) { |
| 793 | +#if defined(CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS) |
| 794 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 795 | + BOOT_LOG_DBG("Waiting %d ms before next attempt", |
| 796 | + CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS); |
| 797 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 798 | + k_busy_wait(CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS * 1000); |
| 799 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS */ |
| 800 | + } |
| 801 | + } |
| 802 | + } |
767 | 803 | FIH_RET(fih_rc);
|
768 | 804 | }
|
769 | 805 |
|
|
0 commit comments