diff --git a/config/arch/v8.0.yaml b/config/arch/v8.0.yaml index defaec38d0a33b1566bb08d4cd5a6d9db4452e39..4bc7db3e58b9f9c0d5d65d7ce9310a403290c6b2 100644 --- a/config/arch/v8.0.yaml +++ b/config/arch/v8.0.yaml @@ -12,7 +12,9 @@ description: >- build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 0 + BRANCH_PROTECTION: 0 run: params: diff --git a/config/arch/v8.1.yaml b/config/arch/v8.1.yaml index 3db5a1bd7c7907eba5d0680b5d770fd28e6ceb66..41e8752a0f3da2cc82dd926c3fd52bced813e60e 100644 --- a/config/arch/v8.1.yaml +++ b/config/arch/v8.1.yaml @@ -15,6 +15,7 @@ layers: build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 1 run: diff --git a/config/arch/v8.2.yaml b/config/arch/v8.2.yaml index 126bd81d8c1e9918597b7a50e27c94f2e16296c2..ecaec2db61adea571ad3e5f8f026dc15887207c5 100644 --- a/config/arch/v8.2.yaml +++ b/config/arch/v8.2.yaml @@ -15,9 +15,8 @@ layers: build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 2 - ENABLE_SVE_FOR_NS: 1 - ENABLE_SVE_FOR_SWD: 1 run: params: diff --git a/config/arch/v8.3.yaml b/config/arch/v8.3.yaml index 3298d7fb931ea276486167683e7d35753b321e3d..8cf0008d8b4e0409e1428e9661a7e49e832a4389 100644 --- a/config/arch/v8.3.yaml +++ b/config/arch/v8.3.yaml @@ -15,8 +15,9 @@ layers: build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 3 - CTX_INCLUDE_PAUTH_REGS: 1 + BRANCH_PROTECTION: 2 run: params: diff --git a/config/arch/v8.4.yaml b/config/arch/v8.4.yaml index b68eb5e0f0e8e44eaa43bc7456e5497865d9caf2..067bd191a6b4e03b7d625a8710328f85abce943a 100644 --- a/config/arch/v8.4.yaml +++ b/config/arch/v8.4.yaml @@ -15,6 +15,7 @@ layers: build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 4 run: diff --git a/config/arch/v8.5.yaml b/config/arch/v8.5.yaml index 6a6b0582fe2fbb9c42cbbd06458b9ab2a7f2bbe1..11d88556b89f7f2776597432e2d26a134805c51e 100644 --- a/config/arch/v8.5.yaml +++ b/config/arch/v8.5.yaml @@ -15,9 +15,9 @@ layers: build: tfa: params: + ARM_ARCH_MAJOR: 8 ARM_ARCH_MINOR: 5 BRANCH_PROTECTION: 1 - CTX_INCLUDE_MTE_REGS: 1 run: params: diff --git a/config/arch/v8.6.yaml b/config/arch/v8.6.yaml index e6eb503e6397f8e427791536394531a71a7c282e..46071650ad29bebcba7802bfd38acf4ba83d83ca 100644 --- a/config/arch/v8.6.yaml +++ b/config/arch/v8.6.yaml @@ -12,6 +12,12 @@ description: >- layers: - arch/v8.5.yaml +build: + tfa: + params: + ARM_ARCH_MAJOR: 8 + ARM_ARCH_MINOR: 6 + run: params: -C cluster0.has_arm_v8-6: 1 diff --git a/config/arch/v8.7.yaml b/config/arch/v8.7.yaml index c5f4f5a2f0b2ae6fb6e489f9838d9b9fef91dae0..7dc281a7fc41481e8dc954a231a617b47a78e233 100644 --- a/config/arch/v8.7.yaml +++ b/config/arch/v8.7.yaml @@ -15,7 +15,8 @@ layers: build: tfa: params: - ENABLE_FEAT_HCX: 1 + ARM_ARCH_MAJOR: 8 + ARM_ARCH_MINOR: 7 run: params: diff --git a/config/arch/v8.8.yaml b/config/arch/v8.8.yaml index 04d0ace1d920f21168ea306388e187acb508ec6f..921e4df803eb2cf0047254f569e89b0163eaabff 100644 --- a/config/arch/v8.8.yaml +++ b/config/arch/v8.8.yaml @@ -12,6 +12,12 @@ description: >- layers: - arch/v8.7.yaml +build: + tfa: + params: + ARM_ARCH_MAJOR: 8 + ARM_ARCH_MINOR: 8 + run: params: -C cluster0.has_arm_v8-8: 1 diff --git a/config/arch/v8.9.yaml b/config/arch/v8.9.yaml index 8651ebf15ece696078617fd0eeb40f07e6748636..82838e2df27e80af2ef5af0e3ad6d062a884ce4a 100644 --- a/config/arch/v8.9.yaml +++ b/config/arch/v8.9.yaml @@ -12,6 +12,12 @@ description: >- layers: - arch/v8.8.yaml +build: + tfa: + params: + ARM_ARCH_MAJOR: 8 + ARM_ARCH_MINOR: 9 + run: params: -C cluster0.has_arm_v8-9: 1 @@ -24,3 +30,5 @@ run: -C cluster1.has_permission_overlay_s1: 1 -C cluster0.has_permission_overlay_s2: 1 -C cluster1.has_permission_overlay_s2: 1 + -C cluster0.memory_tagging_support_level: 4 # FEAT_MTE4 is mandatory from Armv8.9 when FEAT_MTE2 is implemented. + -C cluster1.memory_tagging_support_level: 4 diff --git a/config/arch/v9.2.yaml b/config/arch/v9.2.yaml index 33abd8eea5a09aede5a1fd2f0ef899412e6bb2ef..f00fb2e522d70892e782d4beec78f6f36304a826 100644 --- a/config/arch/v9.2.yaml +++ b/config/arch/v9.2.yaml @@ -13,12 +13,6 @@ layers: - arch/v8.7.yaml - arch/v9.1.yaml -build: - tfa: - params: - ENABLE_SME_FOR_NS: 1 - ENABLE_SME_FOR_SWD: 1 - run: params: -C cluster0.has_arm_v9-2: 1 diff --git a/config/arch/v9.4.yaml b/config/arch/v9.4.yaml index c29d4e4050d17a91a0ecfd6cc16fc22dc9d997b5..1b0baed2a90df52a314fc34408f2f32e347ad989 100644 --- a/config/arch/v9.4.yaml +++ b/config/arch/v9.4.yaml @@ -19,3 +19,5 @@ run: -C cluster1.has_arm_v9-4: 1 -C cluster0.has_gcs: 1 -C cluster1.has_gcs: 1 + -C cluster0.memory_tagging_support_level: 4 # FEAT_MTE4 is mandatory from Armv8.9 when FEAT_MTE2 is implemented. Due to the layers, 8.8 ends up on top of 8.9 so we have to override again. + -C cluster1.memory_tagging_support_level: 4 diff --git a/config/arch/v9.5.yaml b/config/arch/v9.5.yaml new file mode 100644 index 0000000000000000000000000000000000000000..789e64f31b85896735b3bca708d7ea3c96c84b24 --- /dev/null +++ b/config/arch/v9.5.yaml @@ -0,0 +1,18 @@ +# Copyright (c) 2023, Arm Limited. +# SPDX-License-Identifier: MIT + +%YAML 1.2 +--- +description: >- + Implements all mandatory requirements and features as well as a sensible + selection of optional ones for the Armv9.5 architecture extension within the + Base_RevC-2xAEMvA FVP. Intended for use as an overlay to + FVP_Base_RevC-2xAEMvA-base.yaml. + +layers: + - arch/v9.4.yaml + +run: + params: + -C cluster0.has_arm_v9-5: 1 + -C cluster1.has_arm_v9-5: 1 diff --git a/config/cca-3world.yaml b/config/cca-3world.yaml index 711264a226a7b119d866f0631ef92c77f2adc8b1..2b7695c458b04795ad0faa7ef79d4f648e6aff99 100644 --- a/config/cca-3world.yaml +++ b/config/cca-3world.yaml @@ -77,27 +77,21 @@ build: params: ENABLE_RME: 1 RMM: ${artifact:RMM} - CTX_INCLUDE_EL2_REGS: 1 FVP_HW_CONFIG: ${artifact:DTB} - # SME is not supported concurrently with CCA yet. - ENABLE_SME_FOR_NS: 0 - ENABLE_SME_FOR_SWD: 0 - ENABLE_FEAT_HCX: 0 - - # MTE is not supported by RMM yet. - CTX_INCLUDE_MTE_REGS: 0 - edk2: repo: + edk2: + remote: https://git.gitlab.arm.com/linux-arm/edk2-cca.git + revision: 2802_arm_cca_rmm-v1.0-eac5 edk2-platforms: - # Contains change to carve out 64MB for RMM. - revision: 310d31231d69c378ff85d253477d830913b77739 + remote: https://git.gitlab.arm.com/linux-arm/edk2-platforms-cca.git + revision: 2802_arm_cca_rmm-v1.0-eac5 linux: repo: remote: https://git.gitlab.arm.com/linux-arm/linux-cca.git - revision: cca-full/rfc-v1 + revision: cca-full/rmm-v1.0-eac5 kvmtool: repo: @@ -105,12 +99,12 @@ build: revision: v1.6.1 kvmtool: remote: https://gitlab.arm.com/linux-arm/kvmtool-cca - revision: cca/rfc-v1 + revision: cca/rmm-v1.0-eac5 kvm-unit-tests: repo: remote: https://gitlab.arm.com/linux-arm/kvm-unit-tests-cca - revision: cca/rfc-v1 + revision: cca/rmm-v1.0-eac5 toolchain: aarch64-linux-gnu- @@ -134,7 +128,7 @@ build: repo: edk2: remote: https://git.gitlab.arm.com/linux-arm/edk2-cca.git - revision: 2595_arm_cca_0abet0_rfc_v1 + revision: 2802_arm_cca_rmm-v1.0-eac5 toolchain: aarch64-none-elf- @@ -212,8 +206,9 @@ run: -C cluster0.rme_support_level: 2 -C cluster1.rme_support_level: 2 - # SME is not supported concurrently with CCA yet. - -C SVE.ScalableVectorExtension.has_sme: 0 + # Suppress "WARNING: MPAM_NS is deprecated when RME is in use. Should use MPAM_SP" + -C cluster0.output_attributes: ExtendedID[62:55]=MPAM_PMG,ExtendedID[54:39]=MPAM_PARTID,ExtendedID[38:37]=MPAM_SP + -C cluster1.output_attributes: ExtendedID[62:55]=MPAM_PMG,ExtendedID[54:39]=MPAM_PARTID,ExtendedID[38:37]=MPAM_SP # MTE is not supported by RMM yet. -C cluster0.memory_tagging_support_level: 0 @@ -224,6 +219,13 @@ run: -C pci.pci_smmuv3.mmu.SMMU_ROOT_IIDR: 0x43B -C pci.pci_smmuv3.mmu.root_register_page_offset: 0x20000 + # Enable FEAT_CSV2_2, which is optional. But TFA 2.10 force-enables it when + # ENABLE_RME=1 so if it's not there we see an exception. + -C cluster0.restriction_on_speculative_execution: 2 + -C cluster1.restriction_on_speculative_execution: 2 + -C cluster0.restriction_on_speculative_execution_aarch32: 2 + -C cluster1.restriction_on_speculative_execution_aarch32: 2 + terminals: bp.terminal_3: friendly: rmm diff --git a/config/debug/rmm.yaml b/config/debug/rmm.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c123b5825eae0dc83a7ba6d1ff5eb2736db6d83c --- /dev/null +++ b/config/debug/rmm.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2024, Arm Limited. +# SPDX-License-Identifier: MIT + +%YAML 1.2 +--- +description: >- + Overlay for RMM to build debug configuration. + +build: + rmm: + params: + -DCMAKE_BUILD_TYPE: Debug + + artifacts: + RMM: ${param:builddir}/Debug/rmm.img diff --git a/config/debug/tfa.yaml b/config/debug/tfa.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9be378ca4e9bd865118d1e3d1901f2c6a7ea99e3 --- /dev/null +++ b/config/debug/tfa.yaml @@ -0,0 +1,18 @@ +# Copyright (c) 2024, Arm Limited. +# SPDX-License-Identifier: MIT + +%YAML 1.2 +--- +description: >- + Overlay for TFA to build debug configuration. + +build: + tfa: + params: + DEBUG: 1 + + artifacts: + BL1: ${param:builddir}/fvp/debug/bl1.bin + BL2: ${param:builddir}/fvp/debug/bl2.bin + BL31: ${param:builddir}/fvp/debug/bl31.bin + FIP: ${param:builddir}/fvp/debug/fip.bin diff --git a/config/dt-base.yaml b/config/dt-base.yaml index 095930cc8026b21eeea82e21d12ecb8ddc80f18d..c26bffcb848819c440ba31fb1de580a6ab7c755b 100644 --- a/config/dt-base.yaml +++ b/config/dt-base.yaml @@ -15,7 +15,7 @@ build: dt: repo: remote: git://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git - revision: v6.1-dts + revision: v6.6-dts toolchain: aarch64-none-elf- diff --git a/config/edk2-base.yaml b/config/edk2-base.yaml index fcddd91fd3781d82c7e97b4fa364f6ef529ffee9..1fda602ea68cc40463a90de86a543d8f480706e7 100644 --- a/config/edk2-base.yaml +++ b/config/edk2-base.yaml @@ -12,7 +12,7 @@ build: acpica: repo: remote: https://github.com/acpica/acpica.git - revision: R10_20_22 + revision: R06_28_23 build: - rm -rf ${param:sourcedir}/generate/unix/acpica @@ -29,10 +29,10 @@ build: repo: edk2: remote: https://github.com/tianocore/edk2.git - revision: edk2-stable202211 + revision: edk2-stable202311 edk2-platforms: remote: https://github.com/tianocore/edk2-platforms.git - revision: 20e07099d8f11889d101dd710ca85001be20e179 + revision: 4b07df2e6f3813c6e955197dacb2cdfbe3471caa toolchain: aarch64-none-elf- diff --git a/config/ffa-tftf.yaml b/config/ffa-tftf.yaml index cc17f394cb43fcfb8785bd30ecffa4e2199dc4c5..7c69388dc86ae9a407e460e8405f3b3a9528ff84 100644 --- a/config/ffa-tftf.yaml +++ b/config/ffa-tftf.yaml @@ -22,6 +22,5 @@ build: BL33: ${artifact:EDK2} SPD: spmd SPMD_SPM_AT_SEL2: 1 - CTX_INCLUDE_EL2_REGS: 1 SP_LAYOUT_FILE: ${artifact:SP_LAYOUT} BL32: ${artifact:HAFNIUM} diff --git a/config/hafnium-base.yaml b/config/hafnium-base.yaml index 77a076e45a99fada0f4603f8dca38a5b3aba07c0..3f98e6b61c28c254575288a0ebb9918b4b1382e6 100644 --- a/config/hafnium-base.yaml +++ b/config/hafnium-base.yaml @@ -10,10 +10,11 @@ build: hafnium: repo: remote: https://git.trustedfirmware.org/hafnium/hafnium.git - revision: v2.9 + revision: v2.10 params: PROJECT: reference + PLATFORM: secure_aem_v8a_fvp_vhe build: # Hafnium doesn't provide a mechanism to forward number of jobs to ninja, @@ -23,3 +24,22 @@ build: artifacts: HAFNIUM: ${param:builddir}/secure_aem_v8a_fvp_vhe_clang/hafnium.bin + + tfa: + params: + # Although TFA is now able to detect most features dynamically, there are + # still a few, which are required by Hafnium, which it can't. Given these + # are hard requirements for Hafnium, define them here. + GIC_EXT_INTID: 1 + CTX_INCLUDE_MTE_REGS: 1 + ENABLE_SVE_FOR_SWD: 1 + +run: + params: + # Hafnium requires extended gic support, so define these here to show they + # are tightly coupled. + -C gic_distributor.ARE-fixed-to-one: 1 + -C gic_distributor.extended-ppi-count: 64 + -C gic_distributor.extended-spi-count: 1024 + -C cluster0.gicv3.extended-interrupt-range-support: 1 + -C cluster1.gicv3.extended-interrupt-range-support: 1 diff --git a/config/linux-base.yaml b/config/linux-base.yaml index 40358c0df5e966c196c94040ebb416ecd7c1bfb1..047e640cebcd13da22b50022f97db4f4bcb8680b 100644 --- a/config/linux-base.yaml +++ b/config/linux-base.yaml @@ -22,7 +22,7 @@ build: linux: repo: remote: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git - revision: v6.1 + revision: v6.6 toolchain: aarch64-linux-gnu- diff --git a/config/rmm-base.yaml b/config/rmm-base.yaml index d9d03e4a4c4b3262dae888354539dbd1fdc4749b..6b7da94322863b782a7ff455b4065e96905ed61c 100644 --- a/config/rmm-base.yaml +++ b/config/rmm-base.yaml @@ -7,7 +7,7 @@ build: rmm: repo: remote: https://git.trustedfirmware.org/TF-RMM/tf-rmm.git - revision: tf-rmm-v0.3.0 + revision: tf-rmm-v0.4.0 toolchain: aarch64-none-elf- diff --git a/config/tfa-base.yaml b/config/tfa-base.yaml index 1728ee559928b40389912b9c8a3238d2077e4631..404b40491afe57dbdf3d144266d7b9cd38258a16 100644 --- a/config/tfa-base.yaml +++ b/config/tfa-base.yaml @@ -11,7 +11,7 @@ build: tfa: repo: remote: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git - revision: v2.9.0 + revision: v2.10 toolchain: aarch64-none-elf- @@ -23,8 +23,9 @@ build: FVP_HW_CONFIG_DTS: fdts/fvp-base-gicv3-psci-1t.dts build: - # TODO: tfa has makefile dependency bug that prevents parallel make (-j > 1). - - make BUILD_BASE=${param:builddir} ${param:join_equal} all fip + # tfa has makefile dependency bug that makes parallel make for more than + # ~8 jobs unreliable, so limit it to 8. + - "make BUILD_BASE=${param:builddir} ${param:join_equal} -j$$(( ${param:jobs} < 8 ? ${param:jobs} : 8 )) all fip" clean: - make BUILD_BASE=${param:builddir} realclean diff --git a/config/tftf-base.yaml b/config/tftf-base.yaml index f5fcfbbb60cb73fff6fc431c2ae4e405e2d47dea..d3e470d1dbfbe2a7e2edf6368c439ee66addfcfb 100644 --- a/config/tftf-base.yaml +++ b/config/tftf-base.yaml @@ -12,7 +12,7 @@ build: tftf: repo: remote: https://git.trustedfirmware.org/TF-A/tf-a-tests.git - revision: v2.9 + revision: v2.10 toolchain: aarch64-none-elf- @@ -20,8 +20,9 @@ build: PLAT: fvp build: - # TODO: tfa-tests has makefile dependency bug that prevents parallel make (-j > 1). - - make BUILD_BASE=${param:builddir} ${param:join_equal} all pack_realm + # tfa-tests has makefile dependency bug that makes parallel make for more + # than ~8 jobs unreliable, so limit it to 8. + - "make BUILD_BASE=${param:builddir} ${param:join_equal} -j$$(( ${param:jobs} < 8 ? ${param:jobs} : 8 )) all pack_realm" clean: - make BUILD_BASE=${param:builddir} realclean diff --git a/docker/Dockerfile.slim b/docker/Dockerfile.slim index c023fdd74ebadbb8184090186ff49b866ae9acf8..6e6a5ca0cb0b538c2dd5637384b138d0017f0724 100644 --- a/docker/Dockerfile.slim +++ b/docker/Dockerfile.slim @@ -13,6 +13,15 @@ RUN apt-get update \ && (timeout --signal=KILL 10s auto-apt-proxy \ || apt-get purge --quiet --assume-yes auto-apt-proxy) +# Explicitly install Python and create a venv for pip packages, since Debian +# does not allow us to install pip packages system-wide. +RUN apt-get install --assume-yes --no-install-recommends --option=debug::pkgProblemResolver=yes \ + python3 \ + python3-pip \ + python3-venv +RUN python3 -m venv /pyvenv +ENV PATH="/pyvenv/bin:${PATH}" + # We now install packages required by all the FW components that Shrinkwrap # supports building. Often there are overlapping components, but we (re)specify # them for each component in order to keep track of who needs what. @@ -96,7 +105,7 @@ RUN apt-get install --assume-yes --no-install-recommends --option=debug::pkgProb libusb-1.0-0-dev \ make \ mtools \ - netcat \ + netcat-openbsd \ ninja-build \ python3-cryptography \ python3-pip \ diff --git a/docker/build.sh b/docker/build.sh index aa0281392c586503c00989d6940b046ae77439d7..528f7721f0c47cf96dc5f79d1d8091848ea41eb5 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -31,32 +31,32 @@ REGISTRY=shrinkwraptool # Configure the arch-specific variables which are passed to the Dockerfile. if [ "${ARCH}" == "x86_64" ]; then - TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel - TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-elf.tar.xz - TCH_PATH_AARCH64=arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-elf/bin + TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel + TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-elf.tar.xz + TCH_PATH_AARCH64=arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/bin TCH_LLVM_PKG_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6 TCH_LLVM_PKG_NAME=clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz TCH_LLVM_PATH=clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04/bin - TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel - TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz - TCH_PATH_AARCH32=arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin + TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel + TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz + TCH_PATH_AARCH32=arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin FVP_PKG_URL=https://developer.arm.com/-/media/Files/downloads/ecosystem-models - FVP_PKG_NAME=FVP_Base_RevC-2xAEMvA_11.23_9_Linux64.tgz + FVP_PKG_NAME=FVP_Base_RevC-2xAEMvA_11.24_11_Linux64.tgz FVP_MODEL_DIR=Base_RevC_AEMvA_pkg/models/Linux64_GCC-9.3 FVP_PLUGIN_DIR=Base_RevC_AEMvA_pkg/plugins/Linux64_GCC-9.3 # ARCH is "aarch64" on Ubuntu, or "arm" on Mac OS elif [ "${ARCH}" == "aarch64" ] || [ "${ARCH}" == "arm" ]; then - TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel - TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-11.3.rel1-aarch64-aarch64-none-elf.tar.xz - TCH_PATH_AARCH64=arm-gnu-toolchain-11.3.rel1-aarch64-aarch64-none-elf/bin + TCH_PKG_URL_AARCH64=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel + TCH_PKG_NAME_AARCH64=arm-gnu-toolchain-13.2.rel1-aarch64-aarch64-none-elf.tar.xz + TCH_PATH_AARCH64=arm-gnu-toolchain-13.2.Rel1-aarch64-aarch64-none-elf/bin TCH_LLVM_PKG_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6 TCH_LLVM_PKG_NAME=clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz TCH_LLVM_PATH=clang+llvm-15.0.6-aarch64-linux-gnu/bin - TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel - TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-11.3.rel1-aarch64-arm-none-eabi.tar.xz - TCH_PATH_AARCH32=arm-gnu-toolchain-11.3.rel1-aarch64-arm-none-eabi/bin + TCH_PKG_URL_AARCH32=https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel + TCH_PKG_NAME_AARCH32=arm-gnu-toolchain-13.2.rel1-aarch64-arm-none-eabi.tar.xz + TCH_PATH_AARCH32=arm-gnu-toolchain-13.2.Rel1-aarch64-arm-none-eabi/bin FVP_PKG_URL=https://developer.arm.com/-/media/Files/downloads/ecosystem-models - FVP_PKG_NAME=FVP_Base_RevC-2xAEMvA_11.23_9_Linux64_armv8l.tgz + FVP_PKG_NAME=FVP_Base_RevC-2xAEMvA_11.24_11_Linux64_armv8l.tgz FVP_MODEL_DIR=Base_RevC_AEMvA_pkg/models/Linux64_armv8l_GCC-9.3 FVP_PLUGIN_DIR=Base_RevC_AEMvA_pkg/plugins/Linux64_armv8l_GCC-9.3 else @@ -72,7 +72,7 @@ wget -q -O ${TCH_LLVM_PKG_NAME} ${TCH_LLVM_PKG_URL}/${TCH_LLVM_PKG_NAME} wget -q -O ${TCH_PKG_NAME_AARCH32} ${TCH_PKG_URL_AARCH32}/${TCH_PKG_NAME_AARCH32} wget -q -O ${FVP_PKG_NAME} ${FVP_PKG_URL}/${FVP_PKG_NAME} docker build \ - --build-arg=BASE=docker.io/library/debian:bullseye-slim \ + --build-arg=BASE=docker.io/library/debian:bookworm-slim \ --build-arg=TCH_PKG_NAME_AARCH64=${TCH_PKG_NAME_AARCH64} \ --build-arg=TCH_PATH_AARCH64=${TCH_PATH_AARCH64} \ --file=Dockerfile.slim \ diff --git a/documentation/_scripts/genconfigstore.py b/documentation/_scripts/genconfigstore.py index 6dbe90ebb995bd1b079e0d72905dc87da3a61737..e8e32b097e92059a3871b4d3a2ea85ed812f49f3 100755 --- a/documentation/_scripts/genconfigstore.py +++ b/documentation/_scripts/genconfigstore.py @@ -97,7 +97,7 @@ cfgs_raw = subprocess.run('shrinkwrap inspect --json', cfgs = json.loads(cfgs_raw) -docsdir = os.path.dirname(os.path.dirname(__file__)) +docsdir = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) docsdir = os.path.join(docsdir, 'userguide', 'configstore') with open(os.path.join(docsdir, 'index.rst'), 'w') as indexf: diff --git a/documentation/userguide/configstore/cca-3world.rst b/documentation/userguide/configstore/cca-3world.rst index 358ae0050cc05e5c6dcdd0318848f259e98b1009..9a221382a2532296e284bb9f07c9c73eaad6309f 100644 --- a/documentation/userguide/configstore/cca-3world.rst +++ b/documentation/userguide/configstore/cca-3world.rst @@ -79,16 +79,16 @@ GUEST_ROOTFS Run-Time Variables ################## -============== ====================================================================== +============== =============================================================== rtvar default -============== ====================================================================== +============== =============================================================== LOCAL_NET_PORT 8022 BL1 ${artifact:BL1} FIP ${artifact:FIP} DTB ${artifact:DTB} -CMDLINE mem=1G console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp +CMDLINE console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp KERNEL ${artifact:KERNEL} ROOTFS EDK2FLASH ${artifact:EDK2FLASH} -============== ====================================================================== +============== =============================================================== diff --git a/documentation/userguide/configstore/cca-4world.rst b/documentation/userguide/configstore/cca-4world.rst index 776c13d32a3fcf745f9192009b19c41cc72ba793..0fd6a1d6d56e8ed850c9da88e98f1ea7445d74a8 100644 --- a/documentation/userguide/configstore/cca-4world.rst +++ b/documentation/userguide/configstore/cca-4world.rst @@ -29,16 +29,16 @@ GUEST_ROOTFS Run-Time Variables ################## -============== ====================================================================== -rtvar default -============== ====================================================================== -LOCAL_NET_PORT 8022 -BL1 ${artifact:BL1} -FIP ${artifact:FIP} -DTB ${artifact:DTB} -CMDLINE mem=1G console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp -KERNEL ${artifact:KERNEL} -ROOTFS -EDK2FLASH ${artifact:EDK2FLASH} -============== ====================================================================== +============== =============================================================== +rtvar default +============== =============================================================== +LOCAL_NET_PORT 8022 +BL1 ${artifact:BL1} +FIP ${artifact:FIP} +DTB ${artifact:DTB} +CMDLINE console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp +KERNEL ${artifact:KERNEL} +ROOTFS +EDK2FLASH ${artifact:EDK2FLASH} +============== =============================================================== diff --git a/test/assets/genassets.sh b/test/assets/genassets.sh index df1fbc9f0e8d686536c810c462973a4b86f62f95..35373f0e5d14993b564764740537ed6da988c38d 100755 --- a/test/assets/genassets.sh +++ b/test/assets/genassets.sh @@ -49,7 +49,7 @@ cd - # Build Linux defconfig. git clone https://github.com/torvalds/linux.git cd linux -git checkout v6.0 +git checkout v6.6 make defconfig make -j`nproc` Image arm/fvp-base-revc.dtb cp arch/arm64/boot/Image ${ASSETS_DIR}/. diff --git a/test/test.py b/test/test.py index a4f66b9613c96bc66cc05d958a51eace8a92a33c..a55d3225af907db5b9649cbf67874bd1a65067eb 100755 --- a/test/test.py +++ b/test/test.py @@ -6,6 +6,7 @@ import argparse import json import os +import re import subprocess import tempfile import yaml @@ -21,45 +22,91 @@ BOOTWRAPPER = os.path.join(ASSETS, 'linux-system.axf') ROOTFS = os.path.join(ASSETS, 'rootfs.ext4') +ARCH_LATEST = 'v9.5' CONFIGS = [ { 'config': 'ns-preload.yaml', 'btvars': {}, - 'rtvars': {}, + 'rtvars': {'KERNEL': KERNEL, 'ROOTFS': ROOTFS}, + 'arch': {'start': 'v8.0', 'end': ARCH_LATEST}, }, { 'config': 'ns-edk2.yaml', 'btvars': {}, - 'rtvars': {}, + 'rtvars': {'KERNEL': KERNEL, 'ROOTFS': ROOTFS}, + 'arch': {'start': 'v8.0', 'end': ARCH_LATEST}, }, { 'config': 'ns-edk2.yaml', 'btvars': {}, - 'rtvars': {'CMDLINE': '\"console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp acpi=force\"'}, + 'rtvars': { + 'KERNEL': KERNEL, + 'ROOTFS': ROOTFS, + 'CMDLINE': '\"console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp acpi=force\"' + }, + 'arch': {'start': 'v8.0', 'end': ARCH_LATEST}, + }, + { + 'config': 'ffa-tftf.yaml', + 'btvars': {}, + 'rtvars': {'KERNEL': KERNEL, 'ROOTFS': ROOTFS}, + 'arch': {'start': 'v8.5', 'end': 'v8.7'}, # BL2 freezes from v8.8. Haven't traced root cause yet. + }, + { + 'config': 'ffa-tftf.yaml', + 'btvars': {}, + 'rtvars': { + 'KERNEL': KERNEL, + 'ROOTFS': ROOTFS, + 'CMDLINE': '\"console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp acpi=force\"' + }, + 'arch': {'start': 'v8.5', 'end': 'v8.7'}, # BL2 freezes from v8.8. Haven't traced root cause yet. + }, + { + 'config': 'bootwrapper.yaml', + 'btvars': {}, + 'rtvars': {'BOOTWRAPPER': BOOTWRAPPER, 'ROOTFS': ROOTFS}, + 'arch': {'start': 'v8.0', 'end': ARCH_LATEST}, }, ] -ARCHES = [ - 'arch/v8.0.yaml', - 'arch/v8.1.yaml', - 'arch/v8.2.yaml', - 'arch/v8.3.yaml', - 'arch/v8.4.yaml', - 'arch/v8.5.yaml', - 'arch/v8.6.yaml', - 'arch/v8.7.yaml', - 'arch/v8.8.yaml', - 'arch/v8.9.yaml', - 'arch/v9.0.yaml', - 'arch/v9.1.yaml', - 'arch/v9.2.yaml', - 'arch/v9.3.yaml', - 'arch/v9.4.yaml', -] +results = [] +arch_regex = re.compile(r"^v(\d+\.\d)$") -results = [] +def arch_range(start, end): + """ + Given a start and end version string (in format "vX.Y"), yields all + version strings between start and end, inclusive of both start and end. + """ + match_s = arch_regex.match(start) + match_e = arch_regex.match(end) + + start = int(float(match_s.group(1)) * 10) + end = int(float(match_e.group(1)) * 10) + + for version in range(start, end + 1): + major = version // 10 + minor = version - major * 10 + yield f'v{major}.{minor}' + + +def arch_in_range(arch, start, end): + """ + Given an arch version and a start and end version string (all in format + "vX.Y"), returns true if arch is within the range, inclusive of both + start and end. + """ + match_a = arch_regex.match(arch) + match_s = arch_regex.match(start) + match_e = arch_regex.match(end) + + arch = float(match_a.group(1)) + start = float(match_s.group(1)) + end = float(match_e.group(1)) + + return start <= arch and arch <= end def print_result(r): @@ -185,47 +232,36 @@ def run_config(config, overlay=None, runargs=None, runtime=600): results.append(result) -def run_config_kern(config, kernel, rootfs, overlay=None, runtime=600, rtvars={}): - kernel = f'-r KERNEL={kernel}' - rootfs = f'-r ROOTFS={rootfs}' - - rtcmds = '' - for k, v in rtvars.items(): - rtcmds += f'-r {k}={v}' - - run_config(config, overlay, f'{kernel} {rootfs} {rtcmds}', runtime) - - -def run_config_bootwrap(config, bootwrap, rootfs, overlay=None, runtime=600): - bootwrap = f'-r BOOTWRAPPER={bootwrap}' - rootfs = f'-r ROOTFS={rootfs}' - run_config(config, overlay, f'{bootwrap} {rootfs}', runtime) +def make_rtcmds(rtvars): + return ' '.join([f'-r {k}={v}' for k, v in rtvars.items()]) def do_main(smoke_test): - arches = [ARCHES[-1]] if smoke_test else ARCHES + if smoke_test: + arches = set([c['arch']['end'] for c in CONFIGS]) + else: + arches = list(arch_range('v8.0', ARCH_LATEST)) for arch in arches: - configs = [c['config'] for c in CONFIGS] - btvarss = [c['btvars'] for c in CONFIGS] - rtvarss = [c['rtvars'] for c in CONFIGS] - build_configs(configs, arch, btvarss=btvarss) + configs = [c['config'] for c in CONFIGS if arch_in_range(arch, c['arch']['end'] if smoke_test else c['arch']['start'], c['arch']['end'])] + btvarss = [c['btvars'] for c in CONFIGS if arch_in_range(arch, c['arch']['end'] if smoke_test else c['arch']['start'], c['arch']['end'])] + rtvarss = [c['rtvars'] for c in CONFIGS if arch_in_range(arch, c['arch']['end'] if smoke_test else c['arch']['start'], c['arch']['end'])] + if len(configs) == 0: + continue + build_configs(configs, f'arch/{arch}.yaml', btvarss=btvarss) for config, rtvars in zip(configs, rtvarss): - run_config_kern(config, KERNEL, ROOTFS, arch, rtvars=rtvars) - - for arch in arches: - build_configs(['bootwrapper.yaml'], arch) - run_config_bootwrap('bootwrapper.yaml', BOOTWRAPPER, ROOTFS, arch) + run_config(config, f'arch/{arch}.yaml', make_rtcmds(rtvars)) + # Special-case configs that don't support arch overrides. build_configs(['cca-3world.yaml', 'cca-4world.yaml'], btvarss=[ {'GUEST_ROOTFS': ROOTFS}, {'GUEST_ROOTFS': ROOTFS} ]) - run_config_kern('cca-3world.yaml', KERNEL, ROOTFS) + run_config('cca-3world.yaml', None, make_rtcmds({'KERNEL': KERNEL, 'ROOTFS': ROOTFS})) # TODO: Disabled due to Hafnium requiring MTE but RMM does not support # it. Reenable when Hafnium fixed to remove dependency. - # run_config_kern('cca-4world.yaml', KERNEL, ROOTFS) + # run_config('cca-4world.yaml', None, make_rtcmds({'KERNEL': KERNEL, 'ROOTFS': ROOTFS})) print_results()