Skip to content

Commit 0b6f0ef

Browse files
committed
nrf_desktop: Fix checks for the current DFU slot
Allow to start the FW code in the middle of the MCUboot slot. Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent d6269e3 commit 0b6f0ef

File tree

1 file changed

+13
-2
lines changed
  • applications/nrf_desktop/src/modules

1 file changed

+13
-2
lines changed

applications/nrf_desktop/src/modules/dfu.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,14 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_LOG_LEVEL);
107107
BUILD_ASSERT(DT_FIXED_PARTITION_EXISTS(MCUBOOT_SECONDARY_NODE),
108108
"Missing secondary partition definition in DTS.");
109109

110+
110111
#define CODE_PARTITION_START_ADDR DT_FIXED_PARTITION_ADDR(CODE_PARTITION_NODE)
111112
#define MCUBOOT_PRIMARY_START_ADDR DT_FIXED_PARTITION_ADDR(MCUBOOT_PRIMARY_NODE)
112113
#define MCUBOOT_SECONDARY_START_ADDR DT_FIXED_PARTITION_ADDR(MCUBOOT_SECONDARY_NODE)
114+
#define MCUBOOT_PRIMARY_END_ADDR (MCUBOOT_PRIMARY_START_ADDR + \
115+
DT_REG_SIZE(MCUBOOT_PRIMARY_NODE))
116+
#define MCUBOOT_SECONDARY_END_ADDR (MCUBOOT_SECONDARY_START_ADDR + \
117+
DT_REG_SIZE(MCUBOOT_SECONDARY_NODE))
113118

114119
#if MCUBOOT_PRIMARY_START_ADDR == MCUBOOT_SECONDARY_START_ADDR
115120
#error Primary and secondary partitions cannot have the same address.
@@ -118,9 +123,15 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_LOG_LEVEL);
118123
#define MCUBOOT_PRIMARY_SLOT_ID DT_FIXED_PARTITION_ID(MCUBOOT_PRIMARY_NODE)
119124
#define MCUBOOT_SECONDARY_SLOT_ID DT_FIXED_PARTITION_ID(MCUBOOT_SECONDARY_NODE)
120125

121-
#if CODE_PARTITION_START_ADDR == MCUBOOT_PRIMARY_START_ADDR
126+
/* Use range check to allow for placing MCUboot header in a separate partition,
127+
* so the application code partition is not an alias for the MCUboot partition,
128+
* but a subpartition of the MCUboot partition.
129+
*/
130+
#if (CODE_PARTITION_START_ADDR >= MCUBOOT_PRIMARY_START_ADDR) && \
131+
(CODE_PARTITION_START_ADDR < MCUBOOT_PRIMARY_END_ADDR)
122132
#define DFU_SLOT_ID MCUBOOT_SECONDARY_SLOT_ID
123-
#elif CODE_PARTITION_START_ADDR == MCUBOOT_SECONDARY_START_ADDR
133+
#elif (CODE_PARTITION_START_ADDR >= MCUBOOT_SECONDARY_START_ADDR) && \
134+
(CODE_PARTITION_START_ADDR < MCUBOOT_SECONDARY_END_ADDR)
124135
#define DFU_SLOT_ID MCUBOOT_PRIMARY_SLOT_ID
125136
#else
126137
#error Missing partition definitions in DTS.

0 commit comments

Comments
 (0)