Skip to content

Commit 215b616

Browse files
committed
nrf_desktop: Fix checks for the current DFU slot
Do not use the DT_FIXED_PARTITION_ADDR for now and allow to start the FW core in the middle of the MCUboot slot. Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent 14e6931 commit 215b616

File tree

1 file changed

+17
-5
lines changed
  • applications/nrf_desktop/src/modules

1 file changed

+17
-5
lines changed

applications/nrf_desktop/src/modules/dfu.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,19 @@ 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-
#define CODE_PARTITION_START_ADDR DT_FIXED_PARTITION_ADDR(CODE_PARTITION_NODE)
111-
#define MCUBOOT_PRIMARY_START_ADDR DT_FIXED_PARTITION_ADDR(MCUBOOT_PRIMARY_NODE)
112-
#define MCUBOOT_SECONDARY_START_ADDR DT_FIXED_PARTITION_ADDR(MCUBOOT_SECONDARY_NODE)
110+
111+
/* DT_FIXED_PARTITION_ADDR is not supported on nRF54H20.
112+
* See: https://github.com/zephyrproject-rtos/zephyr/pull/96808
113+
*/
114+
#define PARTITION_ADDR_FIXED(node) (DT_REG_ADDR(node_id) + \
115+
DT_REG_ADDR(DT_GPARENT(node_id)))
116+
#define CODE_PARTITION_START_ADDR PARTITION_ADDR_FIXED(CODE_PARTITION_NODE)
117+
#define MCUBOOT_PRIMARY_START_ADDR PARTITION_ADDR_FIXED(MCUBOOT_PRIMARY_NODE)
118+
#define MCUBOOT_SECONDARY_START_ADDR PARTITION_ADDR_FIXED(MCUBOOT_SECONDARY_NODE)
119+
#define MCUBOOT_PRIMARY_END_ADDR (MCUBOOT_PRIMARY_START_ADDR + \
120+
DT_REG_SIZE(MCUBOOT_PRIMARY_NODE0))
121+
#define MCUBOOT_SECOARY_END_ADDR (MCUBOOT_SECONDARY_START_ADDR + \
122+
DT_REG_SIZE(MCUBOOT_SECONDARY_NODE0))
113123

114124
#if MCUBOOT_PRIMARY_START_ADDR == MCUBOOT_SECONDARY_START_ADDR
115125
#error Primary and secondary partitions cannot have the same address.
@@ -118,9 +128,11 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_LOG_LEVEL);
118128
#define MCUBOOT_PRIMARY_SLOT_ID DT_FIXED_PARTITION_ID(MCUBOOT_PRIMARY_NODE)
119129
#define MCUBOOT_SECONDARY_SLOT_ID DT_FIXED_PARTITION_ID(MCUBOOT_SECONDARY_NODE)
120130

121-
#if CODE_PARTITION_START_ADDR == MCUBOOT_PRIMARY_START_ADDR
131+
#if (CODE_PARTITION_START_ADDR >= MCUBOOT_PRIMARY_START_ADDR) &&
132+
(CODE_PARTITION_START_ADDR < MCUBOOT_PRIMARY_END_ADDR)
122133
#define DFU_SLOT_ID MCUBOOT_SECONDARY_SLOT_ID
123-
#elif CODE_PARTITION_START_ADDR == MCUBOOT_SECONDARY_START_ADDR
134+
#elif (CODE_PARTITION_START_ADDR >= MCUBOOT_SECONDARY_START_ADDR) &&
135+
(CODE_PARTITION_START_ADDR < MCUBOOT_SECONDARY_END_ADDR)
124136
#define DFU_SLOT_ID MCUBOOT_PRIMARY_SLOT_ID
125137
#else
126138
#error Missing partition definitions in DTS.

0 commit comments

Comments
 (0)