Skip to content
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

suit: nRF9280 SUIT support #18496

Open
wants to merge 3 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
1 change: 1 addition & 0 deletions cmake/sysbuild/suit.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,7 @@ function(suit_create_package)
"${DEFAULT_BINARY_DIR}/zephyr"
--zephyr-base ${ZEPHYR_BASE}
--config-file "${PROJECT_BINARY_DIR}/.config"
--soc ${SB_CONFIG_SOC}
${CORE_ARGS}
)
set_property(
Expand Down
7 changes: 5 additions & 2 deletions cmake/sysbuild/suit_provisioning.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -227,12 +227,15 @@ function (generate_mpi_area area)
message(INFO " Generate merged MPI for ${area} (${output})")
endfunction()

if(DEFINED SB_CONFIG_SOC_SERIES_NRF54HX)
if((DEFINED SB_CONFIG_SOC_SERIES_NRF54HX) OR
(DEFINED SB_CONFIG_SOC_SERIES_NRF92X))
configure_storage_address_cache()
endif() # SB_CONFIG_SOC_SERIES_NRF54HX
endif() # SB_CONFIG_SOC_SERIES_NRF54HX OR SB_CONFIG_SOC_SERIES_NRF92X

if(DEFINED SB_CONFIG_SUIT_MPI_GENERATE)
if(DEFINED SB_CONFIG_SUIT_MPI_SOC_NRF54H20)
include(${CMAKE_CURRENT_LIST_DIR}/suit_provisioning_nrf54h20.cmake)
elseif(DEFINED SB_CONFIG_SUIT_MPI_SOC_NRF9280)
include(${CMAKE_CURRENT_LIST_DIR}/suit_provisioning_nrf9280.cmake)
endif() # SB_CONFIG_SUIT_MPI_SOC_NRF54H20
endif() # SB_CONFIG_SUIT_MPI_GENERATE
47 changes: 47 additions & 0 deletions cmake/sysbuild/suit_provisioning_nrf9280.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#
# Copyright (c) 2024 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
include(${CMAKE_CURRENT_LIST_DIR}/suit_utilities.cmake)

# List all manifest roles.
# The function internally checks if the enabling symbol is defined.
# If role is enabled, the function verifies if all required options are defined.

generate_mpi_hex(ROOT)
generate_mpi_hex(APP_RECOVERY)
generate_mpi_hex(APP_LOCAL_1)
generate_mpi_hex(APP_LOCAL_2)
generate_mpi_hex(APP_LOCAL_3)
generate_mpi_area(
APP_AREA
ROOT
APP_RECOVERY
APP_LOCAL_1
APP_LOCAL_2
APP_LOCAL_3
)

generate_mpi_hex(RAD_RECOVERY)
generate_mpi_hex(RAD_LOCAL_1)
generate_mpi_hex(RAD_LOCAL_2)
generate_mpi_area(
RAD_AREA
RAD_RECOVERY
RAD_LOCAL_1
RAD_LOCAL_2
)

if(SB_CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE)
suit_add_merge_hex_file(
FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH}
DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH}
TARGET "application"
)
suit_add_merge_hex_file(
FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH}
DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH}
TARGET "radio"
)
endif()
172 changes: 172 additions & 0 deletions config/suit/templates/nrf9280/default/v1/app_envelope.yaml.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %}
{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF9280_sample_app') %}
SUIT_Envelope_Tagged:
suit-authentication-wrapper:
SuitDigest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-manifest:
suit-manifest-version: 1
{%- if APP_LOCAL_1_SEQ_NUM is defined %}
suit-manifest-sequence-number: {{ APP_LOCAL_1_SEQ_NUM }}
{%- elif DEFAULT_SEQ_NUM is defined %}
suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }}
{%- else %}
suit-manifest-sequence-number: 1
{%- endif %}
suit-common:
suit-components:
- - MEM
- {{ application['dt'].label2node['cpu'].unit_addr }}
- {{ get_absolute_address(application['dt'].chosen_nodes['zephyr,code-partition']) }}
- {{ application['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }}
- - CAND_IMG
- 0
suit-shared-sequence:
- suit-directive-set-component-index: 0
- suit-directive-override-parameters:
suit-parameter-vendor-identifier:
RFC4122_UUID: {{ mpi_application_vendor_name }}
suit-parameter-class-identifier:
RFC4122_UUID:
namespace: {{ mpi_application_vendor_name }}
name: {{ mpi_application_class_name }}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
file: {{ application['binary'] }}
suit-parameter-image-size:
file: {{ application['binary'] }}
- suit-condition-vendor-identifier:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- suit-condition-class-identifier:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
suit-validate:
- suit-directive-set-component-index: 0
# In the case of streaming operations it is worth to retry them at least once.
# This increases the robustness against bit flips on the transport,
# for example when storing the data on an external memory device.
# The suit-directive-try-each will complete on the first successful subsequence.
- suit-directive-try-each:
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
suit-invoke:
- suit-directive-set-component-index: 0
- suit-directive-invoke:
- suit-send-record-failure

{%- if APP_LOCAL_1_VERSION is defined %}
suit-current-version: {{ APP_LOCAL_1_VERSION }}
{%- elif DEFAULT_VERSION is defined %}
suit-current-version: {{ DEFAULT_VERSION }}
{%- endif %}

suit-install:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ application['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
file: {{ application['binary'] }}
- suit-directive-fetch:
- suit-send-record-failure
- suit-directive-try-each:
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- suit-directive-set-component-index: 0
- suit-directive-override-parameters:
suit-parameter-source-component: 1
# When copying the data it is worth to retry the sequence of
# suit-directive-copy and suit-condition-image-match at least once.
# If a bit flip occurs, it might be due to a transport issue, not
# a corrupted candidate image. In this case the bit flip is recoverable
# and it is worth retrying the operation.
# The suit-directive-try-each will complete on the first successful subsequence.
- suit-directive-try-each:
- - suit-directive-copy:
- suit-send-record-failure
- suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- - suit-directive-copy:
- suit-send-record-failure
- suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
suit-text:
suit-digest-algorithm-id: cose-alg-sha-256

suit-candidate-verification:
- suit-directive-set-component-index: 1
- suit-directive-override-parameters:
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
{%- else %}
suit-parameter-uri: '#{{ application['name'] }}'
{%- endif %}
suit-parameter-image-digest:
suit-digest-algorithm-id: cose-alg-sha-256
suit-digest-bytes:
file: {{ application['binary'] }}
- suit-directive-fetch:
- suit-send-record-failure
- suit-directive-try-each:
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure
- - suit-condition-image-match:
- suit-send-record-success
- suit-send-record-failure
- suit-send-sysinfo-success
- suit-send-sysinfo-failure

suit-manifest-component-id:
- INSTLD_MFST
- RFC4122_UUID:
namespace: {{ mpi_application_vendor_name }}
name: {{ mpi_application_class_name }}
suit-text:
en:
'["MEM", {{ application['dt'].label2node['cpu'].unit_addr }}, {{ get_absolute_address(application['dt'].chosen_nodes['zephyr,code-partition']) }}, {{ application['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }}]':
suit-text-vendor-name: Nordic Semiconductor ASA
suit-text-model-name: nRF9280_cpuapp
suit-text-vendor-domain: nordicsemi.com
suit-text-model-info: The nRF9280 application core
suit-text-component-description: Sample application core FW
suit-text-component-version: v1.0.0
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
suit-integrated-payloads:
'#{{ application['name'] }}': {{ application['binary'] }}
{%- endif %}
Loading