diff --git a/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 index 0a6f03f11861..6198ff8a3b19 100644 --- a/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 @@ -65,7 +65,7 @@ SUIT_Envelope_Tagged: - suit-send-sysinfo-failure suit-invoke: - suit-directive-set-component-index: 0 -{%- if 'CONFIG_SUIT_RECOVERY_BUTTON' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_RECOVERY_BUTTON] != '' %} +{%- if 'CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP] != '' %} - suit-directive-override-parameters: suit-parameter-invoke-args: suit-synchronous-invoke: True diff --git a/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 index b9af88070eaf..c7205e671aa0 100644 --- a/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 @@ -20,7 +20,7 @@ {%- set mpi_app_recovery_local_vendor_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_3_VENDOR_NAME']|default('nordicsemi.com') %} {%- set mpi_app_recovery_local_class_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_3_CLASS_NAME']|default('nRF54H20_sample_app_3') %} {%- endif %} -{%- if app_recovery_img is defined and 'CONFIG_SUIT_RECOVERY_BUTTON' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_RECOVERY_BUTTON] != '' %} +{%- if app_recovery_img is defined and 'CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP] != '' %} {%- set recovery_button_check_on_invoke = True %} {%- else %} {%- set recovery_button_check_on_invoke = False %} diff --git a/subsys/suit/CMakeLists.txt b/subsys/suit/CMakeLists.txt index 9141c2a1c850..8f4c3aba6d95 100644 --- a/subsys/suit/CMakeLists.txt +++ b/subsys/suit/CMakeLists.txt @@ -5,6 +5,7 @@ # add_subdirectory(provisioning) +add_subdirectory(app_tools) add_subdirectory_ifdef(CONFIG_SUIT plat_err) add_subdirectory_ifdef(CONFIG_SUIT memory_layout) add_subdirectory_ifdef(CONFIG_SUIT_ORCHESTRATOR orchestrator) @@ -21,5 +22,4 @@ add_subdirectory_ifdef(CONFIG_SUIT_ENVELOPE_INFO envelope_info) add_subdirectory_ifdef(CONFIG_SUIT_EXECUTION_MODE execution_mode) add_subdirectory_ifdef(CONFIG_SUIT_VALIDATOR validator) add_subdirectory_ifdef(CONFIG_SUIT_EVENTS events) -add_subdirectory_ifdef(CONFIG_SUIT_RECOVERY_BUTTON recovery_button) add_subdirectory_ifdef(CONFIG_SUIT_MANIFEST_VARIABLES manifest_variables) diff --git a/subsys/suit/Kconfig b/subsys/suit/Kconfig index ccc059cff390..e1f23ba342e4 100644 --- a/subsys/suit/Kconfig +++ b/subsys/suit/Kconfig @@ -200,7 +200,7 @@ rsource "execution_mode/Kconfig" rsource "memory_layout/Kconfig" rsource "validator/Kconfig" rsource "events/Kconfig" -rsource "recovery_button/Kconfig" +rsource "app_tools/Kconfig" rsource "manifest_variables/Kconfig" # Configure SUIT_LOG_LEVEL diff --git a/subsys/suit/app_tools/CMakeLists.txt b/subsys/suit/app_tools/CMakeLists.txt new file mode 100644 index 000000000000..9083e6ca0718 --- /dev/null +++ b/subsys/suit/app_tools/CMakeLists.txt @@ -0,0 +1,7 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +add_subdirectory_ifdef(CONFIG_SUIT_RECOVERY_BUTTON recovery_button) diff --git a/subsys/suit/app_tools/Kconfig b/subsys/suit/app_tools/Kconfig new file mode 100644 index 000000000000..c215407d2c70 --- /dev/null +++ b/subsys/suit/app_tools/Kconfig @@ -0,0 +1,16 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +config SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP + bool "Run recovery before main application on startup" + help + This Kconfig option should be set if the app_local_3 manifest application should be invoked + on startup before the main application. + This is useful if a companion image (most commonly the same iamge as the recovery application + core image) is to be used for checking conditions (such as checking + if a button is pressed) and optionally entering the recovery mode. + +rsource "recovery_button/Kconfig" diff --git a/subsys/suit/recovery_button/CMakeLists.txt b/subsys/suit/app_tools/recovery_button/CMakeLists.txt similarity index 100% rename from subsys/suit/recovery_button/CMakeLists.txt rename to subsys/suit/app_tools/recovery_button/CMakeLists.txt diff --git a/subsys/suit/recovery_button/Kconfig b/subsys/suit/app_tools/recovery_button/Kconfig similarity index 91% rename from subsys/suit/recovery_button/Kconfig rename to subsys/suit/app_tools/recovery_button/Kconfig index c575d1e0a027..cc4ecd8f2563 100644 --- a/subsys/suit/recovery_button/Kconfig +++ b/subsys/suit/app_tools/recovery_button/Kconfig @@ -9,7 +9,9 @@ DT_CHOSEN_NCS_RECOVERY_BUTTON := ncs,recovery-button config SUIT_RECOVERY_BUTTON bool "Enable SUIT enter recovery button checking on startup" depends on $(dt_chosen_enabled,$(DT_CHOSEN_NCS_RECOVERY_BUTTON)) + default y select SSF_SUIT_SERVICE_ENABLED + select SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP help This will make the firmware check if the recovery button specified in the device tree is pressed on startup. If it is, the firmware will enter diff --git a/subsys/suit/recovery_button/src/suit_recovery_button.c b/subsys/suit/app_tools/recovery_button/src/suit_recovery_button.c similarity index 100% rename from subsys/suit/recovery_button/src/suit_recovery_button.c rename to subsys/suit/app_tools/recovery_button/src/suit_recovery_button.c