Prechádzať zdrojové kódy

configs/arm_fvp_ebbr: new defconfig

Add a defconfig to build an AArch64 U-Boot based firmware implementing
the subset of UEFI defined by EBBR[1], as well as a Linux OS disk image
booting with UEFI, to run on the Arm A-Profile Base RevC AEM FVP.

The generated firmware binaries can also be used to run another OS
supporting the EBBR specification.

[1]: https://github.com/ARM-software/ebbr

Signed-off-by: Vincent Stehlé <vincent.stehle@arm.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Vincent Stehlé 1 rok pred
rodič
commit
54be84cb5f

+ 2 - 0
DEVELOPERS

@@ -3212,8 +3212,10 @@ F:	package/nss-myhostname/
 F:	package/utp_com/
 
 N:	Vincent Stehlé <vincent.stehle@arm.com>
+F:	board/arm/fvp-ebbr/
 F:	board/qemu/aarch64-ebbr/
 F:	board/qemu/arm-ebbr/
+F:	configs/arm_fvp_ebbr_defconfig
 F:	configs/qemu_aarch64_ebbr_defconfig
 F:	configs/qemu_arm_ebbr_defconfig
 F:	package/edk2-non-osi/

+ 15 - 0
board/arm/fvp-ebbr/fvp-config.txt

@@ -0,0 +1,15 @@
+# Arm A-Profile Base RevC AEM FVP config
+bp.secure_memory=1
+bp.ve_sysregs.exit_on_shutdown=1
+cache_state_modelled=0
+cluster0.NUM_CORES=4
+cluster0.cpu0.enable_crc32=1
+cluster0.cpu1.enable_crc32=1
+cluster0.cpu2.enable_crc32=1
+cluster0.cpu3.enable_crc32=1
+cluster1.NUM_CORES=4
+cluster1.cpu0.enable_crc32=1
+cluster1.cpu1.enable_crc32=1
+cluster1.cpu2.enable_crc32=1
+cluster1.cpu3.enable_crc32=1
+pctl.startup=0.0.0.0

+ 18 - 0
board/arm/fvp-ebbr/fvp-ebbr.dts

@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2024, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "fvp-base-gicv3-psci-1t.dts"
+
+/* The TF-A Devicetree does not have the OP-TEE node; let's add it. */
+
+/ {
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
+};

+ 31 - 0
board/arm/fvp-ebbr/genimage.cfg

@@ -0,0 +1,31 @@
+image efi-part.vfat {
+	vfat {
+		file EFI {
+			image = "efi-part/EFI"
+		}
+
+		file Image {
+			image = "Image"
+		}
+	}
+
+	size = 128M
+}
+
+image disk.img {
+	hdimage {
+		partition-table-type = "gpt"
+	}
+
+	partition boot {
+		image = "efi-part.vfat"
+		partition-type-uuid = U
+		offset = 32K
+		bootable = true
+	}
+
+	partition root {
+		partition-type-uuid = b921b045-1df0-41c3-af44-4c6f280d3fae
+		image = "rootfs.ext2"
+	}
+}

+ 6 - 0
board/arm/fvp-ebbr/grub.cfg

@@ -0,0 +1,6 @@
+set default="0"
+set timeout="5"
+
+menuentry "Buildroot" {
+	linux /Image root=PARTLABEL=root rootwait
+}

+ 45 - 0
board/arm/fvp-ebbr/patches/arm-trusted-firmware/0001-feat-fvp-add-stdout-path.patch

@@ -0,0 +1,45 @@
+From 8c30a0c7fe0162de0618b26fb34cc91ea582e5f7 Mon Sep 17 00:00:00 2001
+From: Debbie Martin <Debbie.Martin@arm.com>
+Date: Wed, 27 Sep 2023 18:05:26 +0100
+Subject: [PATCH] feat(fvp): add stdout-path
+
+Add stdout-path to the fvp-base devicetree to be passed to BL33 (U-Boot)
+and then to the Linux kernel to be compliant to Arm SystemReady IR:
+https://developer.arm.com/documentation/DUI1101/2-0/
+Configure-U-Boot-for-SystemReady/Adapt-the-Devicetree
+
+This has been tested by booting fvp-base to Linux and ensuring the
+console is accessible.
+
+Change-Id: Iae98630f18f735ce344c1158f41f358c2a49eeb6
+Signed-off-by: Diego Sueiro <Diego.Sueiro@arm.com>
+Signed-off-by: Debbie Martin <Debbie.Martin@arm.com>
+Upstream: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/+/8c30a0c7fe0162de0618b26fb34cc91ea582e5f7%5E!/
+Signed-off-by: Vincent Stehlé <vincent.stehle@arm.com>
+---
+ fdts/fvp-base-psci-common.dtsi | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/fdts/fvp-base-psci-common.dtsi b/fdts/fvp-base-psci-common.dtsi
+index 79cf37d3b0..ff31ba7616 100644
+--- a/fdts/fvp-base-psci-common.dtsi
++++ b/fdts/fvp-base-psci-common.dtsi
+@@ -27,11 +27,12 @@
+ 	#address-cells = <2>;
+ 	#size-cells = <2>;
+ 
++	chosen {
++		stdout-path = "serial0:115200n8";
+ #if (ENABLE_RME == 1)
+-	chosen { bootargs = "console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=on";};
+-#else
+-	chosen {};
++		bootargs = "console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=on";
+ #endif
++	};
+ 
+ 	aliases {
+ 		serial0 = &v2m_serial0;
+-- 
+2.43.0
+

+ 2 - 0
board/arm/fvp-ebbr/patches/arm-trusted-firmware/arm-trusted-firmware.hash

@@ -0,0 +1,2 @@
+# Locally calculated
+sha256  2e18b881ada9198173238cca80086c787b1fa3f698944bde1743142823fc511c  arm-trusted-firmware-v2.10.tar.gz

+ 1 - 0
board/arm/fvp-ebbr/patches/linux-headers/linux-headers.hash

@@ -0,0 +1 @@
+../linux/linux.hash

+ 2 - 0
board/arm/fvp-ebbr/patches/linux/linux.hash

@@ -0,0 +1,2 @@
+# Locally calculated
+sha256  b78dcd09f6b725872a2c0c87a70a064b0fbbcccfe5ce60aa46c669934a9e28b6  linux-6.8.11.tar.xz

+ 2 - 0
board/arm/fvp-ebbr/patches/uboot/uboot.hash

@@ -0,0 +1,2 @@
+# Locally calculated
+sha256  077cf8ca283411103ad274a3724dacb5068ede824de749beff9c9e5b531b43ea  u-boot-2024.07-rc3.tar.bz2

+ 7 - 0
board/arm/fvp-ebbr/post-image.sh

@@ -0,0 +1,7 @@
+#!/bin/sh
+set -eu
+
+BOARD_DIR=$(dirname "$0")
+
+# Override the default GRUB configuration file with our own.
+cp -f "${BOARD_DIR}/grub.cfg" "${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg"

+ 73 - 0
board/arm/fvp-ebbr/readme.txt

@@ -0,0 +1,73 @@
+Introduction
+============
+
+The arm_fvp_ebbr_defconfig is meant to illustrate some aspects of the Arm EBBR
+specification[1] and the Arm SystemReady IR[2] compliance program.
+It allows building an AArch64 U-Boot based firmware implementing the subset of
+UEFI defined by EBBR, as well as a Linux OS disk image booting with UEFI, to run
+on the Arm A-Profile Base RevC AEM FVP.
+
+Building
+========
+
+  $ make arm_fvp_ebbr_defconfig
+  $ make
+
+Generated files under output/images:
+
+* bl1.bin: A ROM image built from TF-A.
+* fip.bin: A firmware image comprising TF-A, OP-TEE and the U-Boot bootloader.
+* disk.img: An OS disk image comprising the GRUB bootloader, the Linux kernel
+  and the root filesystem.
+
+Running on the FVP
+==================
+
+Download the FVP from one of the following sources, corresponding to your host
+computer:
+
+- https://developer.arm.com/-/media/Files/downloads/ecosystem-models/FM_11_25/FVP_Base_RevC-2xAEMvA_11.25_15_Linux64.tgz
+- https://developer.arm.com/-/media/Files/downloads/ecosystem-models/FM_11_25/FVP_Base_RevC-2xAEMvA_11.25_15_Linux64_armv8l.tgz
+
+The FVP will be located under one of the corresponding folders:
+
+- Base_RevC_AEMvA_pkg/models/Linux64_GCC-9.3
+- Base_RevC_AEMvA_pkg/models/Linux64_armv8l_GCC-9.3
+
+Run the simulation with:
+
+  FVP_Base_RevC-2xAEMvA \
+      --config-file board/arm/fvp-ebbr/fvp-config.txt \
+      -C bp.secureflashloader.fname="output/images/bl1.bin" \
+      -C bp.flashloader0.fname="output/images/fip.bin" \
+      -C bp.virtioblockdevice.image_path="output/images/disk.img"
+
+The login prompt will appear in a new X terminal.
+
+Using the EBBR firmware to run another OS on the FVP
+----------------------------------------------------
+
+It is possible to use the generated firmware binaries to run another OS
+supporting the EBBR specification.
+
+To run another OS on simulation using a live or pre-installed image, use the
+same FVP command line as for the generated OS but adapt the OS image path in the
+virtioblockdevice stanza.
+The image generated by the aarch64_efi_defconfig or the Arm ACS-IR images[3] are
+examples of pre-installed OS images.
+Linux distributions such as Debian, Fedora, openSUSE or Ubuntu provide a
+pre-installed OS image.
+
+Miscellaneous
+=============
+
+This configuration is inspired by the arm_foundationv8_defconfig, the
+qemu_aarch64_virt_defconfig and the Arm SystemReady IR IoT Integration, Test,
+and Certification Guide[4].
+
+Firmware update, MMC and network are currently not supported.
+
+[1]: https://github.com/ARM-software/ebbr
+[2]: https://developer.arm.com/Architectures/Arm%20SystemReady%20IR
+[3]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images
+[4]: https://developer.arm.com/documentation/DUI1101/latest/

+ 49 - 0
board/arm/fvp-ebbr/u-boot.fragment

@@ -0,0 +1,49 @@
+# CONFIG_USE_BOOTCOMMAND is not set
+CONFIG_BOOTCOMMAND="bootflow scan -lb"
+CONFIG_BOOTMETH_DISTRO=y
+CONFIG_BOOTM_EFI=y
+CONFIG_BOOTSTD_BOOTCOMMAND=y
+CONFIG_BOOTSTD_DEFAULTS=y
+CONFIG_BOOTSTD_FULL=y
+CONFIG_CMD_BOOTDEV=y
+CONFIG_CMD_BOOTEFI=y
+CONFIG_CMD_BOOTEFI_HELLO=y
+CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y
+CONFIG_CMD_BOOTEFI_SELFTEST=y
+CONFIG_CMD_BOOTMETH=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_EFIDEBUG=y
+CONFIG_CMD_EFI_VARIABLE_FILE_STORE=y
+CONFIG_CMD_GETTIME=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_NVEDIT_EFI=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_RTC=y
+CONFIG_CMD_TIME=y
+CONFIG_DM_RNG=y
+CONFIG_DM_RTC=y
+CONFIG_EFI_DEVICE_PATH_TO_TEXT=y
+CONFIG_EFI_GET_TIME=y
+CONFIG_EFI_HAVE_RUNTIME_RESET=y
+CONFIG_EFI_LOADER=y
+CONFIG_EFI_LOADER_HII=y
+CONFIG_EFI_MM_COMM_TEE=y
+CONFIG_EFI_PARTITION=y
+CONFIG_EFI_SECURE_BOOT=y
+CONFIG_EFI_SET_TIME=y
+CONFIG_EFI_UNICODE_CAPITALIZATION=y
+CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2=y
+CONFIG_EFI_VARIABLE_FILE_STORE=y
+CONFIG_FAT_WRITE=y
+CONFIG_FIT=y
+CONFIG_FS_FAT=y
+CONFIG_ISO_PARTITION=y
+CONFIG_MISC=y
+CONFIG_OF_CONTROL=y
+CONFIG_OF_LIBFDT=y
+CONFIG_OPTEE=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_RNG_OPTEE=y
+CONFIG_TEE=y
+CONFIG_USE_BOOTCOMMAND=y
+CONFIG_VEXPRESS_CONFIG=y

+ 56 - 0
configs/arm_fvp_ebbr_defconfig

@@ -0,0 +1,56 @@
+# Architecture
+BR2_aarch64=y
+
+# Image
+BR2_GLOBAL_PATCH_DIR="board/arm/fvp-ebbr/patches"
+BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/arm/fvp-ebbr/post-image.sh support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/arm/fvp-ebbr/genimage.cfg"
+
+# Linux headers
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_8=y
+
+# Kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.8.11"
+BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+
+# Packages
+BR2_PACKAGE_OPTEE_CLIENT=y
+
+# Filesystem
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="200M"
+# BR2_TARGET_ROOTFS_TAR is not set
+
+# Firmware and bootloader
+BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.10"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="fvp"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_DTS_PATH="board/arm/fvp-ebbr/fvp-ebbr.dts"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="ARM_TSP_RAM_LOCATION=tdram FVP_DT_PREFIX=fvp-ebbr"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC=y
+BR2_TARGET_GRUB2=y
+BR2_TARGET_OPTEE_OS=y
+BR2_TARGET_OPTEE_OS_NEEDS_DTC=y
+BR2_TARGET_OPTEE_OS_PLATFORM="vexpress-fvp"
+BR2_TARGET_OPTEE_OS_ADDITIONAL_VARIABLES="CFG_ARM_GICV3=y"
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2024.07-rc3"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="vexpress_fvp"
+BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/arm/fvp-ebbr/u-boot.fragment"
+BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
+
+# Host tools
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y