diff mbox series

[4/6] arm-bsp/rdv1: add support

Message ID 20260331130702.56223-4-jon.mason@arm.com
State New
Headers show
Series [1/6] CI: use core-image-base for faster boot | expand

Commit Message

Jon Mason March 31, 2026, 1:07 p.m. UTC
Add support for Neoverse Reference Design version 1

Signed-off-by: Jon Mason <jon.mason@arm.com>
---
 .gitlab-ci.yml                                |  9 +++
 ci/fvps.yml                                   |  1 +
 ci/rdv1.yml                                   | 14 ++++
 meta-arm-bsp/conf/machine/rdv1.conf           | 67 +++++++++++++++++++
 .../runtime/cases/parselogs-ignores-rdv1.txt  |  3 +
 .../scp-firmware/scp-firmware-rdv1.inc        |  7 ++
 .../scp-firmware/scp-firmware_%.bbappend      |  1 +
 .../trusted-firmware-a-rdv1.inc               | 19 ++++++
 .../trusted-firmware-a_%.bbappend             |  1 +
 .../recipes-bsp/uefi/edk2-firmware-rdv1.inc   |  7 ++
 .../recipes-bsp/uefi/edk2-firmware_%.bbappend |  1 +
 .../linux/linux-arm-platforms.inc             |  8 +++
 meta-arm/recipes-devtools/fvp/fvp-rdv1.bb     | 14 ++++
 13 files changed, 152 insertions(+)
 create mode 100644 ci/rdv1.yml
 create mode 100644 meta-arm-bsp/conf/machine/rdv1.conf
 create mode 100644 meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdv1.txt
 create mode 100644 meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdv1.inc
 create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdv1.inc
 create mode 100644 meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdv1.inc
 create mode 100644 meta-arm/recipes-devtools/fvp/fvp-rdv1.bb
diff mbox series

Patch

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a1e40e365d7c..20b3998e787b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -306,6 +306,15 @@  qemuarmv5:
       - DISTRO: poky-tiny
         TESTING: testimage
 
+rdv1:
+  extends: .build
+  parallel:
+    matrix:
+      - TESTING: testimage
+  # FVP binary is x86-only
+  tags:
+    - x86_64
+
 sbsa-ref:
   extends: .build
   parallel:
diff --git a/ci/fvps.yml b/ci/fvps.yml
index 8ec22a30f6af..db49b3e979a9 100644
--- a/ci/fvps.yml
+++ b/ci/fvps.yml
@@ -35,6 +35,7 @@  target:
   - fvp-rdv3-r1
   - nativesdk-fvp-rdv3-r1
   # These are x86 only... :(
+  - nativesdk-fvp-rdv1
   - nativesdk-fvp-sgi575
 
   # IoT FVPs
diff --git a/ci/rdv1.yml b/ci/rdv1.yml
new file mode 100644
index 000000000000..52cc4b32ad2b
--- /dev/null
+++ b/ci/rdv1.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:rdv1 = "rdv1"
+
+machine: rdv1
diff --git a/meta-arm-bsp/conf/machine/rdv1.conf b/meta-arm-bsp/conf/machine/rdv1.conf
new file mode 100644
index 000000000000..e3b6ce736ece
--- /dev/null
+++ b/meta-arm-bsp/conf/machine/rdv1.conf
@@ -0,0 +1,67 @@ 
+# Configuration for Arm Neoverse v1 Reference Design development board
+
+#@TYPE: Machine
+#@NAME: RD V1
+#@DESCRIPTION: Machine configuration for RD V1
+
+require conf/machine/include/arm/arch-armv8-4a.inc
+
+EXTRA_IMAGEDEPENDS += "virtual/control-processor-firmware"
+EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
+
+# 2.13.0 removes support for rdv1
+PREFERRED_VERSION_trusted-firmware-a ?= "2.12.%"
+
+KERNEL_IMAGETYPE ?= "Image"
+PREFERRED_PROVIDER_virtual/kernel:forcevariable = "linux-yocto"
+SERIAL_CONSOLES = "115200;ttyAMA0 115200;ttyAMA1"
+
+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-rdv1-native"
+FVP_EXE ?= "FVP_RD_V1"
+
+FVP_CONFIG[css.cmn_650.force_rnsam_internal] ?= "true"
+FVP_DATA ?= "css.scp.armcortexm7ct=scp-firmware/scp_ramfw.bin@0x0BD80000 \
+             css.mcp.armcortexm7ct=scp-firmware/mcp_ramfw.bin@0x0BF80000"
+
+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_CONSOLES[default] = "terminal_uart_ap"
+FVP_TERMINALS[css.scp.terminal_uart_aon] ?= "SCP Console"
+FVP_TERMINALS[css.mcp.terminal_uart0] ?= ""
+FVP_TERMINALS[css.mcp.terminal_uart1] ?= ""
+FVP_TERMINALS[css.terminal_uart_ap] ?= "Console"
+FVP_TERMINALS[css.terminal_uart1_ap] ?= ""
+FVP_TERMINALS[soc.terminal_s0] ?= ""
+FVP_TERMINALS[soc.terminal_s1] ?= ""
+FVP_TERMINALS[soc.terminal_mcp] ?= ""
+FVP_TERMINALS[board.terminal_0] ?= ""
+FVP_TERMINALS[board.terminal_1] ?= ""
+
+FVP_CONFIG[css.gic_distributor.ITS-device-bits] ?= "20"
+
+# 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"
diff --git a/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdv1.txt b/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdv1.txt
new file mode 100644
index 000000000000..ff8db8d52e7c
--- /dev/null
+++ b/meta-arm-bsp/lib/oeqa/runtime/cases/parselogs-ignores-rdv1.txt
@@ -0,0 +1,3 @@ 
+can't derive routing for PCI INT A
+jitterentropy: Initialization failed with host not compliant with requirements: 2
+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-rdv1.inc b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdv1.inc
new file mode 100644
index 000000000000..ccd77f6bff2a
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-rdv1.inc
@@ -0,0 +1,7 @@ 
+# RD V1 specific SCP configurations and build instructions
+
+COMPATIBLE_MACHINE:rdv1 = "rdv1"
+SCP_PRODUCT_GROUP = "neoverse-rd"
+SCP_PLATFORM = "rdv1"
+
+SCP_LOG_LEVEL = "INFO"
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 bf0af54a671b..4b1bd09e0417 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:rdv1 = "scp-firmware-rdv1.inc"
 MACHINE_SCP_REQUIRE:sgi575 = "scp-firmware-sgi575.inc"
 
 require ${MACHINE_SCP_REQUIRE}
diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdv1.inc b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdv1.inc
new file mode 100644
index 000000000000..ccd4362d7751
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-rdv1.inc
@@ -0,0 +1,19 @@ 
+# RD V1 specific TFA support
+
+COMPATIBLE_MACHINE = "rdv1"
+TFA_PLATFORM       = "rdv1"
+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"
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 5b4043e87bea..7e39487c49cf 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: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-rdv1.inc b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdv1.inc
new file mode 100644
index 000000000000..7301a101975a
--- /dev/null
+++ b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-rdv1.inc
@@ -0,0 +1,7 @@ 
+# RD V1 specific EDK2 configurations
+EDK2_BUILD_RELEASE = "0"
+EDK2_PLATFORM      = "RdV1"
+EDK2_PLATFORM_DSC  = "Platform/ARM/SgiPkg/RdV1/RdV1.dsc"
+EDK2_BIN_NAME      = "BL33_AP_UEFI.fd"
+
+COMPATIBLE_MACHINE = "rdv1"
diff --git a/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend b/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_%.bbappend
index 76ffa55521b3..17a2d23c9cda 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: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 a0c4128fca7d..a70de61d78e9 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 = "(^$)"
 
+#
+# RDV1 KMACHINE
+#
+COMPATIBLE_MACHINE:rdv1 = "rdv1"
+KBUILD_DEFCONFIG:rdv1 = "defconfig"
+KCONFIG_MODE:rdv1 = "--alldefconfig"
+KCONF_BSP_AUDIT_LEVEL:rdv1 = "0"
+
 #
 # SGI575 KMACHINE
 #
diff --git a/meta-arm/recipes-devtools/fvp/fvp-rdv1.bb b/meta-arm/recipes-devtools/fvp/fvp-rdv1.bb
new file mode 100644
index 000000000000..23804bf3fef4
--- /dev/null
+++ b/meta-arm/recipes-devtools/fvp/fvp-rdv1.bb
@@ -0,0 +1,14 @@ 
+require fvp-ecosystem.inc
+
+MODEL = "RD-V1"
+MODEL_CODE = "FVP_RD_V1"
+PV = "11.17.29"
+
+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-x86_64.sha256sum] = "715c0e0264fc3df961a0b9ff4c4399d55e4ccf4efb0944a412141d97873027a3"
+
+# 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.txt;md5=41029e71051b1c786bae3112a29905a7"