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>
This commit is contained in:
Vincent Stehlé
2024-05-31 11:30:06 +02:00
committed by Thomas Petazzoni
parent 654e359512
commit 54be84cb5f
14 changed files with 309 additions and 0 deletions

View File

@@ -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/

View File

@@ -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

View File

@@ -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";
};
};
};

View File

@@ -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"
}
}

View File

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

View File

@@ -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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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"

View File

@@ -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/

View File

@@ -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

View File

@@ -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