As the builds in codelinaro.org are going away migrate the binaries to share.linaro.org. As the hotlinks don't encode the filename we need to explicitly tell uncompress how to handle the files. Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Message-ID: <20260128105839.3487840-3-alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> (cherry picked from commit d9ca273f8f31acb22d3f5aca5f063b94fb962e19) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
99 lines
3 KiB
Python
Executable file
99 lines
3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# Functional test that boots a kernel and checks the console
|
|
#
|
|
# Copyright (c) 2023-2024 Linaro Ltd.
|
|
#
|
|
# Authors:
|
|
# Philippe Mathieu-Daudé
|
|
# Marcin Juszkiewicz
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
from qemu_test import QemuSystemTest, Asset
|
|
from qemu_test import wait_for_console_pattern
|
|
from qemu_test import interrupt_interactive_console_until_pattern
|
|
|
|
|
|
def fetch_firmware(test):
|
|
"""
|
|
Flash volumes generated using:
|
|
|
|
Toolchain from Debian:
|
|
aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0
|
|
|
|
Used components:
|
|
|
|
- Trusted Firmware v2.12.0
|
|
- Tianocore EDK2 edk2-stable202411
|
|
- Tianocore EDK2-platforms 4b3530d
|
|
|
|
"""
|
|
|
|
# Secure BootRom (TF-A code)
|
|
fs0_path = test.uncompress(Aarch64SbsarefMachine.ASSET_FLASH0, format="xz")
|
|
|
|
# Non-secure rom (UEFI and EFI variables)
|
|
fs1_path = test.uncompress(Aarch64SbsarefMachine.ASSET_FLASH1, format="xz")
|
|
|
|
for path in [fs0_path, fs1_path]:
|
|
with open(path, "ab+") as fd:
|
|
fd.truncate(256 << 20) # Expand volumes to 256MiB
|
|
|
|
test.vm.add_args(
|
|
"-drive", f"if=pflash,file={fs0_path},format=raw",
|
|
"-drive", f"if=pflash,file={fs1_path},format=raw",
|
|
)
|
|
|
|
|
|
class Aarch64SbsarefMachine(QemuSystemTest):
|
|
"""
|
|
As firmware runs at a higher privilege level than the hypervisor we
|
|
can only run these tests under TCG emulation.
|
|
"""
|
|
|
|
timeout = 180
|
|
|
|
# SBSA_FLASH0.fd.xz
|
|
ASSET_FLASH0 = Asset('https://share.linaro.org/downloadFile?id=kyoMLGC9zXa4oA7',
|
|
'76eb89d42eebe324e4395329f47447cda9ac920aabcf99aca85424609c3384a5')
|
|
|
|
# SBSA_FLASH1.fd.xz
|
|
ASSET_FLASH1 = Asset('https://share.linaro.org/downloadFile?id=Dj1HRXnDnKtU6Nj',
|
|
'f850f243bd8dbd49c51e061e0f79f1697546938f454aeb59ab7d93e5f0d412fc')
|
|
|
|
def test_sbsaref_edk2_firmware(self):
|
|
|
|
self.set_machine('sbsa-ref')
|
|
|
|
fetch_firmware(self)
|
|
|
|
self.vm.set_console()
|
|
self.vm.add_args('-cpu', 'cortex-a57')
|
|
self.vm.launch()
|
|
|
|
# TF-A boot sequence:
|
|
#
|
|
# https://github.com/ARM-software/arm-trusted-firmware/blob/v2.8.0/\
|
|
# docs/design/trusted-board-boot.rst#trusted-board-boot-sequence
|
|
# https://trustedfirmware-a.readthedocs.io/en/v2.8/\
|
|
# design/firmware-design.html#cold-boot
|
|
|
|
# AP Trusted ROM
|
|
wait_for_console_pattern(self, "Booting Trusted Firmware")
|
|
wait_for_console_pattern(self, "BL1: v2.12.0(release):")
|
|
wait_for_console_pattern(self, "BL1: Booting BL2")
|
|
|
|
# Trusted Boot Firmware
|
|
wait_for_console_pattern(self, "BL2: v2.12.0(release)")
|
|
wait_for_console_pattern(self, "Booting BL31")
|
|
|
|
# EL3 Runtime Software
|
|
wait_for_console_pattern(self, "BL31: v2.12.0(release)")
|
|
|
|
# Non-trusted Firmware
|
|
wait_for_console_pattern(self, "UEFI firmware (version 1.0")
|
|
interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF Machine")
|
|
|
|
if __name__ == '__main__':
|
|
QemuSystemTest.main()
|