From: Jon Mason <jon.mason@arm.com>
To: meta-arm@lists.yoctoproject.org
Subject: [PATCH 5/6] arm-bsp/rdn2: add support
Date: Tue, 31 Mar 2026 09:07:01 -0400 [thread overview]
Message-ID: <20260331130702.56223-5-jon.mason@arm.com> (raw)
In-Reply-To: <20260331130702.56223-1-jon.mason@arm.com>
Add support for Neoverse Reference Design N2
Use the rdinfra sources to get it booting
Signed-off-by: Jon Mason <jon.mason@arm.com>
---
.gitlab-ci.yml | 6 ++
ci/fvps.yml | 2 +
ci/rdn2.yml | 14 +++++
meta-arm-bsp/conf/machine/rdn2.conf | 58 +++++++++++++++++++
.../runtime/cases/parselogs-ignores-rdn2.txt | 2 +
.../scp-firmware/scp-firmware-rdn2.inc | 14 +++++
.../scp-firmware/scp-firmware_%.bbappend | 1 +
.../trusted-firmware-a-rdn2.inc | 29 ++++++++++
.../trusted-firmware-a_%.bbappend | 1 +
.../recipes-bsp/uefi/edk2-firmware-rdn2.inc | 17 ++++++
.../recipes-bsp/uefi/edk2-firmware_%.bbappend | 1 +
.../linux/linux-arm-platforms.inc | 8 +++
meta-arm/recipes-devtools/fvp/fvp-rdn2.bb | 20 +++++++
13 files changed, 173 insertions(+)
create mode 100644 ci/rdn2.yml
create mode 100644 meta-arm-bsp/conf/machine/rdn2.conf
create mode 100644 meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdn2.txt
create mode 100644 meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdn2.inc
create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdn2.inc
create mode 100644 meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdn2.inc
create mode 100644 meta-arm/recipes-devtools/fvp/fvp-rdn2.bb
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 20b3998e787b..a07b82abb85d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -306,6 +306,12 @@ qemuarmv5:
- DISTRO: poky-tiny
TESTING: testimage
+rdn2:
+ extends: .build
+ parallel:
+ matrix:
+ - TESTING: testimage
+
rdv1:
extends: .build
parallel:
diff --git a/ci/fvps.yml b/ci/fvps.yml
index db49b3e979a9..185a4f3de846 100644
--- a/ci/fvps.yml
+++ b/ci/fvps.yml
@@ -34,6 +34,8 @@ target:
# Infrastructure FVPs
- fvp-rdv3-r1
- nativesdk-fvp-rdv3-r1
+ - fvp-rdn2
+ - nativesdk-fvp-rdn2
# These are x86 only... :(
- nativesdk-fvp-rdv1
- nativesdk-fvp-sgi575
diff --git a/ci/rdn2.yml b/ci/rdn2.yml
new file mode 100644
index 000000000000..16e9c1629738
--- /dev/null
+++ b/ci/rdn2.yml
@@ -0,0 +1,14 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json
+
+header:
+ version: 14
+ includes:
+ - ci/base.yml
+ - ci/fvp.yml
+
+local_conf_header:
+ sshpregen: |
+ # Allow the use of the pregen keys as this is CI so safe
+ COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:rdn2 = "rdn2"
+
+machine: rdn2
diff --git a/meta-arm-bsp/conf/machine/rdn2.conf b/meta-arm-bsp/conf/machine/rdn2.conf
new file mode 100644
index 000000000000..cc9ba06c179e
--- /dev/null
+++ b/meta-arm-bsp/conf/machine/rdn2.conf
@@ -0,0 +1,58 @@
+# Configuration for Arm Neoverse N2 Reference Design development board
+
+#@TYPE: Machine
+#@NAME: RD N2
+#@DESCRIPTION: Machine configuration for RD N2
+
+require conf/machine/include/arm/armv9a/tune-neoversen2.inc
+
+EXTRA_IMAGEDEPENDS += "virtual/control-processor-firmware"
+EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
+
+KERNEL_IMAGETYPE ?= "Image"
+PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
+SERIAL_CONSOLES = "115200;ttyAMA2"
+EXTRA_IMAGEDEPENDS += "edk2-firmware"
+
+EFI_PROVIDER ?= "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boot", "grub-efi", d)}"
+MACHINE_FEATURES += "efi"
+
+IMAGE_FSTYPES:forcevariable = "cpio.gz wic"
+IMAGE_NAME_SUFFIX = ""
+IMAGE_CLASSES += "fvpboot"
+
+WKS_FILE ?= "efi-disk.wks.in"
+WKS_FILE_DEPENDS:append = " ${EXTRA_IMAGEDEPENDS}"
+
+# testimage config
+TEST_TARGET = "OEFVPTarget"
+TEST_TARGET_IP = "127.0.0.1:2222"
+DEFAULT_TEST_SUITES:append = " fvp_boot fvp_devices"
+TEST_FVP_DEVICES ?= "watchdog networking"
+
+# FVP Config
+FVP_PROVIDER ?= "fvp-rdn2-native"
+FVP_EXE ?= "FVP_RD_N2"
+
+FVP_DATA ?= "css.scp.armcortexm7ct=scp-firmware/scp_ramfw.bin@0x0BD80000 \
+ css.mcp.armcortexm7ct=scp-firmware/mcp_ramfw.bin@0x0BF80000"
+
+FVP_CONFIG[css.gic_distributor.ITS-device-bits] ?= "20"
+FVP_CONFIG[css.mcp.ROMloader.fname] ?= "scp-firmware/mcp_romfw.bin"
+FVP_CONFIG[css.scp.ROMloader.fname] ?= "scp-firmware/scp_romfw.bin"
+FVP_CONFIG[css.trustedBootROMloader.fname] ?= "trusted-firmware-a/bl1.bin"
+FVP_CONFIG[board.flashloader0.fname] ?= "trusted-firmware-a/fip.bin"
+
+FVP_CONFIG[board.dram_size] ?= "0x200000000"
+
+# Virtio configuration
+FVP_CONFIG[board.virtio_net.enabled] ?= "1"
+FVP_CONFIG[board.virtio_net.hostbridge.userNetworking] ?= "1"
+FVP_CONFIG[board.virtio_net.hostbridge.userNetPorts] = "2222=22"
+FVP_CONFIG[board.virtioblockdevice.image_path] ?= "${IMAGE_NAME}.wic"
+
+FVP_CONSOLES[default] = "terminal_ns_uart_ap"
+FVP_TERMINALS[css.scp.terminal_uart_scp] ?= "SCP Console"
+FVP_TERMINALS[css.mcp.terminal_uart_mcp] ?= "MCP Console"
+FVP_TERMINALS[css.terminal_ns_uart_ap] ?= "NS Console"
+FVP_TERMINALS[css.terminal_s_uart_ap] ?= "S Console"
diff --git a/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdn2.txt b/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdn2.txt
new file mode 100644
index 000000000000..7b55e8ea61f0
--- /dev/null
+++ b/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdn2.txt
@@ -0,0 +1,2 @@
+arch_timer: Failed to initialize memory-mapped timer.
+PCI: OF: of_root node is NULL, cannot create PCI host bridge node
diff --git a/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdn2.inc b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdn2.inc
new file mode 100644
index 000000000000..b4e0437b20c3
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdn2.inc
@@ -0,0 +1,14 @@
+# RD N2 specific SCP configurations and build instructions
+
+COMPATIBLE_MACHINE:rdn2 = "rdn2"
+SCP_PRODUCT_GROUP = "neoverse-rd"
+SCP_PLATFORM = "rdn2"
+
+EXTRA_OECMAKE += "-D SCP_PLATFORM_VARIANT=0"
+
+SCP_LOG_LEVEL = "DEBUG"
+
+SRC_URI_SCP_FIRMWARE = "gitsm://gitlab.arm.com/infra-solutions/reference-design/platsw/scp-firmware.git;protocol=https"
+SRCBRANCH = "refinfra-bmc"
+# Use the RD-INFRA-2024.12.20 tag
+SRCREV = "62bc3f079d1ae5780df1459d4c66de2dbee54359"
diff --git a/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware_%.bbappend b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware_%.bbappend
index 4b1bd09e0417..222bee5e52e1 100644
--- a/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware_%.bbappend
+++ b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware_%.bbappend
@@ -3,6 +3,7 @@
MACHINE_SCP_REQUIRE ?= ""
MACHINE_SCP_REQUIRE:juno = "scp-firmware-juno.inc"
+MACHINE_SCP_REQUIRE:rdn2 = "scp-firmware-rdn2.inc"
MACHINE_SCP_REQUIRE:rdv1 = "scp-firmware-rdv1.inc"
MACHINE_SCP_REQUIRE:sgi575 = "scp-firmware-sgi575.inc"
diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdn2.inc b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdn2.inc
new file mode 100644
index 000000000000..0c09818c9024
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdn2.inc
@@ -0,0 +1,29 @@
+# RD N2 specific TFA support
+
+COMPATIBLE_MACHINE = "rdn2"
+TFA_PLATFORM = "rdn2"
+TFA_BUILD_TARGET = "all fip"
+TFA_INSTALL_TARGET = "bl1 fip"
+TFA_DEBUG = "1"
+TFA_MBEDTLS = "1"
+TFA_UBOOT = "0"
+TFA_UEFI = "1"
+
+EXTRA_OEMAKE += "TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 ARM_ROTPK_LOCATION=devel_rsa \
+ ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem"
+
+# If GENERATE_COT is set, then tf-a will try to use local poetry install
+# to run the python cot-dt2c command. Disable the local poetry and use
+# the provided cot-dt2c.
+EXTRA_OEMAKE += "POETRY=''"
+DEPENDS += "cot-dt2c-native"
+
+SRC_URI_TRUSTED_FIRMWARE_A = "git://gitlab.arm.com/infra-solutions/reference-design/platsw/trusted-firmware-a.git;protocol=https"
+SRCBRANCH = "refinfra"
+# SHA not in any branches. so use RD-INFRA-2025.07.03
+SRCREV_tfa = "a4b376b128bb5b91771002f7808566f53c8d9f3a"
+
+# FIXME - hacking around using the 2.14 based recipe
+SRC_URI:remove = "file://0001-feat-build-add-HOSTLDFLAGS-to-pass-flags-to-host-lin.patch"
+LIC_FILES_CHKSUM:remove = "file://docs/license.rst;md5=6ed7bace7b0bc63021c6eba7b524039e"
+LIC_FILES_CHKSUM += "file://docs/license.rst;md5=1118e32884721c0be33267bd7ae11130"
diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
index 7e39487c49cf..9a5d4aa54fd1 100644
--- a/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
+++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
@@ -4,6 +4,7 @@ MACHINE_TFA_REQUIRE ?= ""
MACHINE_TFA_REQUIRE:corstone1000 = "trusted-firmware-a-corstone1000.inc"
MACHINE_TFA_REQUIRE:fvp-base = "trusted-firmware-a-fvp-base.inc"
MACHINE_TFA_REQUIRE:juno = "trusted-firmware-a-juno.inc"
+MACHINE_TFA_REQUIRE:rdn2 = "trusted-firmware-a-rdn2.inc"
MACHINE_TFA_REQUIRE:rdv1 = "trusted-firmware-a-rdv1.inc"
MACHINE_TFA_REQUIRE:sbsa-ref = "trusted-firmware-a-sbsa-ref.inc"
MACHINE_TFA_REQUIRE:sgi575 = "trusted-firmware-a-sgi575.inc"
diff --git a/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdn2.inc b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdn2.inc
new file mode 100644
index 000000000000..ef069c789055
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdn2.inc
@@ -0,0 +1,17 @@
+# RD N2 specific EDK2 configurations
+EDK2_BUILD_RELEASE = "0"
+EDK2_PLATFORM = "RdN2"
+EDK2_PLATFORM_DSC = "Platform/ARM/SgiPkg/RdN2/RdN2.dsc"
+EDK2_BIN_NAME = "BL33_AP_UEFI.fd"
+
+COMPATIBLE_MACHINE = "rdn2"
+
+SRC_URI_EDK2 = "gitsm://gitlab.arm.com/infra-solutions/reference-design/platsw/edk2.git;protocol=https"
+SRC_URI_EDK2_PLATFORMS = "git://gitlab.arm.com/infra-solutions/reference-design/platsw/edk2-platforms.git;protocol=https"
+
+SRCBRANCH_edk2 = "refinfra"
+SRCBRANCH_edk2_platforms = "refinfra"
+
+# Use the RD-INFRA-2024.12.20 tag
+SRCREV_edk2 = "dd25905d63ec72d6e06804155fda1098d10da19e"
+SRCREV_edk2-platforms = "f6ed3b0f92eeaf380638f77d8b5ace805facb301"
diff --git a/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend
index 17a2d23c9cda..3bb1319d1545 100644
--- a/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend
+++ b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend
@@ -4,6 +4,7 @@ MACHINE_EDK2_REQUIRE ?= ""
MACHINE_EDK2_REQUIRE:fvp-base = "edk2-firmware-fvp-base.inc"
MACHINE_EDK2_REQUIRE:juno = "edk2-firmware-juno.inc"
+MACHINE_EDK2_REQUIRE:rdn2 = "edk2-firmware-rdn2.inc"
MACHINE_EDK2_REQUIRE:rdv1 = "edk2-firmware-rdv1.inc"
MACHINE_EDK2_REQUIRE:sbsa-ref = "edk2-firmware-sbsa-ref.inc"
MACHINE_EDK2_REQUIRE:sgi575 = "edk2-firmware-sgi575.inc"
diff --git a/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc b/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
index a70de61d78e9..c537c352f78b 100644
--- a/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
+++ b/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
@@ -110,6 +110,14 @@ FILESEXTRAPATHS:prepend:juno := "${ARMBSPFILESPATHS}"
COMPATIBLE_MACHINE:musca-b1 = "(^$)"
COMPATIBLE_MACHINE:musca-s1 = "(^$)"
+#
+# RDN2 KMACHINE
+#
+COMPATIBLE_MACHINE:rdn2 = "rdn2"
+KBUILD_DEFCONFIG:rdn2 = "defconfig"
+KCONFIG_MODE:rdn2 = "--alldefconfig"
+KCONF_BSP_AUDIT_LEVEL:rdn2 = "0"
+
#
# RDV1 KMACHINE
#
diff --git a/meta-arm/recipes-devtools/fvp/fvp-rdn2.bb b/meta-arm/recipes-devtools/fvp/fvp-rdn2.bb
new file mode 100644
index 000000000000..73848bfbc4cf
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-rdn2.bb
@@ -0,0 +1,20 @@
+require fvp-ecosystem.inc
+
+MODEL = "RD-N2"
+MODEL_CODE = "FVP_RD_N2"
+PV = "11.25.23"
+
+SRC_URI = "https://developer.arm.com/-/cdn-downloads/permalink/FVPs-Neoverse-Infrastructure/${MODEL}/${MODEL_CODE}_${PV_URL}_${FVP_ARCH}.tgz;subdir=${BP};name=fvp-${HOST_ARCH}"
+SRC_URI[fvp-aarch64.sha256sum] = "ae3a3e85ae307dffcc1221d0f30efbb6bc22b61fd508305b984f294407659bdd"
+SRC_URI[fvp-x86_64.sha256sum] = "89c6d5a784d0b76168fb187e366de35f7de5aa7583a148b206b2aee2bc486da2"
+
+# The CSS used in the FVP homepage make it too difficult to query with the tooling currently in Yocto
+UPSTREAM_VERSION_UNKNOWN = "1"
+
+LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
+ file://license_terms/third_party_licenses/third_party_licenses.txt;md5=b9005e55057311e41efe02ccfea8ea72"
+
+COMPATIBLE_HOST = "(aarch64|x86_64).*-linux"
+
+require remove-execstack.inc
+REMOVE_EXECSTACKS:x86-64 = "${FVPDIR}/models/${FVP_ARCH_DIR}*/libarmctmodel.so"
--
2.50.1 (Apple Git-155)
next prev parent reply other threads:[~2026-03-31 13:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 13:06 [PATCH 1/6] CI: use core-image-base for faster boot Jon Mason
2026-03-31 13:06 ` [PATCH 2/6] Revert "arm/execstack: remove, no longer needed" Jon Mason
2026-03-31 13:06 ` [PATCH 3/6] arm/fvps: rename rdv3-r1 Jon Mason
2026-03-31 13:07 ` [PATCH 4/6] arm-bsp/rdv1: add support Jon Mason
2026-03-31 13:07 ` Jon Mason [this message]
2026-03-31 13:07 ` [PATCH 6/6] arm-bsp/rdv2: " Jon Mason
2026-03-31 18:42 ` [PATCH 1/6] CI: use core-image-base for faster boot Jon Mason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260331130702.56223-5-jon.mason@arm.com \
--to=jon.mason@arm.com \
--cc=meta-arm@lists.yoctoproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.