|
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)
|
@@ -909,14 +912,42 @@ boot_image_check(struct boot_loader_state *state, struct image_header *hdr,
|
909 | 912 | }
|
910 | 913 | #endif
|
911 | 914 |
|
| 915 | + for (int i = 1; i <= CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT; i++ ) { |
| 916 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 917 | + BOOT_LOG_DBG("Image validation attempt %d/%d", i, CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT); |
| 918 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 919 | + |
912 | 920 | #if defined(MCUBOOT_SWAP_USING_OFFSET) && defined(MCUBOOT_SERIAL_RECOVERY)
|
913 |
| - FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
914 |
| - NULL, 0, NULL, 0); |
| 921 | + FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
| 922 | + NULL, 0, NULL, 0); |
915 | 923 | #else
|
916 |
| - FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
917 |
| - NULL, 0, NULL); |
| 924 | + FIH_CALL(bootutil_img_validate, fih_rc, state, hdr, fap, tmpbuf, BOOT_TMPBUF_SZ, |
| 925 | + NULL, 0, NULL); |
918 | 926 | #endif
|
919 | 927 |
|
| 928 | + if (FIH_EQ(fih_rc, FIH_SUCCESS)) { |
| 929 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 930 | + BOOT_LOG_DBG("Image validation attempt %d/%d success", i, CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT); |
| 931 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 932 | + break; |
| 933 | + } else { |
| 934 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 935 | + BOOT_LOG_WRN("Image validation attempt %d/%d failure: %d", |
| 936 | + i, |
| 937 | + CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT, fih_rc); |
| 938 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 939 | + |
| 940 | + if (i < CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT) { |
| 941 | +#if defined(CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS) |
| 942 | +#if CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 |
| 943 | + BOOT_LOG_DBG("Waiting %d ms before next attempt", |
| 944 | + CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS); |
| 945 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_COUNT > 1 */ |
| 946 | + k_busy_wait(CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS * 1000); |
| 947 | +#endif /* CONFIG_NRF_MCUBOOT_IMG_VALIDATE_ATTEMPT_WAIT_MS */ |
| 948 | + } |
| 949 | + } |
| 950 | + } |
920 | 951 | FIH_RET(fih_rc);
|
921 | 952 | }
|
922 | 953 |
|
|
0 commit comments