diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1e40e36..20b3998e 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 8ec22a30..db49b3e9 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 00000000..52cc4b32 --- /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 00000000..e3b6ce73 --- /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 00000000..ff8db8d5 --- /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 00000000..ccd77f6b --- /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 bf0af54a..4b1bd09e 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 00000000..ccd4362d --- /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 5b4043e8..7e39487c 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 00000000..7301a101 --- /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 76ffa555..17a2d23c 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 4bd28ebe..8017a5b6 100644 --- a/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc +++ b/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc @@ -111,6 +111,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 00000000..23804bf3 --- /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"