diff --git a/ncs/Kconfig b/ncs/Kconfig index fd87c153..a33999ce 100755 --- a/ncs/Kconfig +++ b/ncs/Kconfig @@ -152,4 +152,17 @@ config SUIT_SECDOM_VERSION Version of Secdom FW to be logged during its startup. default "0.0.1" +config SUIT_ENVELOPE_SYSCTRL + bool "Create SUIT files required by sysctrl" + help + TODO: describe + default y # TODO: Find suitable (sic!) condition + +config SUIT_ENVELOPE_SYSCTRL_TEMPLATE + string "Location of template file for preparing sysctrl yaml envelope" + # depends on !HW_REVISION_SOC1 + help + Jinja2 template file used to generate yaml file for sysctrl domain update. + default "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/ncs/sysctrl_envelope.yaml.jinja2" + endif # SUIT_ENVELOPE diff --git a/ncs/build.py b/ncs/build.py index a5c0add2..dc4b4370 100755 --- a/ncs/build.py +++ b/ncs/build.py @@ -57,11 +57,13 @@ def render_template(template_location, data): return template.render(data) -def get_absolute_address(node): +def get_absolute_address(node, use_offset: bool = True): """Get absolute address of passed node.""" # fixme: hardcoded value for parent node due to bug in DTS # return node.parent.parent.regs[0].addr + node.regs[0].addr - return 0xE000000 + node.regs[0].addr + if use_offset: + return 0xE000000 + node.regs[0].addr + return node.regs[0].addr parent_parser = ArgumentParser(add_help=False) diff --git a/ncs/sysctrl_envelope.yaml.jinja2 b/ncs/sysctrl_envelope.yaml.jinja2 new file mode 100644 index 00000000..f347ee86 --- /dev/null +++ b/ncs/sysctrl_envelope.yaml.jinja2 @@ -0,0 +1,76 @@ +SUIT_Envelope_Tagged: + suit-authentication-wrapper: + SuitDigest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-manifest: + suit-manifest-version: 1 + suit-manifest-sequence-number: {{ version }} + suit-common: + suit-components: + # [0], RAM + - - MEM + - {{ sysctrl['dt'].label2node['cpu'].unit_addr }} + - {{ get_absolute_address(sysctrl['dt'].chosen_nodes['zephyr,flash'], use_offset=False) }} + - {{ sysctrl['dt'].chosen_nodes['zephyr,flash'].regs[0].size }} + # [1], MRAM + - - MEM + - -1 + - {{ get_absolute_address(sysctrl['dt'].label2node['sysctrl_mram0'], use_offset=False) }} + - {{ sysctrl['dt'].label2node['sysctrl_mram0'].regs[0].size }} + # [2], Pseudo-component, used to verify the integrity of te incoming image. + # It is used as a target component for all fetch operations that download firmware. + - - CAND_IMG + - 0 + suit-shared-sequence: + - suit-directive-set-component-index: [0, 1, 2] + - suit-directive-override-parameters: + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ sysctrl['binary'] }} + suit-validate: + - suit-directive-set-component-index: 1 # '[MEM, -1, 0x0E080000, 0x20000]', MRAM + - suit-directive-override-parameters: + suit-parameter-image-size: + file: {{ sysctrl['binary'] }} + #- suit-condition-image-match: [] + suit-load: + - suit-directive-set-component-index: 1 # '[MEM, -1, 0x0E080000, 0x20000]', MRAM + - suit-directive-override-parameters: + suit-parameter-image-size: + file: {{ sysctrl['binary'] }} + - suit-directive-set-component-index: 0 # '[MEM, 12, 0x0E060000, 0x20000]', RAM + - suit-directive-override-parameters: + suit-parameter-source-component: 1 # '[MEM, -1, 0x0E080000, 0x20000]', MRAM as source + - suit-directive-copy: [] + #- suit-condition-image-match: [] + suit-invoke: + - suit-directive-set-component-index: 0 # '[MEM, 12, 0x0E060000, 0x20000]', RAM + - suit-directive-override-parameters: + suit-parameter-image-size: + file: {{ sysctrl['binary'] }} + #- suit-condition-image-match: [] + - suit-directive-invoke: [] + suit-payload-fetch: + - suit-directive-set-component-index: 2 # 'CAND_IMG/0' + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ sysctrl['name'] }}' + - suit-directive-fetch: [] + - suit-condition-image-match: [] + suit-install: + - suit-directive-set-component-index: 2 # 'CAND_IMG/0' + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ sysctrl['name'] }}' + - suit-directive-fetch: [] + - suit-condition-image-match: [] + - suit-directive-set-component-index: 1 # '[MEM, -1, 0x0E080000, 0x20000]', MRAM + - suit-directive-override-parameters: + suit-parameter-source-component: 2 # 'CAND_IMG/0' as source + - suit-directive-copy: [] + suit-manifest-component-id: + - INSTLD_MFST + - RFC4122_UUID: + namespace: nordicsemi.com + name: nRF54H20_sys + suit-integrated-payloads: + '#{{ sysctrl['name'] }}': {{ sysctrl['binary'] }} diff --git a/suit_generator/suit/manifest.py b/suit_generator/suit/manifest.py index 2bd3413c..6311cacb 100644 --- a/suit_generator/suit/manifest.py +++ b/suit_generator/suit/manifest.py @@ -11,6 +11,7 @@ from os.path import getsize from suit_generator.suit.types.common import ( + SuitInt, SuitUint, SuitKeyValue, SuitKeyValueUnnamed, @@ -268,7 +269,7 @@ class SuitCommand(SuitUnion): class SuitComponentIdentifierPart(SuitUnion): """Abstract element to define possible sub-elements.""" - _metadata = Metadata(children=[SuitUUID, SuitBchar, cbstr(SuitTstr), cbstr(SuitUint), SuitBstr]) + _metadata = Metadata(children=[SuitUUID, SuitBchar, cbstr(SuitTstr), cbstr(SuitInt), SuitBstr]) class SuitComponentIdentifier(SuitList):