Skip to content

Commit 43ac6f6

Browse files
committed
sysbuild: HW-based rollback protection on nRF54H20
Allow to enable HW-based rollback protection on nRF54H20. Ref: NCSDK-36295 Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent 1817b91 commit 43ac6f6

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

modules/mcuboot/Kconfig

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ if BOOTLOADER_MCUBOOT
44

55
menuconfig MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION
66
bool "Downgrade prevention using hardware security counters"
7-
depends on SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X || SOC_SERIES_NRF54LX
7+
depends on SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X || SOC_SERIES_NRF54LX || SOC_SERIES_NRF54HX
88
help
99
This option can be enabled by the application and will ensure
1010
that the MCUBOOT_HW_DOWNGRADE_PREVENTION Kconfig option is
@@ -17,6 +17,7 @@ config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS
1717
default 240
1818
range 2 288 if SOC_SERIES_NRF54LX
1919
range 2 300
20+
depends on !SOC_SERIES_NRF54HX
2021
help
2122
When MCUBOOT_HW_DOWNGRADE_PREVENTION is enabled, MCUboot will use
2223
one hardware counter for each updatable image (UPDATEABLE_IMAGE_NUMBER).
@@ -29,7 +30,8 @@ config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS
2930
config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE
3031
int "Security counter value"
3132
default 1
32-
range 1 65535
33+
range 1 65535 if !SOC_SERIES_NRF54HX
34+
range 1 4294967295 if SOC_SERIES_NRF54HX
3335
help
3436
The security counter value for this image.
3537
This is the value that will be passed to the --security-counter

sysbuild/CMakeLists.txt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,11 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
381381
set_config_bool(mcuboot CONFIG_BOOT_FIH_PROFILE_DEFAULT_LOW y)
382382
endif()
383383

384-
if(SB_CONFIG_PARTITION_MANAGER OR SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP OR SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT OR SB_CONFIG_MCUBOOT_COMPRESSED_IMAGE_SUPPORT OR (SB_CONFIG_SOC_SERIES_NRF54LX AND SB_CONFIG_BOOT_ENCRYPTION))
384+
if(SB_CONFIG_PARTITION_MANAGER OR SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP
385+
OR SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT
386+
OR SB_CONFIG_MCUBOOT_COMPRESSED_IMAGE_SUPPORT
387+
OR (SB_CONFIG_SOC_SERIES_NRF54LX AND SB_CONFIG_BOOT_ENCRYPTION)
388+
OR SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)
385389
# Use NCS signing script with support for PM or direct XIP (NCS specific features)
386390
if(SB_CONFIG_QSPI_XIP_SPLIT_IMAGE)
387391
set(${DEFAULT_IMAGE}_SIGNING_SCRIPT "${ZEPHYR_NRF_MODULE_DIR}/cmake/sysbuild/image_signing_split.cmake" CACHE INTERNAL "MCUboot signing script" FORCE)
@@ -469,17 +473,26 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
469473

470474
if(SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)
471475
set_config_bool(mcuboot CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION y)
472-
set_config_bool(mcuboot CONFIG_SECURE_BOOT_STORAGE y)
473-
set_config_bool(mcuboot CONFIG_SECURE_BOOT_CRYPTO y)
476+
477+
# nRF54H20 uses SDFW-based counters.
478+
# There is no need for a dedicated secure boot storage implementation.
479+
if(NOT SB_CONFIG_SOC_SERIES_NRF54HX)
480+
set_config_bool(mcuboot CONFIG_SECURE_BOOT_STORAGE y)
481+
set_config_bool(mcuboot CONFIG_SECURE_BOOT_CRYPTO y)
482+
endif()
474483
else()
475484
set_config_bool(mcuboot CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION n)
476485
endif()
477486

478487
foreach(image ${updateable_images})
479488
if(SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)
480489
set_config_bool(${image} CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION y)
481-
set_config_int(${image} CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS ${SB_CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS})
482490
set_config_int(${image} CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE ${SB_CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE})
491+
492+
# The number of slots is unlimited in the current SDFW-based implementation.
493+
if(SB_CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS)
494+
set_config_int(${image} CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS ${SB_CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS})
495+
endif()
483496
else()
484497
set_config_bool(${image} CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION n)
485498
endif()
@@ -816,7 +829,10 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_post_cmake)
816829

817830
include_packaging()
818831

819-
if(SB_CONFIG_SECURE_BOOT OR SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)
832+
# nRF54H20 uses SDFW-based counters.
833+
# There is no need to generate a provisioning hex file.
834+
if(SB_CONFIG_SECURE_BOOT OR (SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION AND NOT
835+
SB_CONFIG_SOC_SERIES_NRF54HX))
820836
include_provision_hex()
821837
endif()
822838

sysbuild/Kconfig.mcuboot

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ config MCUBOOT_BUILD_DIRECT_XIP_VARIANT
3232

3333
menuconfig MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION
3434
bool "Downgrade prevention using hardware security counters"
35-
depends on (SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X || SOC_SERIES_NRF54LX)
35+
depends on (SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X || SOC_SERIES_NRF54LX || SOC_SERIES_NRF54HX)
3636
depends on !SECURE_BOOT_APPCORE
3737
depends on !QSPI_XIP_SPLIT_IMAGE
3838
help
@@ -48,7 +48,9 @@ if MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION
4848
config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS
4949
int "Number of available hardware counter slots"
5050
default 240
51+
range 2 288 if SOC_SERIES_NRF54LX
5152
range 2 300
53+
depends on !SOC_SERIES_NRF54HX
5254
help
5355
When MCUBOOT_HW_DOWNGRADE_PREVENTION is enabled, MCUboot will use one hardware counter
5456
for each updatable image (UPDATEABLE_IMAGE_NUMBER). This configuration specifies how many
@@ -60,7 +62,8 @@ config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS
6062
config MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE
6163
int "Security counter value"
6264
default 1
63-
range 1 65535
65+
range 1 65535 if !SOC_SERIES_NRF54HX
66+
range 1 4294967295 if SOC_SERIES_NRF54HX
6467
help
6568
The security counter value for this image.
6669
This is the value that will be passed to the --security-counter parameter of imgtool.py

west.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ manifest:
126126
compare-by-default: true
127127
- name: mcuboot
128128
repo-path: sdk-mcuboot
129-
revision: 9e03c89729786f18ef9c1849015ff17eca8bae1c
129+
revision: pull/572/head
130130
path: bootloader/mcuboot
131131
- name: qcbor
132132
url: https://github.com/laurencelundblade/QCBOR

0 commit comments

Comments
 (0)