xref: /qemu/tests/functional/test_aarch64_sbsaref.py (revision 65d35a4e27a808370bac40c06c1e24d30461b0eb)
18f16cd80SPhilippe Mathieu-Daudé#!/usr/bin/env python3
28f16cd80SPhilippe Mathieu-Daudé#
372b543e6SMarcin Juszkiewicz# Functional test that boots a kernel and checks the console
48f16cd80SPhilippe Mathieu-Daudé#
58f16cd80SPhilippe Mathieu-Daudé# SPDX-FileCopyrightText: 2023-2024 Linaro Ltd.
68f16cd80SPhilippe Mathieu-Daudé# SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org>
78f16cd80SPhilippe Mathieu-Daudé# SPDX-FileContributor: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
88f16cd80SPhilippe Mathieu-Daudé#
98f16cd80SPhilippe Mathieu-Daudé# SPDX-License-Identifier: GPL-2.0-or-later
108f16cd80SPhilippe Mathieu-Daudé
118f16cd80SPhilippe Mathieu-Daudéfrom qemu_test import QemuSystemTest, Asset
128f16cd80SPhilippe Mathieu-Daudéfrom qemu_test import wait_for_console_pattern
138f16cd80SPhilippe Mathieu-Daudéfrom qemu_test import interrupt_interactive_console_until_pattern
14*65d35a4eSDaniel P. Berrangé
158f16cd80SPhilippe Mathieu-Daudé
169acd3884SThomas Huthdef fetch_firmware(test):
179acd3884SThomas Huth    """
189acd3884SThomas Huth    Flash volumes generated using:
199acd3884SThomas Huth
209acd3884SThomas Huth    Toolchain from Debian:
219acd3884SThomas Huth    aarch64-linux-gnu-gcc (Debian 12.2.0-14) 12.2.0
229acd3884SThomas Huth
239acd3884SThomas Huth    Used components:
249acd3884SThomas Huth
259acd3884SThomas Huth    - Trusted Firmware         v2.11.0
269acd3884SThomas Huth    - Tianocore EDK2           4d4f569924
279acd3884SThomas Huth    - Tianocore EDK2-platforms 3f08401
289acd3884SThomas Huth
299acd3884SThomas Huth    """
309acd3884SThomas Huth
319acd3884SThomas Huth    # Secure BootRom (TF-A code)
32*65d35a4eSDaniel P. Berrangé    fs0_path = test.uncompress(Aarch64SbsarefMachine.ASSET_FLASH0)
339acd3884SThomas Huth
349acd3884SThomas Huth    # Non-secure rom (UEFI and EFI variables)
35*65d35a4eSDaniel P. Berrangé    fs1_path = test.uncompress(Aarch64SbsarefMachine.ASSET_FLASH1)
369acd3884SThomas Huth
379acd3884SThomas Huth    for path in [fs0_path, fs1_path]:
389acd3884SThomas Huth        with open(path, "ab+") as fd:
399acd3884SThomas Huth            fd.truncate(256 << 20)  # Expand volumes to 256MiB
409acd3884SThomas Huth
419acd3884SThomas Huth    test.set_machine('sbsa-ref')
429acd3884SThomas Huth    test.vm.set_console()
439acd3884SThomas Huth    test.vm.add_args(
449acd3884SThomas Huth        "-drive", f"if=pflash,file={fs0_path},format=raw",
459acd3884SThomas Huth        "-drive", f"if=pflash,file={fs1_path},format=raw",
469acd3884SThomas Huth    )
479acd3884SThomas Huth
488f16cd80SPhilippe Mathieu-Daudé
498f16cd80SPhilippe Mathieu-Daudéclass Aarch64SbsarefMachine(QemuSystemTest):
508f16cd80SPhilippe Mathieu-Daudé    """
518f16cd80SPhilippe Mathieu-Daudé    As firmware runs at a higher privilege level than the hypervisor we
528f16cd80SPhilippe Mathieu-Daudé    can only run these tests under TCG emulation.
538f16cd80SPhilippe Mathieu-Daudé    """
548f16cd80SPhilippe Mathieu-Daudé
558f16cd80SPhilippe Mathieu-Daudé    timeout = 180
568f16cd80SPhilippe Mathieu-Daudé
578f16cd80SPhilippe Mathieu-Daudé    ASSET_FLASH0 = Asset(
588f16cd80SPhilippe Mathieu-Daudé        ('https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/'
598f16cd80SPhilippe Mathieu-Daudé         '20240619-148232/edk2/SBSA_FLASH0.fd.xz'),
608f16cd80SPhilippe Mathieu-Daudé        '0c954842a590988f526984de22e21ae0ab9cb351a0c99a8a58e928f0c7359cf7')
618f16cd80SPhilippe Mathieu-Daudé
628f16cd80SPhilippe Mathieu-Daudé    ASSET_FLASH1 = Asset(
638f16cd80SPhilippe Mathieu-Daudé        ('https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/'
648f16cd80SPhilippe Mathieu-Daudé         '20240619-148232/edk2/SBSA_FLASH1.fd.xz'),
658f16cd80SPhilippe Mathieu-Daudé        'c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee')
668f16cd80SPhilippe Mathieu-Daudé
678f16cd80SPhilippe Mathieu-Daudé    def test_sbsaref_edk2_firmware(self):
688f16cd80SPhilippe Mathieu-Daudé
699acd3884SThomas Huth        fetch_firmware(self)
708f16cd80SPhilippe Mathieu-Daudé
718f16cd80SPhilippe Mathieu-Daudé        self.vm.add_args('-cpu', 'cortex-a57')
728f16cd80SPhilippe Mathieu-Daudé        self.vm.launch()
738f16cd80SPhilippe Mathieu-Daudé
748f16cd80SPhilippe Mathieu-Daudé        # TF-A boot sequence:
758f16cd80SPhilippe Mathieu-Daudé        #
768f16cd80SPhilippe Mathieu-Daudé        # https://github.com/ARM-software/arm-trusted-firmware/blob/v2.8.0/\
778f16cd80SPhilippe Mathieu-Daudé        #     docs/design/trusted-board-boot.rst#trusted-board-boot-sequence
788f16cd80SPhilippe Mathieu-Daudé        # https://trustedfirmware-a.readthedocs.io/en/v2.8/\
798f16cd80SPhilippe Mathieu-Daudé        #     design/firmware-design.html#cold-boot
808f16cd80SPhilippe Mathieu-Daudé
818f16cd80SPhilippe Mathieu-Daudé        # AP Trusted ROM
828f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "Booting Trusted Firmware")
838f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "BL1: v2.11.0(release):")
848f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "BL1: Booting BL2")
858f16cd80SPhilippe Mathieu-Daudé
868f16cd80SPhilippe Mathieu-Daudé        # Trusted Boot Firmware
878f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "BL2: v2.11.0(release)")
888f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "Booting BL31")
898f16cd80SPhilippe Mathieu-Daudé
908f16cd80SPhilippe Mathieu-Daudé        # EL3 Runtime Software
918f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "BL31: v2.11.0(release)")
928f16cd80SPhilippe Mathieu-Daudé
938f16cd80SPhilippe Mathieu-Daudé        # Non-trusted Firmware
948f16cd80SPhilippe Mathieu-Daudé        wait_for_console_pattern(self, "UEFI firmware (version 1.0")
958f16cd80SPhilippe Mathieu-Daudé        interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF Machine")
968f16cd80SPhilippe Mathieu-Daudé
978f16cd80SPhilippe Mathieu-Daudéif __name__ == '__main__':
988f16cd80SPhilippe Mathieu-Daudé    QemuSystemTest.main()
99