Skip to content

Commit

Permalink
suit: nRF9280 SUIT support
Browse files Browse the repository at this point in the history
Add SUIT support for nRF9280 EngB product.

Signed-off-by: Tuomas Parttimaa <[email protected]>
  • Loading branch information
parttimaa committed Jan 13, 2025
1 parent 24f8ed3 commit 3658d2e
Show file tree
Hide file tree
Showing 30 changed files with 3,906 additions and 14 deletions.
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

0 comments on commit 3658d2e

Please sign in to comment.