Skip to content

Misc. support for nrf9280pdk_cpuapp_iron #90756

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
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
10 changes: 10 additions & 0 deletions boards/nordic/nrf9280pdk/Kconfig.defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,13 @@ config ASSERT
default n if ZTEST

endif # BOARD_NRF9280PDK_NRF9280_CPUPPR

if BOARD_NRF9280PDK_NRF9280_CPUAPP_IRON

config ROM_START_OFFSET
default 0x800 if BOOTLOADER_MCUBOOT

config FLASH_LOAD_OFFSET
default 0x2c000 if !USE_DT_CODE_PARTITION
Comment on lines +28 to +29
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use dt Kconfig functions to get this value


endif # BOARD_NRF9280PDK_NRF9280_CPUAPP_IRON
8 changes: 5 additions & 3 deletions boards/nordic/nrf9280pdk/Kconfig.nrf9280pdk
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
# SPDX-License-Identifier: Apache-2.0

config BOARD_NRF9280PDK
select SOC_NRF9280_CPUAPP if BOARD_NRF9280PDK_NRF9280_CPUAPP
select SOC_NRF9280_CPUAPP if (BOARD_NRF9280PDK_NRF9280_CPUAPP || \
BOARD_NRF9280PDK_NRF9280_CPUAPP_IRON)
select SOC_NRF9280_CPURAD if BOARD_NRF9280PDK_NRF9280_CPURAD
select SOC_NRF9280_CPUPPR if BOARD_NRF9280PDK_NRF9280_CPUPPR || \
BOARD_NRF9280PDK_NRF9280_CPUPPR_XIP
select SOC_NRF9280_CPUPPR if (BOARD_NRF9280PDK_NRF9280_CPUPPR || \
BOARD_NRF9280PDK_NRF9280_CPUPPR_XIP)
select SOC_NRF9280_IRON if BOARD_NRF9280PDK_NRF9280_CPUAPP_IRON
2 changes: 2 additions & 0 deletions boards/nordic/nrf9280pdk/board.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ board:
variants:
- name: xip
cpucluster: cpuppr
- name: iron
cpucluster: cpuapp
30 changes: 30 additions & 0 deletions boards/nordic/nrf9280pdk/nrf9280pdk_nrf9280-ipc_conf_iron.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

/* This file is to be merged with the original ipc_conf.dtsi in the future. */

/ {
ipc {
/delete-node/ ipc-1-2;
/delete-node/ ipc-1-3;

cpusec_cpuapp_ipc: ipc-1-2 {
compatible = "nordic,ironside-call";
memory-region = <&cpusec_cpuapp_ipc_shm>;
mboxes = <&cpusec_bellboard 12>,
<&cpuapp_bellboard 0>;
status = "disabled";
};

cpusec_cpurad_ipc: ipc-1-3 {
compatible = "nordic,ironside-call";
memory-region = <&cpusec_cpurad_ipc_shm>;
mboxes = <&cpusec_bellboard 18>,
<&cpurad_bellboard 0>;
status = "disabled";
};
};
};
79 changes: 79 additions & 0 deletions boards/nordic/nrf9280pdk/nrf9280pdk_nrf9280-memory_map_iron.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

/* This file is to be merged with the original memory_map.dtsi in the future.
* The following nodes will be replaced:
*/
/delete-node/ &cpuapp_cpusys_ipc_shm;
/delete-node/ &cpusec_cpuapp_ipc_shm;
/delete-node/ &cpusys_cpuapp_ipc_shm;
/delete-node/ &cpuapp_rw_partitions;
/delete-node/ &cpuapp_rx_partitions;
/delete-node/ &cpurad_rx_partitions;

/ {
reserved-memory {
cpuapp_cpusys_ipc_shm: memory@2f88f600 {
reg = <0x2f88f600 0x80>;
};

cpusys_cpuapp_ipc_shm: memory@2f88f680 {
reg = <0x2f88f680 0x80>;
};

cpusec_cpuapp_ipc_shm: memory@2f88fb80 {
reg = <0x2f88fb80 0x80>;
};

cpuapp_ironside_se_event_report: memory@2f88fc00 {
reg = <0x2f88fc00 0x100>;
};

cpuapp_ironside_se_boot_report: memory@2f88fd00 {
reg = <0x2f88fd00 0x200>;
};
};
};

&mram1x {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

cpuapp_boot_partition: partition@2c000 {
reg = <0x2c000 DT_SIZE_K(64)>;
};

cpuapp_slot0_partition: partition@3c000 {
reg = <0x3c000 DT_SIZE_K(336)>;
};

cpurad_slot0_partition: partition@90000 {
reg = <0x90000 DT_SIZE_K(336)>;
};

cpuppr_code_partition: partition@e4000 {
reg = <0xe4000 DT_SIZE_K(64)>;
};

cpuflpr_code_partition: partition@f4000 {
reg = <0xf4000 DT_SIZE_K(48)>;
};

cpuapp_slot1_partition: partition@100000 {
reg = <0x100000 DT_SIZE_K(336)>;
};

cpurad_slot1_partition: partition@154000 {
reg = <0x154000 DT_SIZE_K(336)>;
};

storage_partition: partition@1a8000 {
reg = <0x1a8000 DT_SIZE_K(40)>;
};
};
};
39 changes: 39 additions & 0 deletions boards/nordic/nrf9280pdk/nrf9280pdk_nrf9280_cpuapp_iron.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

#include "nrf9280pdk_nrf9280_cpuapp.dts"
#include "nrf9280pdk_nrf9280-ipc_conf_iron.dtsi"
#include "nrf9280pdk_nrf9280-memory_map_iron.dtsi"

/delete-node/ &cpusec_cpurad_ipc;

/ {
chosen {
zephyr,code-partition = &slot0_partition;
zephyr,uart-mcumgr = &uart136;
};
};

&cpusec_bellboard {
status = "okay";
};

&cpusec_cpuapp_ipc {
mbox-names = "tx", "rx";
status = "okay";
};

boot_partition: &cpuapp_boot_partition {
label = "mcuboot";
};

slot0_partition: &cpuapp_slot0_partition {
label = "image-0";
};

slot1_partition: &cpuapp_slot1_partition {
label = "image-1";
};
23 changes: 23 additions & 0 deletions boards/nordic/nrf9280pdk/nrf9280pdk_nrf9280_cpuapp_iron.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

identifier: nrf9280pdk/nrf9280/cpuapp/iron
name: nRF9280-DK-nRF9280-Application
type: mcu
arch: arm
toolchain:
- gnuarmemb
- xtools
- zephyr
sysbuild: true
ram: 512
flash: 1024
supported:
- adc
- counter
- gpio
- i2c
- pwm
- spi
- watchdog
- usbd
29 changes: 29 additions & 0 deletions boards/nordic/nrf9280pdk/nrf9280pdk_nrf9280_cpuapp_iron_defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

# Enable UART driver
CONFIG_SERIAL=y

# Enable console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y

# Enable MPU
CONFIG_ARM_MPU=y

# Enable hardware stack protection
CONFIG_HW_STACK_PROTECTION=y

# MPU-based null-pointer dereferencing detection cannot be applied
# as the (0x0 - 0x400) region is unmapped for this target.
CONFIG_NULL_POINTER_EXCEPTION_DETECTION_NONE=y

# Enable cache
CONFIG_CACHE_MANAGEMENT=y
CONFIG_EXTERNAL_CACHE=y

# Enable GPIO
CONFIG_GPIO=y

# UICR generation is not supported, and when reintroduced will not use nrf-regtool.
CONFIG_NRF_REGTOOL_GENERATE_UICR=n
6 changes: 3 additions & 3 deletions drivers/firmware/nrf_ironside/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

config NRF_IRONSIDE
bool
depends on SOC_NRF54H20_IRON
depends on SOC_NRF54H20_IRON || SOC_NRF9280_IRON
help
This is selected by drivers interacting with Nordic IRONside firmware.

Expand All @@ -28,11 +28,11 @@ config NRF_IRONSIDE_CALL_INIT_PRIORITY
endif # NRF_IRONSIDE_CALL

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

config NRF_IRONSIDE_CPUCONF_SERVICE
bool "IRONside CPUCONF service"
depends on SOC_NRF54H20_CPUAPP
depends on SOC_NRF54H20_CPUAPP || SOC_NRF9280_CPUAPP
select NRF_IRONSIDE_CALL
help
Service used to boot local domain cores.
Expand Down
2 changes: 2 additions & 0 deletions include/zephyr/drivers/firmware/nrf_ironside/cpuconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#define IRONSIDE_CPUCONF_ERROR_WRONG_CPU (1)
/** The boot message is too large to fit in the buffer. */
#define IRONSIDE_CPUCONF_ERROR_MESSAGE_TOO_LARGE (2)
/** The vector table content is 0xFFFFFFFF */
#define IRONSIDE_CPUCONF_ERROR_NO_FIRMWARE (3)

/**
* @}
Expand Down
4 changes: 4 additions & 0 deletions soc/nordic/nrf92/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ config SOC_SERIES_NRF92X
select HAS_NRFS
select HAS_NRFX
select HAS_NORDIC_DRIVERS
select SOC_EARLY_INIT_HOOK if ARM
select NRF_PLATFORM_HALTIUM

config SOC_NRF9230_ENGB_CPUAPP
Expand Down Expand Up @@ -48,3 +49,6 @@ config SOC_NRF9230_ENGB_CPURAD

config SOC_NRF9230_ENGB_CPUPPR
select RISCV_CORE_NORDIC_VPR

config SOC_NRF9280_IRON
select EXPERIMENTAL if MCUBOOT
5 changes: 5 additions & 0 deletions soc/nordic/nrf92/Kconfig.soc
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,10 @@ config SOC_NRF9280_CPUPPR
help
nRF9280 CPUPPR

config SOC_NRF9280_IRON
bool
help
Indicates that local domain firmware is compatible with Nordic IRONside SE.

config SOC
default "nrf9280" if SOC_NRF9280
6 changes: 1 addition & 5 deletions soc/nordic/nrf92/soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ static int trim_hsfll(void)
return 0;
}

static int nordicsemi_nrf92_init(void)
void soc_early_init_hook(void)
{
sys_cache_instr_enable();
sys_cache_data_enable();
Expand All @@ -102,13 +102,9 @@ static int nordicsemi_nrf92_init(void)

nrf_spu_periph_perm_dmasec_set(spu, nrf_address_slave_get(ccm030_addr), true);
#endif

return 0;
}

void arch_busy_wait(uint32_t time_us)
{
nrfx_coredep_delay_us(time_us);
}

SYS_INIT(nordicsemi_nrf92_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);