dfu: allow MCUBoot configured without scratch

When no scratch parition was defined in the DTS file, just assume that
MCUBoot was built to use swap with move strategy, and never touch
scratch.

Signed-off-by: Fabio Utzig <utzig@apache.org>
This commit is contained in:
Fabio Utzig 2020-01-06 11:45:21 -03:00 committed by Ioannis Glaropoulos
commit 6d60ce5642

View file

@ -75,13 +75,15 @@ struct mcuboot_v1_raw_header {
#ifdef CONFIG_TRUSTED_EXECUTION_NONSECURE #ifdef CONFIG_TRUSTED_EXECUTION_NONSECURE
#define FLASH_AREA_IMAGE_PRIMARY DT_FLASH_AREA_IMAGE_0_NONSECURE_ID #define FLASH_AREA_IMAGE_PRIMARY DT_FLASH_AREA_IMAGE_0_NONSECURE_ID
#define FLASH_AREA_IMAGE_SECONDARY DT_FLASH_AREA_IMAGE_1_NONSECURE_ID #define FLASH_AREA_IMAGE_SECONDARY DT_FLASH_AREA_IMAGE_1_NONSECURE_ID
#define FLASH_AREA_IMAGE_SCRATCH DT_FLASH_AREA_IMAGE_SCRATCH_ID
#else #else
#define FLASH_AREA_IMAGE_PRIMARY DT_FLASH_AREA_IMAGE_0_ID #define FLASH_AREA_IMAGE_PRIMARY DT_FLASH_AREA_IMAGE_0_ID
#define FLASH_AREA_IMAGE_SECONDARY DT_FLASH_AREA_IMAGE_1_ID #define FLASH_AREA_IMAGE_SECONDARY DT_FLASH_AREA_IMAGE_1_ID
#define FLASH_AREA_IMAGE_SCRATCH DT_FLASH_AREA_IMAGE_SCRATCH_ID
#endif /* CONFIG_TRUSTED_EXECUTION_NONSECURE */ #endif /* CONFIG_TRUSTED_EXECUTION_NONSECURE */
#ifdef DT_FLASH_AREA_IMAGE_SCRATCH_ID
#define FLASH_AREA_IMAGE_SCRATCH DT_FLASH_AREA_IMAGE_SCRATCH_ID
#endif
#ifdef CONFIG_MCUBOOT_TRAILER_SWAP_TYPE #ifdef CONFIG_MCUBOOT_TRAILER_SWAP_TYPE
#define SWAP_TYPE_OFFS(bank_area) ((bank_area)->fa_size -\ #define SWAP_TYPE_OFFS(bank_area) ((bank_area)->fa_size -\
BOOT_MAGIC_SZ - BOOT_MAX_ALIGN * 3) BOOT_MAGIC_SZ - BOOT_MAX_ALIGN * 3)
@ -535,7 +537,9 @@ static int boot_read_swap_state(const struct flash_area *fa,
state->copy_done = boot_flag_decode(state->copy_done); state->copy_done = boot_flag_decode(state->copy_done);
} }
#else #else
#ifdef FLASH_AREA_IMAGE_SCRATCH
if (fa->fa_id != FLASH_AREA_IMAGE_SCRATCH) { if (fa->fa_id != FLASH_AREA_IMAGE_SCRATCH) {
#endif
off = COPY_DONE_OFFS(fa); off = COPY_DONE_OFFS(fa);
rc = flash_area_read_is_empty(fa, off, &state->copy_done, rc = flash_area_read_is_empty(fa, off, &state->copy_done,
sizeof(state->copy_done)); sizeof(state->copy_done));
@ -547,7 +551,9 @@ static int boot_read_swap_state(const struct flash_area *fa,
} else { } else {
state->copy_done = boot_flag_decode(state->copy_done); state->copy_done = boot_flag_decode(state->copy_done);
} }
#ifdef FLASH_AREA_IMAGE_SCRATCH
} }
#endif
#endif #endif
off = IMAGE_OK_OFFS(fa); off = IMAGE_OK_OFFS(fa);
@ -575,7 +581,9 @@ boot_read_swap_state_by_id(int flash_area_id, struct boot_swap_state *state)
int rc; int rc;
switch (flash_area_id) { switch (flash_area_id) {
#ifdef FLASH_AREA_IMAGE_SCRATCH
case FLASH_AREA_IMAGE_SCRATCH: case FLASH_AREA_IMAGE_SCRATCH:
#endif
case FLASH_AREA_IMAGE_PRIMARY: case FLASH_AREA_IMAGE_PRIMARY:
case FLASH_AREA_IMAGE_SECONDARY: case FLASH_AREA_IMAGE_SECONDARY:
rc = flash_area_open(flash_area_id, &fap); rc = flash_area_open(flash_area_id, &fap);