Skip to content

Commit 259f694

Browse files
committed
dfu: Allow to use imgtool-based headers
It is possible to add MCUboot header through --pad-header option. In such cases, the FLASH_LOAD_OFFSET does not point to the beginning of the slot, but to the beginning of the executable area, thus the check for the active slot should use ranges instead of exact values. Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent 291579f commit 259f694

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

subsys/dfu/img_util/flash_img.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,15 @@ LOG_MODULE_REGISTER(flash_img, CONFIG_IMG_MANAGER_LOG_LEVEL);
2323
#include <bootutil/bootutil_public.h>
2424
#endif
2525

26-
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
27-
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
26+
#ifdef CONFIG_USE_DT_CODE_PARTITION
27+
#define FLASH_LOAD_OFFSET DT_REG_ADDR(DT_CHOSEN(zephyr_code_partition))
28+
#elif defined(CONFIG_FLASH_LOAD_OFFSET)
29+
#define FLASH_LOAD_OFFSET CONFIG_FLASH_LOAD_OFFSET
30+
#endif
31+
32+
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
33+
(FIXED_PARTITION_OFFSET(label) <= FLASH_LOAD_OFFSET && \
34+
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > FLASH_LOAD_OFFSET)
2835

2936
#include <zephyr/devicetree.h>
3037
#if defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) && (CONFIG_TFM_MCUBOOT_IMAGE_NUMBER == 2)

subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,18 @@
4343

4444
#if !defined(CONFIG_MCUBOOT_BOOTLOADER_MODE_RAM_LOAD)
4545

46-
#ifndef CONFIG_FLASH_LOAD_OFFSET
47-
#error MCUmgr requires application to be built with CONFIG_FLASH_LOAD_OFFSET set \
48-
to be able to figure out application running slot.
46+
#ifdef CONFIG_USE_DT_CODE_PARTITION
47+
#define FLASH_LOAD_OFFSET DT_REG_ADDR(DT_CHOSEN(zephyr_code_partition))
48+
#elif defined(CONFIG_FLASH_LOAD_OFFSET)
49+
#define FLASH_LOAD_OFFSET CONFIG_FLASH_LOAD_OFFSET
50+
#else
51+
#error MCUmgr requires application to be built with CONFIG_FLASH_LOAD_OFFSET or \
52+
CONFIG_USE_DT_CODE_PARTITION set to be able to figure out application running slot.
4953
#endif
5054

51-
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
52-
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
55+
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
56+
(FIXED_PARTITION_OFFSET(label) <= FLASH_LOAD_OFFSET && \
57+
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > FLASH_LOAD_OFFSET)
5358

5459
BUILD_ASSERT(sizeof(struct image_header) == IMAGE_HEADER_SIZE,
5560
"struct image_header not required size");

tests/subsys/dfu/img_util/src/main.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
#define SLOT0_PARTITION slot0_partition
1313
#define SLOT1_PARTITION slot1_partition
1414

15-
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
16-
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
15+
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
16+
(FIXED_PARTITION_OFFSET(label) <= CONFIG_FLASH_LOAD_OFFSET && \
17+
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > CONFIG_FLASH_LOAD_OFFSET)
1718

1819
#if FIXED_PARTITION_IS_RUNNING_APP_PARTITION(slot0_partition)
1920
#define UPLOAD_PARTITION_ID FIXED_PARTITION_ID(SLOT1_PARTITION)

0 commit comments

Comments
 (0)