All of lore.kernel.org
 help / color / mirror / Atom feed
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)



  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.