10d77c908SPierrick Bouvier#!/usr/bin/env python3 20d77c908SPierrick Bouvier# 30d77c908SPierrick Bouvier# Functional test that boots a Realms environment on sbsa-ref machine and a 40d77c908SPierrick Bouvier# nested guest VM using it. 50d77c908SPierrick Bouvier# 60d77c908SPierrick Bouvier# Copyright (c) 2024 Linaro Ltd. 70d77c908SPierrick Bouvier# 80d77c908SPierrick Bouvier# Author: Pierrick Bouvier <pierrick.bouvier@linaro.org> 90d77c908SPierrick Bouvier# 100d77c908SPierrick Bouvier# SPDX-License-Identifier: GPL-2.0-or-later 110d77c908SPierrick Bouvier 120d77c908SPierrick Bouvierimport os 130d77c908SPierrick Bouvier 14*99fb9256SThomas Huthfrom qemu_test import QemuSystemTest, Asset, wait_for_console_pattern 150d77c908SPierrick Bouvierfrom qemu_test import exec_command_and_wait_for_pattern 160d77c908SPierrick Bouvierfrom test_aarch64_rme_virt import test_realms_guest 170d77c908SPierrick Bouvier 18*99fb9256SThomas Huth 190d77c908SPierrick Bouvierclass Aarch64RMESbsaRefMachine(QemuSystemTest): 200d77c908SPierrick Bouvier 210d77c908SPierrick Bouvier # Stack is built with OP-TEE build environment from those instructions: 220d77c908SPierrick Bouvier # https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/ 230d77c908SPierrick Bouvier # https://github.com/pbo-linaro/qemu-rme-stack 240d77c908SPierrick Bouvier ASSET_RME_STACK_SBSA = Asset( 250d77c908SPierrick Bouvier ('https://fileserver.linaro.org/s/KJyeBxL82mz2r7F/' 260d77c908SPierrick Bouvier 'download/rme-stack-op-tee-4.2.0-cca-v4-sbsa.tar.gz'), 270d77c908SPierrick Bouvier 'dd9ab28ec869bdf3b5376116cb3689103b43433fd5c4bca0f4a8d8b3c104999e') 280d77c908SPierrick Bouvier 290d77c908SPierrick Bouvier # This tests the FEAT_RME cpu implementation, by booting a VM supporting it, 300d77c908SPierrick Bouvier # and launching a nested VM using it. 310d77c908SPierrick Bouvier def test_aarch64_rme_sbsaref(self): 320d77c908SPierrick Bouvier self.set_machine('sbsa-ref') 330d77c908SPierrick Bouvier self.require_accelerator('tcg') 34dba0752fSThomas Huth self.require_netdev('user') 350d77c908SPierrick Bouvier 360d77c908SPierrick Bouvier self.vm.set_console() 370d77c908SPierrick Bouvier 380d77c908SPierrick Bouvier stack_path_tar_gz = self.ASSET_RME_STACK_SBSA.fetch() 390d77c908SPierrick Bouvier self.archive_extract(stack_path_tar_gz, format="tar") 400d77c908SPierrick Bouvier 410d77c908SPierrick Bouvier rme_stack = self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-sbsa') 420d77c908SPierrick Bouvier pflash0 = os.path.join(rme_stack, 'images', 'SBSA_FLASH0.fd') 430d77c908SPierrick Bouvier pflash1 = os.path.join(rme_stack, 'images', 'SBSA_FLASH1.fd') 440d77c908SPierrick Bouvier virtual = os.path.join(rme_stack, 'images', 'disks', 'virtual') 450d77c908SPierrick Bouvier drive = os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4') 460d77c908SPierrick Bouvier 470d77c908SPierrick Bouvier self.vm.add_args('-cpu', 'max,x-rme=on,pauth-impdef=on') 480d77c908SPierrick Bouvier self.vm.add_args('-m', '2G') 490d77c908SPierrick Bouvier self.vm.add_args('-M', 'sbsa-ref') 500d77c908SPierrick Bouvier self.vm.add_args('-drive', f'file={pflash0},format=raw,if=pflash') 510d77c908SPierrick Bouvier self.vm.add_args('-drive', f'file={pflash1},format=raw,if=pflash') 520d77c908SPierrick Bouvier self.vm.add_args('-drive', f'file=fat:rw:{virtual},format=raw') 530d77c908SPierrick Bouvier self.vm.add_args('-drive', f'format=raw,if=none,file={drive},id=hd0') 540d77c908SPierrick Bouvier self.vm.add_args('-device', 'virtio-blk-pci,drive=hd0') 550d77c908SPierrick Bouvier self.vm.add_args('-device', 'virtio-9p-pci,fsdev=shr0,mount_tag=shr0') 560d77c908SPierrick Bouvier self.vm.add_args('-fsdev', f'local,security_model=none,path={rme_stack},id=shr0') 570d77c908SPierrick Bouvier self.vm.add_args('-device', 'virtio-net-pci,netdev=net0') 580d77c908SPierrick Bouvier self.vm.add_args('-netdev', 'user,id=net0') 590d77c908SPierrick Bouvier 600d77c908SPierrick Bouvier self.vm.launch() 610d77c908SPierrick Bouvier # Wait for host VM boot to complete. 622a8e8544SPierrick Bouvier wait_for_console_pattern(self, 'Welcome to Buildroot', 632a8e8544SPierrick Bouvier failure_message='Synchronous Exception at') 640d77c908SPierrick Bouvier exec_command_and_wait_for_pattern(self, 'root', '#') 650d77c908SPierrick Bouvier 660d77c908SPierrick Bouvier test_realms_guest(self) 670d77c908SPierrick Bouvier 680d77c908SPierrick Bouvierif __name__ == '__main__': 690d77c908SPierrick Bouvier QemuSystemTest.main() 70