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