Skip to content

boot: zephyr: kconfig: Default to swap using offset for nRF devices #2266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion boot/boot_serial/src/boot_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,7 @@ bs_list(char *buf, int len)
zcbor_list_start_encode(cbor_state, 5);
image_index = 0;
IMAGES_ITER(image_index) {
#ifdef MCUBOOT_SERIAL_IMG_GRP_IMAGE_STATE
#if defined(MCUBOOT_SERIAL_IMG_GRP_IMAGE_STATE) || defined(MCUBOOT_SWAP_USING_OFFSET)
int swap_status = boot_swap_type_multi(image_index);
#endif

Expand Down
2 changes: 1 addition & 1 deletion boot/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -397,14 +397,14 @@ config BOOT_VALIDATE_SLOT0_ONCE

config BOOT_PREFER_SWAP_OFFSET
bool "Prefer the newer swap offset algorithm"
default y if SOC_FAMILY_NORDIC_NRF
Copy link
Contributor

@butok butok Apr 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make it default for all platforms?
By adding: default y if !$(dt_nodelabel_enabled,scratch_partition)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not been made the default for all platforms due to the sector size requirements, if a device has equal sizes for slot 0 and slot 1 then it will work (but is not ideal) but if it has the swap using move ideal setup of slot 0 being larger than slot 1, it will fail, so has been left as swap using move for default for now

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if a device has equal sizes for slot 0 and slot 1 then it will work (but is not ideal)

Using optimized slot sizes is broken with the latest mcuboot: zephyrproject-rtos/zephyr#88850
It seems, I need to switch to equal slot sizes (at least for NXP) to make it work for all modes, even if it's not optimal.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That has been fixed efa3039 but has not been pulled into zephyr yet

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That has been fixed efa3039 but has not been pulled into zephyr yet

Great! Thank you.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That has been fixed efa3039 but has not been pulled into zephyr yet

Just tried. Unfortunately, it does not fix the optimized partitions swap move issue.
Still writes "W: Cannot upgrade: not a compatible amount of sectors"

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what board/config is used?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

having a look at frdm_ke17z it looks like it should work, would be just under 2K for swap status fields so not sure why it throws an error, would suggest enabling debug logs for MCUboot and seeing what is printed, then setting the number of sectors for each slot to the same and seeing what the non-optimal message says

Copy link
Contributor

@butok butok Apr 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

having a look at frdm_ke17z it looks like it should work, would be just under 2K for swap status fields so not sure why it throws an error, would suggest enabling debug logs for MCUboot and seeing what is printed, then setting the number of sectors for each slot to the same and seeing what the non-optimal message says

For example for frdm_mcxw71, it has Flash total size 1M , 8KB erase and 16B write. Partitioned to:

&flash {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;
		/* The MCUBoot swap-move algorithm uses the last 2 sectors
		 * of the primary slot0 for swap status and move.
		 */
		boot_partition: partition@0 {
			reg = <0x0 DT_SIZE_K(64)>;
		};
		slot0_partition: partition@10000 {
			reg = <0x10000 (DT_SIZE_K(416) + DT_SIZE_K(16))>;
		};
		slot1_partition: partition@7C000 {
			reg = <0x7C000 DT_SIZE_K(416)>;
		};
		storage_partition: partition@E4000 {
			reg = <0xE4000 DT_SIZE_K(112)>;
		};
	};
};

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW: Is see another PR fix is coming "boot: bootutil: Fix max image size computation for swap-move and swap-offset" #2283

help
If y, the BOOT_IMAGE_UPGRADE_MODE will default to using "offset" instead of "scratch".
This is a separate bool config option, because Kconfig doesn't allow defaults to be
overridden in choice options. Most devices should be using swap using offset mode.

config BOOT_PREFER_SWAP_MOVE
bool "Prefer the newer swap move algorithm"
default y if SOC_FAMILY_NORDIC_NRF
default y if !$(dt_nodelabel_enabled,scratch_partition)
help
If y, the BOOT_IMAGE_UPGRADE_MODE will default to using
Expand Down
Loading