Skip to content

Commit b828acb

Browse files
ahasztagrlubos
authored andcommitted
suit: Separated recovery application cache partitions
This commits allows for creation of a separate DFU cache partitions file holding recovery images. Signed-off-by: Artur Hadasz <[email protected]>
1 parent c1cdcd7 commit b828acb

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed

cmake/sysbuild/suit.cmake

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,14 @@ function(suit_generate_recovery_dfu_zip)
110110
GLOBAL PROPERTY
111111
SUIT_RECOVERY_DFU_ARTIFACTS
112112
)
113+
get_property(
114+
additional_script_params
115+
GLOBAL PROPERTY
116+
SUIT_RECOVERY_DFU_ZIP_ADDITIONAL_SCRIPT_PARAMS
117+
)
113118

114119
set(root_name "${SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_ARTIFACT_NAME}.suit")
115-
set(script_params "${root_name}type=suit-envelope")
120+
set(script_params "${root_name}type=suit-envelope;${additional_script_params}")
116121

117122
include(${ZEPHYR_NRF_MODULE_DIR}/cmake/fw_zip.cmake)
118123

@@ -321,17 +326,30 @@ function(suit_create_package)
321326
)
322327
endforeach()
323328

324-
# First parse which images should be extracted to which cache partition
329+
# First parse which images should be extracted to which cache partitions
325330
set(DFU_CACHE_PARTITIONS_USED "")
331+
set(RECOVERY_DFU_CACHE_PARTITIONS_USED "")
332+
326333
foreach(image ${IMAGES})
327334
sysbuild_get(EXTRACT_TO_CACHE IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE KCONFIG)
328335
if(EXTRACT_TO_CACHE)
329336
sysbuild_get(CACHE_PARTITION_NUM IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_PARTITION KCONFIG)
330-
list(APPEND DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM})
331-
list(APPEND SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image})
337+
338+
unset(CONFIG_SUIT_RECOVERY)
339+
sysbuild_get(CONFIG_SUIT_RECOVERY IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG)
340+
341+
if(CONFIG_SUIT_RECOVERY)
342+
list(APPEND RECOVERY_DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM})
343+
list(APPEND SUIT_RECOVERY_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image})
344+
else()
345+
list(APPEND DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM})
346+
list(APPEND SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image})
347+
endif()
332348
endif()
333349
endforeach()
350+
334351
list(REMOVE_DUPLICATES DFU_CACHE_PARTITIONS_USED)
352+
list(REMOVE_DUPLICATES RECOVERY_DFU_CACHE_PARTITIONS_USED)
335353

336354
# Then create the cache partitions
337355
foreach(CACHE_PARTITION_NUM ${DFU_CACHE_PARTITIONS_USED})
@@ -353,10 +371,36 @@ function(suit_create_package)
353371
"${CACHE_CREATE_ARGS}"
354372
"${SUIT_ROOT_DIRECTORY}dfu_cache_partition_${CACHE_PARTITION_NUM}.bin"
355373
${CACHE_PARTITION_NUM}
374+
FALSE
356375
)
357376
endforeach()
358377

359378
if(SB_CONFIG_SUIT_BUILD_RECOVERY)
379+
380+
# Create cache partitions for the recovery images
381+
foreach(CACHE_PARTITION_NUM ${RECOVERY_DFU_CACHE_PARTITIONS_USED})
382+
set(CACHE_CREATE_ARGS "")
383+
foreach(image ${SUIT_RECOVERY_CACHE_PARTITION_${CACHE_PARTITION_NUM}})
384+
sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE)
385+
sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG)
386+
sysbuild_get(IMAGE_CACHE_URI IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI KCONFIG)
387+
list(APPEND CACHE_CREATE_ARGS
388+
"--input" "\"${IMAGE_CACHE_URI},${BINARY_DIR}/zephyr/${BINARY_FILE}.bin\""
389+
)
390+
endforeach()
391+
392+
if(SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE)
393+
list(APPEND CACHE_CREATE_ARGS "--eb-size" "${SUIT_DFU_CACHE_PARTITION_${CACHE_PARTITION_NUM}_EB_SIZE}")
394+
endif()
395+
396+
suit_create_cache_partition(
397+
"${CACHE_CREATE_ARGS}"
398+
"${SUIT_ROOT_DIRECTORY}dfu_cache_partition_recovery_${CACHE_PARTITION_NUM}.bin"
399+
${CACHE_PARTITION_NUM}
400+
TRUE
401+
)
402+
endforeach()
403+
360404
suit_get_manifest(${SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_TEMPLATE_FILENAME} INPUT_APP_RECOVERY_ENVELOPE_JINJA_FILE)
361405

362406
# create app recovery envelope if defined

cmake/sysbuild/suit_utilities.cmake

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function(suit_create_envelope input_file output_file create_signature)
8484
endif()
8585
endfunction()
8686

87-
function(suit_create_cache_partition args output_file partition_num)
87+
function(suit_create_cache_partition args output_file partition_num recovery)
8888

8989
list(APPEND args "--output-file" "${output_file}")
9090

@@ -98,6 +98,13 @@ function(suit_create_cache_partition args output_file partition_num)
9898

9999
get_filename_component(output_file_name ${output_file} NAME)
100100

101-
set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ARTIFACTS ${output_file})
102-
set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ZIP_ADDITIONAL_SCRIPT_PARAMS "${output_file_name}type=cache;${output_file_name}partition=${partition_num};")
101+
if (recovery)
102+
set_property(GLOBAL APPEND PROPERTY SUIT_RECOVERY_DFU_ARTIFACTS ${output_file})
103+
set_property(GLOBAL APPEND PROPERTY SUIT_RECOVERY_DFU_ZIP_ADDITIONAL_SCRIPT_PARAMS
104+
"${output_file_name}type=cache;${output_file_name}partition=${partition_num};")
105+
else()
106+
set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ARTIFACTS ${output_file})
107+
set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ZIP_ADDITIONAL_SCRIPT_PARAMS
108+
"${output_file_name}type=cache;${output_file_name}partition=${partition_num};")
109+
endif()
103110
endfunction()

config/suit/templates/nrf54h20/default/v1/rad_recovery_envelope.yaml.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ SUIT_Envelope_Tagged:
101101
- RFC4122_UUID:
102102
namespace: {{ mpi_rad_recovery_vendor_name }}
103103
name: {{ mpi_rad_recovery_class_name }}
104-
suit-integrated-payloads:
105104
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in rad_recovery['config'] or rad_recovery['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
105+
suit-integrated-payloads:
106106
'#{{ rad_recovery['name'] }}': {{ rad_recovery['binary'] }}
107107
{%- endif %}

0 commit comments

Comments
 (0)