@@ -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