Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0

identifier: nrf54h20dk/nrf54h20/cpuapp/iron
name: nRF54H20-DK-nRF54H20-Application (IRONside compatible) (revision 0.9.0)
name: nRF54H20-DK-nRF54H20-Application (IronSide compatible) (revision 0.9.0)
type: mcu
arch: arm
toolchain:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0

identifier: nrf54h20dk/nrf54h20/cpurad/iron
name: nRF54H20-DK-nRF54H20-Radio (IRONside SE compatible) (revision 0.9.0)
name: nRF54H20-DK-nRF54H20-Radio (IronSide SE compatible) (revision 0.9.0)
type: mcu
arch: arm
toolchain:
Expand Down
1 change: 0 additions & 1 deletion drivers/firmware/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@

# zephyr-keep-sorted-start
add_subdirectory_ifdef(CONFIG_ARM_SCMI scmi)
add_subdirectory_ifdef(CONFIG_NRF_IRONSIDE nrf_ironside)
add_subdirectory_ifdef(CONFIG_TISCI tisci)
# zephyr-keep-sorted-stop
1 change: 0 additions & 1 deletion drivers/firmware/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ config ARM_SCMI
Interface (SCMI).

# zephyr-keep-sorted-start
source "drivers/firmware/nrf_ironside/Kconfig"
source "drivers/firmware/scmi/Kconfig"
source "drivers/firmware/tisci/Kconfig"
# zephyr-keep-sorted-stop
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Copyright (c) 2025 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

description: IPC configuration for Nordic IRONside calls
description: IPC configuration for Nordic IronSide calls

compatible: "nordic,ironside-call"

Expand Down
2 changes: 1 addition & 1 deletion samples/boards/nordic/nrf_ironside/update/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ config UPDATE_BLOB_ADDRESS
default 0xe100000
help
Address of the update blob. The default value matches the placement of the
update blobs delivered with the IRONside SE firmware.
update blobs delivered with the IronSide SE firmware.

source "Kconfig.zephyr"
20 changes: 10 additions & 10 deletions samples/boards/nordic/nrf_ironside/update/README.rst
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
.. zephyr:code-sample:: nrf_ironside_update
:name: Nordic IRONside SE firmware update
:name: Nordic IronSide SE firmware update

Update the Nordic IRONside SE firmware.
Update the Nordic IronSide SE firmware.

Overview
********

The Nordic IRONside SE Update sample updates the IRONside SE firmware on a SoC that already has IRONside SE installed.
It can update both the main image and the recovery image of IRONside SE using the IRONside SE firmware release ZIP file.
The Nordic IronSide SE Update sample updates the IronSide SE firmware on a SoC that already has IronSide SE installed.
It can update both the main image and the recovery image of IronSide SE using the IronSide SE firmware release ZIP file.

Update procedure
****************

The update procedure works as follows:

1. The application invokes the IRONside SE update service and passes the parameters that correspond to the location of the HEX file of the IRONside SE firmware update.
1. The application invokes the IronSide SE update service and passes the parameters that correspond to the location of the HEX file of the IronSide SE firmware update.

#. The application prints the return value of the service call and outputs information from the update HEX file.

#. After the service call completes, the IRONside SE firmware updates the internal state of the device.
#. After the service call completes, the IronSide SE firmware updates the internal state of the device.

#. The firmware installs the update during the next device boot.
This operation can take several seconds.
Expand All @@ -29,23 +29,23 @@ Building and running the application for nrf54h20dk/nrf54h20/cpuapp/iron
************************************************************************

.. note::
You can use this application only when there is already a version of IRONside SE installed on the device.
You can use this application only when there is already a version of IronSide SE installed on the device.

1. Unzip the IRONside SE release ZIP to get the update hex file:
1. Unzip the IronSide SE release ZIP to get the update hex file:

.. code-block:: console

unzip nrf54h20_soc_binaries_v.*.zip

#. Program the appropriate update hex file from the release ZIP using one (not both) of the following commands:

a) To update IRONside SE firmware:
a) To update IronSide SE firmware:

.. code-block:: console

nrfutil device program --traits jlink --firmware update/ironside_se_update.hex

b) To update IRONside SE recovery firmware:
b) To update IronSide SE recovery firmware:

.. code-block:: console

Expand Down
4 changes: 2 additions & 2 deletions samples/boards/nordic/nrf_ironside/update/sample.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
sample:
name: Nordic IRONside SE update service
description: Demonstrates how to update the Nordic IRONside SE firmware
name: Nordic IronSide SE update service
description: Demonstrates how to update the Nordic IronSide SE firmware
common:
build_only: true
tags: nrf_ironside
Expand Down
6 changes: 3 additions & 3 deletions samples/boards/nordic/nrf_ironside/update/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/drivers/firmware/nrf_ironside/boot_report.h>
#include <zephyr/drivers/firmware/nrf_ironside/update.h>
#include <nrf_ironside/boot_report.h>
#include <nrf_ironside/update.h>
#include <zephyr/logging/log.h>

LOG_MODULE_REGISTER(app, LOG_LEVEL_INF);
Expand All @@ -28,7 +28,7 @@ int main(void)
LOG_HEXDUMP_INF((void *)report->random_data, sizeof(report->random_data), "random data");

err = ironside_update(update);
LOG_INF("IRONside update retval: 0x%x", err);
LOG_INF("IronSide update retval: 0x%x", err);

if (err == 0) {
LOG_HEXDUMP_INF(update->manifest, sizeof(update->manifest), "Update manifest:");
Expand Down
1 change: 1 addition & 0 deletions soc/nordic/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ endif()

add_subdirectory(${SOC_SERIES})
add_subdirectory(common)
add_subdirectory(ironside)
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Copyright (c) 2025 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

zephyr_include_directories(include)

zephyr_library()

zephyr_library_sources_ifdef(CONFIG_NRF_IRONSIDE_CALL call.c)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ config NRF_IRONSIDE
bool
depends on SOC_NRF54H20_IRON || SOC_NRF9280_IRON
help
This is selected by drivers interacting with Nordic IRONside firmware.
This is selected by drivers interacting with Nordic IronSide firmware.

config NRF_IRONSIDE_CALL
bool
Expand All @@ -14,44 +14,44 @@ config NRF_IRONSIDE_CALL
select EVENTS
select MBOX
help
This is selected by features that require support for IRONside calls.
This is selected by features that require support for IronSide calls.

if NRF_IRONSIDE_CALL

config NRF_IRONSIDE_CALL_INIT_PRIORITY
int "IRONside calls' initialization priority"
int "IronSide calls' initialization priority"
default 41
help
Initialization priority of IRONside calls. It must be below MBOX_INIT_PRIORITY,
Initialization priority of IronSide calls. It must be below MBOX_INIT_PRIORITY,
but higher than the priority of any feature that selects NRF_IRONSIDE_CALL.

endif # NRF_IRONSIDE_CALL

menu "Nordic IRONside services"
menu "Nordic IronSide services"
depends on SOC_NRF54H20_IRON || SOC_NRF9280_IRON

config NRF_IRONSIDE_CPUCONF_SERVICE
bool "IRONside CPUCONF service"
bool "IronSide CPUCONF service"
depends on SOC_NRF54H20_CPUAPP || SOC_NRF9280_CPUAPP
select NRF_IRONSIDE_CALL
help
Service used to boot local domain cores.

config NRF_IRONSIDE_UPDATE_SERVICE
bool "IRONside update service"
bool "IronSide update service"
select NRF_IRONSIDE_CALL
help
Service used to update the IRONside SE firmware.
Service used to update the IronSide SE firmware.

config NRF_IRONSIDE_BOOT_REPORT
bool "IRONside boot report"
bool "IronSide boot report"
depends on $(dt_nodelabel_exists,ironside_se_boot_report)
select NRF_IRONSIDE
help
Support for parsing the Boot Report populated by Nordic IRONside firmware.
Support for parsing the Boot Report populated by Nordic IronSide firmware.

config NRF_IRONSIDE_DVFS_SERVICE
bool "IRONside DVFS service"
bool "IronSide DVFS service"
depends on SOC_NRF54H20_CPUAPP
select NRF_IRONSIDE_CALL
help
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

#include <errno.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/firmware/nrf_ironside/boot_report.h>
#include <nrf_ironside/boot_report.h>

#define IRONSIDE_SE_BOOT_REPORT_ADDR DT_REG_ADDR(DT_NODELABEL(ironside_se_boot_report))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
* SPDX-License-Identifier: Apache-2.0
*/

#include <nrf_ironside/call.h>
#include <zephyr/cache.h>
#include <zephyr/device.h>
#include <zephyr/drivers/firmware/nrf_ironside/call.h>
#include <zephyr/drivers/mbox.h>
#include <zephyr/kernel.h>
#include <zephyr/sys/barrier.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#include <zephyr/sys/util.h>
#include <zephyr/kernel.h>

#include <zephyr/drivers/firmware/nrf_ironside/call.h>
#include <zephyr/drivers/firmware/nrf_ironside/cpuconf.h>
#include <nrf_ironside/call.h>
#include <nrf_ironside/cpuconf.h>

#define CPU_PARAMS_CPU_OFFSET (0)
#define CPU_PARAMS_CPU_MASK (0xF)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
#include <hal/nrf_hsfll.h>
#include <zephyr/kernel.h>

#include <zephyr/drivers/firmware/nrf_ironside/dvfs.h>
#include <zephyr/drivers/firmware/nrf_ironside/call.h>
#include <nrf_ironside/dvfs.h>
#include <nrf_ironside/call.h>

static enum ironside_dvfs_oppoint current_dvfs_oppoint = IRONSIDE_DVFS_OPP_HIGH;

Expand All @@ -15,7 +15,7 @@ static enum ironside_dvfs_oppoint current_dvfs_oppoint = IRONSIDE_DVFS_OPP_HIGH;
#define ABB_STATUSANA_LOCKED_L_Msk (0x1UL << ABB_STATUSANA_LOCKED_L_Pos)
#define ABB_STATUSANA_REG_OFFSET (0x102UL)
#else
#error "Unsupported SoC series for IRONside DVFS"
#error "Unsupported SoC series for IronSide DVFS"
#endif

struct dvfs_hsfll_data_t {
Expand Down Expand Up @@ -133,8 +133,8 @@ static inline bool ironside_dvfs_is_abb_locked(NRF_ABB_Type *abb)
}

/**
* @brief Request DVFS oppoint change from IRONside secure domain.
* This function will send a request over IPC to the IRONside secure domain
* @brief Request DVFS oppoint change from IronSide secure domain.
* This function will send a request over IPC to the IronSide secure domain
* This function is synchronous and will return when the request is completed.
*
* @param oppoint @ref enum ironside_dvfs_oppoint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
* SPDX-License-Identifier: Apache-2.0
*/

#ifndef ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_BOOT_REPORT_H_
#define ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_BOOT_REPORT_H_
#ifndef ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_BOOT_REPORT_H_
#define ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_BOOT_REPORT_H_

#include <stdint.h>
#include <stddef.h>

/** Constant used to check if an Nordic IRONside SE boot report has been written. */
/** Constant used to check if an Nordic IronSide SE boot report has been written. */
#define IRONSIDE_BOOT_REPORT_MAGIC (0x4d69546fUL)
/** Length of the local domain context buffer in bytes. */
#define IRONSIDE_BOOT_REPORT_LOCAL_DOMAIN_CONTEXT_SIZE (16UL)
/** Length of the random data buffer in bytes. */
#define IRONSIDE_BOOT_REPORT_RANDOM_DATA_SIZE (32UL)

/** @brief IRONside version structure. */
/** @brief IronSide version structure. */
struct ironside_version {
/** Wrapping sequence number ranging from 1-126, incremented for each release. */
uint8_t seqnum;
Expand All @@ -43,13 +43,13 @@ struct ironside_boot_report_uicr_error {
} description;
};

/** @brief IRONside boot report. */
/** @brief IronSide boot report. */
struct ironside_boot_report {
/** Magic value used to identify valid boot report */
uint32_t magic;
/** Firmware version of IRONside SE. */
/** Firmware version of IronSide SE. */
struct ironside_version ironside_se_version;
/** Firmware version of IRONside SE recovery firmware. */
/** Firmware version of IronSide SE recovery firmware. */
struct ironside_version ironside_se_recovery_version;
/** Copy of SICR.UROT.UPDATE.STATUS.*/
uint32_t ironside_update_status;
Expand All @@ -64,14 +64,14 @@ struct ironside_boot_report {
};

/**
* @brief Get a pointer to the IRONside boot report.
* @brief Get a pointer to the IronSide boot report.
*
* @param[out] report Will be set to point to the IRONside boot report.
* @param[out] report Will be set to point to the IronSide boot report.
*
* @retval 0 if successful.
* @retval -EFAULT if the magic field in the report is incorrect.
* @retval -EINVAL if @p report is NULL.
*/
int ironside_boot_report_get(const struct ironside_boot_report **report);

#endif /* ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_BOOT_REPORT_H_ */
#endif /* ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_BOOT_REPORT_H_ */
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
* SPDX-License-Identifier: Apache-2.0
*/

#ifndef ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_CALL_H_
#define ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_CALL_H_
#ifndef ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_CALL_H_
#define ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_CALL_H_

#include <stdint.h>

/** @brief Maximum number of arguments to an IRONside call.
/** @brief Maximum number of arguments to an IronSide call.
*
* This is chosen so that the containing message buffer size is minimal but
* cache line aligned.
Expand Down Expand Up @@ -50,7 +50,7 @@ struct ironside_call_buf {
*/

/**
* @brief Allocate memory for an IRONside call.
* @brief Allocate memory for an IronSide call.
*
* This function will block when no buffers are available, until one is
* released by another thread on the client side.
Expand All @@ -60,7 +60,7 @@ struct ironside_call_buf {
struct ironside_call_buf *ironside_call_alloc(void);

/**
* @brief Dispatch an IRONside call.
* @brief Dispatch an IronSide call.
*
* This function will block until a response is received from the server.
*
Expand All @@ -71,12 +71,12 @@ struct ironside_call_buf *ironside_call_alloc(void);
void ironside_call_dispatch(struct ironside_call_buf *buf);

/**
* @brief Release an IRONside call buffer.
* @brief Release an IronSide call buffer.
*
* This function must be called after processing the response.
*
* @param buf Buffer used to perform the call.
*/
void ironside_call_release(struct ironside_call_buf *buf);

#endif /* ZEPHYR_INCLUDE_ZEPHYR_DRIVERS_FIRMWARE_NRF_IRONSIDE_CALL_H_ */
#endif /* ZEPHYR_SOC_NORDIC_IRONSIDE_INCLUDE_NRF_IRONSIDE_CALL_H_ */
Loading