Skip to content

Commit 1ca722f

Browse files
parttimaacarlescufi
authored andcommitted
suit: nRF9280 SUIT support
Add SUIT support for nRF9280 EngB product. Signed-off-by: Tuomas Parttimaa <[email protected]>
1 parent 0e149bb commit 1ca722f

25 files changed

+3877
-15
lines changed

cmake/sysbuild/suit.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ function(suit_create_package)
578578
"${DEFAULT_BINARY_DIR}/zephyr"
579579
--zephyr-base ${ZEPHYR_BASE}
580580
--config-file "${PROJECT_BINARY_DIR}/.config"
581+
--soc ${SB_CONFIG_SOC}
581582
${CORE_ARGS}
582583
)
583584
set_property(

cmake/sysbuild/suit_provisioning.cmake

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,15 @@ function (generate_mpi_area area)
227227
message(INFO " Generate merged MPI for ${area} (${output})")
228228
endfunction()
229229

230-
if(DEFINED SB_CONFIG_SOC_SERIES_NRF54HX)
230+
if((DEFINED SB_CONFIG_SOC_SERIES_NRF54HX) OR
231+
(DEFINED SB_CONFIG_SOC_SERIES_NRF92X))
231232
configure_storage_address_cache()
232-
endif() # SB_CONFIG_SOC_SERIES_NRF54HX
233+
endif() # SB_CONFIG_SOC_SERIES_NRF54HX OR SB_CONFIG_SOC_SERIES_NRF92X
233234

234235
if(DEFINED SB_CONFIG_SUIT_MPI_GENERATE)
235236
if(DEFINED SB_CONFIG_SUIT_MPI_SOC_NRF54H20)
236237
include(${CMAKE_CURRENT_LIST_DIR}/suit_provisioning_nrf54h20.cmake)
238+
elseif(DEFINED SB_CONFIG_SUIT_MPI_SOC_NRF9280)
239+
include(${CMAKE_CURRENT_LIST_DIR}/suit_provisioning_nrf9280.cmake)
237240
endif() # SB_CONFIG_SUIT_MPI_SOC_NRF54H20
238241
endif() # SB_CONFIG_SUIT_MPI_GENERATE
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#
2+
# Copyright (c) 2024 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
#
6+
include(${CMAKE_CURRENT_LIST_DIR}/suit_utilities.cmake)
7+
8+
# List all manifest roles.
9+
# The function internally checks if the enabling symbol is defined.
10+
# If role is enabled, the function verifies if all required options are defined.
11+
12+
generate_mpi_hex(ROOT)
13+
generate_mpi_hex(APP_RECOVERY)
14+
generate_mpi_hex(APP_LOCAL_1)
15+
generate_mpi_hex(APP_LOCAL_2)
16+
generate_mpi_hex(APP_LOCAL_3)
17+
generate_mpi_area(
18+
APP_AREA
19+
ROOT
20+
APP_RECOVERY
21+
APP_LOCAL_1
22+
APP_LOCAL_2
23+
APP_LOCAL_3
24+
)
25+
26+
generate_mpi_hex(RAD_RECOVERY)
27+
generate_mpi_hex(RAD_LOCAL_1)
28+
generate_mpi_hex(RAD_LOCAL_2)
29+
generate_mpi_area(
30+
RAD_AREA
31+
RAD_RECOVERY
32+
RAD_LOCAL_1
33+
RAD_LOCAL_2
34+
)
35+
36+
if(SB_CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE)
37+
suit_add_merge_hex_file(
38+
FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH}
39+
DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH}
40+
TARGET "application"
41+
)
42+
suit_add_merge_hex_file(
43+
FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH}
44+
DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH}
45+
TARGET "radio"
46+
)
47+
endif()
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %}
2+
{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF9280_sample_app') %}
3+
SUIT_Envelope_Tagged:
4+
suit-authentication-wrapper:
5+
SuitDigest:
6+
suit-digest-algorithm-id: cose-alg-sha-256
7+
suit-manifest:
8+
suit-manifest-version: 1
9+
{%- if APP_LOCAL_1_SEQ_NUM is defined %}
10+
suit-manifest-sequence-number: {{ APP_LOCAL_1_SEQ_NUM }}
11+
{%- elif DEFAULT_SEQ_NUM is defined %}
12+
suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }}
13+
{%- else %}
14+
suit-manifest-sequence-number: 1
15+
{%- endif %}
16+
suit-common:
17+
suit-components:
18+
- - MEM
19+
- {{ application['dt'].label2node['cpu'].unit_addr }}
20+
- {{ get_absolute_address(application['dt'].chosen_nodes['zephyr,code-partition']) }}
21+
- {{ application['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }}
22+
- - CAND_IMG
23+
- 0
24+
suit-shared-sequence:
25+
- suit-directive-set-component-index: 0
26+
- suit-directive-override-parameters:
27+
suit-parameter-vendor-identifier:
28+
RFC4122_UUID: {{ mpi_application_vendor_name }}
29+
suit-parameter-class-identifier:
30+
RFC4122_UUID:
31+
namespace: {{ mpi_application_vendor_name }}
32+
name: {{ mpi_application_class_name }}
33+
suit-parameter-image-digest:
34+
suit-digest-algorithm-id: cose-alg-sha-256
35+
suit-digest-bytes:
36+
file: {{ application['binary'] }}
37+
suit-parameter-image-size:
38+
file: {{ application['binary'] }}
39+
- suit-condition-vendor-identifier:
40+
- suit-send-record-success
41+
- suit-send-record-failure
42+
- suit-send-sysinfo-success
43+
- suit-send-sysinfo-failure
44+
- suit-condition-class-identifier:
45+
- suit-send-record-success
46+
- suit-send-record-failure
47+
- suit-send-sysinfo-success
48+
- suit-send-sysinfo-failure
49+
suit-validate:
50+
- suit-directive-set-component-index: 0
51+
# In the case of streaming operations it is worth to retry them at least once.
52+
# This increases the robustness against bit flips on the transport,
53+
# for example when storing the data on an external memory device.
54+
# The suit-directive-try-each will complete on the first successful subsequence.
55+
- suit-directive-try-each:
56+
- - suit-condition-image-match:
57+
- suit-send-record-success
58+
- suit-send-record-failure
59+
- suit-send-sysinfo-success
60+
- suit-send-sysinfo-failure
61+
- - suit-condition-image-match:
62+
- suit-send-record-success
63+
- suit-send-record-failure
64+
- suit-send-sysinfo-success
65+
- suit-send-sysinfo-failure
66+
suit-invoke:
67+
- suit-directive-set-component-index: 0
68+
- suit-directive-invoke:
69+
- suit-send-record-failure
70+
71+
{%- if APP_LOCAL_1_VERSION is defined %}
72+
suit-current-version: {{ APP_LOCAL_1_VERSION }}
73+
{%- elif DEFAULT_VERSION is defined %}
74+
suit-current-version: {{ DEFAULT_VERSION }}
75+
{%- endif %}
76+
77+
suit-install:
78+
- suit-directive-set-component-index: 1
79+
- suit-directive-override-parameters:
80+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
81+
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
82+
{%- else %}
83+
suit-parameter-uri: '#{{ application['name'] }}'
84+
{%- endif %}
85+
suit-parameter-image-digest:
86+
suit-digest-algorithm-id: cose-alg-sha-256
87+
suit-digest-bytes:
88+
file: {{ application['binary'] }}
89+
- suit-directive-fetch:
90+
- suit-send-record-failure
91+
- suit-directive-try-each:
92+
- - suit-condition-image-match:
93+
- suit-send-record-success
94+
- suit-send-record-failure
95+
- suit-send-sysinfo-success
96+
- suit-send-sysinfo-failure
97+
- - suit-condition-image-match:
98+
- suit-send-record-success
99+
- suit-send-record-failure
100+
- suit-send-sysinfo-success
101+
- suit-send-sysinfo-failure
102+
- suit-directive-set-component-index: 0
103+
- suit-directive-override-parameters:
104+
suit-parameter-source-component: 1
105+
# When copying the data it is worth to retry the sequence of
106+
# suit-directive-copy and suit-condition-image-match at least once.
107+
# If a bit flip occurs, it might be due to a transport issue, not
108+
# a corrupted candidate image. In this case the bit flip is recoverable
109+
# and it is worth retrying the operation.
110+
# The suit-directive-try-each will complete on the first successful subsequence.
111+
- suit-directive-try-each:
112+
- - suit-directive-copy:
113+
- suit-send-record-failure
114+
- suit-condition-image-match:
115+
- suit-send-record-success
116+
- suit-send-record-failure
117+
- suit-send-sysinfo-success
118+
- suit-send-sysinfo-failure
119+
- - suit-directive-copy:
120+
- suit-send-record-failure
121+
- suit-condition-image-match:
122+
- suit-send-record-success
123+
- suit-send-record-failure
124+
- suit-send-sysinfo-success
125+
- suit-send-sysinfo-failure
126+
suit-text:
127+
suit-digest-algorithm-id: cose-alg-sha-256
128+
129+
suit-candidate-verification:
130+
- suit-directive-set-component-index: 1
131+
- suit-directive-override-parameters:
132+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %}
133+
suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}'
134+
{%- else %}
135+
suit-parameter-uri: '#{{ application['name'] }}'
136+
{%- endif %}
137+
suit-parameter-image-digest:
138+
suit-digest-algorithm-id: cose-alg-sha-256
139+
suit-digest-bytes:
140+
file: {{ application['binary'] }}
141+
- suit-directive-fetch:
142+
- suit-send-record-failure
143+
- suit-directive-try-each:
144+
- - suit-condition-image-match:
145+
- suit-send-record-success
146+
- suit-send-record-failure
147+
- suit-send-sysinfo-success
148+
- suit-send-sysinfo-failure
149+
- - suit-condition-image-match:
150+
- suit-send-record-success
151+
- suit-send-record-failure
152+
- suit-send-sysinfo-success
153+
- suit-send-sysinfo-failure
154+
155+
suit-manifest-component-id:
156+
- INSTLD_MFST
157+
- RFC4122_UUID:
158+
namespace: {{ mpi_application_vendor_name }}
159+
name: {{ mpi_application_class_name }}
160+
suit-text:
161+
en:
162+
'["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 }}]':
163+
suit-text-vendor-name: Nordic Semiconductor ASA
164+
suit-text-model-name: nRF9280_cpuapp
165+
suit-text-vendor-domain: nordicsemi.com
166+
suit-text-model-info: The nRF9280 application core
167+
suit-text-component-description: Sample application core FW
168+
suit-text-component-version: v1.0.0
169+
{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in application['config'] or application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %}
170+
suit-integrated-payloads:
171+
'#{{ application['name'] }}': {{ application['binary'] }}
172+
{%- endif %}

0 commit comments

Comments
 (0)