xref: /kvm-unit-tests/arm/run (revision cf5286ad78e97845f24b1dff7089e1b39cba1912)
11b7dd7d3SSergey Bronnikov#!/usr/bin/env bash
25e61cba0SAndrew Jones
357ab5a6dSThomas Huthif [ -z "$KUT_STANDALONE" ]; then
45e61cba0SAndrew Jones	if [ ! -f config.mak ]; then
5b6ff178dSAndrew Jones		echo "run ./configure && make first. See ./configure -h"
65e61cba0SAndrew Jones		exit 2
75e61cba0SAndrew Jones	fi
85e61cba0SAndrew Jones	source config.mak
9b2a2aa5dSAndrew Jones	source scripts/arch-run.bash
109fcec1dbSAlexandru Elisei	source scripts/vmm.bash
11b6ff178dSAndrew Jonesfi
129fcec1dbSAlexandru Elisei
139fcec1dbSAlexandru Eliseivmm_check_supported
149fcec1dbSAlexandru Elisei
15db9c4e1cSAlexandru Eliseifunction arch_run_qemu()
16db9c4e1cSAlexandru Elisei{
175f77b72dSJean-Philippe Brucker	qemu_cpu="$TARGET_CPU"
185e61cba0SAndrew Jones
1901e047d0SGavin Shan	if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
2001e047d0SGavin Shan	   [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
2101e047d0SGavin Shan	   [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
2201e047d0SGavin Shan		ACCEL="tcg"
2301e047d0SGavin Shan	fi
240601b85cSAndrew Jones
2501e047d0SGavin Shan	set_qemu_accelerator || exit $?
2601e047d0SGavin Shan	if [ "$ACCEL" = "kvm" ]; then
27ee5a8a1aSAndrew Jones		QEMU_ARCH=$HOST
28ee5a8a1aSAndrew Jones	fi
29ee5a8a1aSAndrew Jones
30fcf4e0d9SRadim Krčmář	qemu=$(search_qemu_binary) ||
31fcf4e0d9SRadim Krčmář		exit $?
325e61cba0SAndrew Jones
33d5be1090SShaoqin Huang	if ! $qemu -machine '?' | grep -q 'ARM Virtual Machine'; then
344b968505SBalamuruhan S		echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting."
355e61cba0SAndrew Jones		exit 2
365e61cba0SAndrew Jones	fi
375e61cba0SAndrew Jones
385e61cba0SAndrew Jones	M='-machine virt'
395e61cba0SAndrew Jones
40d9729025SAndrew Jones	if [ "$ACCEL" = "kvm" ]; then
41d5be1090SShaoqin Huang		if $qemu $M,\? | grep -q gic-version; then
42d9729025SAndrew Jones			M+=',gic-version=host'
43d9729025SAndrew Jones		fi
44c157b6e2SNikos Nikoleris	fi
45c157b6e2SNikos Nikoleris
465f77b72dSJean-Philippe Brucker	if [ -z "$qemu_cpu" ]; then
475f77b72dSJean-Philippe Brucker		if ( [ "$ACCEL" = "kvm" ] || [ "$ACCEL" = "hvf" ] ) &&
485f77b72dSJean-Philippe Brucker		   ( [ "$HOST" = "aarch64" ] || [ "$HOST" = "arm" ] ); then
495f77b72dSJean-Philippe Brucker			qemu_cpu="host"
5067c2cc50SAlex Bennée			if [ "$ARCH" = "arm" ] && [ "$HOST" = "aarch64" ]; then
515f77b72dSJean-Philippe Brucker				qemu_cpu+=",aarch64=off"
52d9729025SAndrew Jones			fi
535f77b72dSJean-Philippe Brucker		else
545f77b72dSJean-Philippe Brucker			qemu_cpu="$DEFAULT_QEMU_CPU"
55d9729025SAndrew Jones		fi
56d9729025SAndrew Jones	fi
57d9729025SAndrew Jones
581f0a5c19SAndrew Jones	if [ "$ARCH" = "arm" ]; then
591f0a5c19SAndrew Jones		M+=",highmem=off"
601f0a5c19SAndrew Jones	fi
611f0a5c19SAndrew Jones
62d5be1090SShaoqin Huang	if ! $qemu $M -device '?' | grep -q virtconsole; then
634b968505SBalamuruhan S		echo "$qemu doesn't support virtio-console for chr-testdev. Exiting."
645e61cba0SAndrew Jones		exit 2
655e61cba0SAndrew Jones	fi
665e61cba0SAndrew Jones
6729e06611SShaoqin Huang	if ! $qemu $M -chardev '?' | grep -q testdev; then
684b968505SBalamuruhan S		echo "$qemu doesn't support chr-testdev. Exiting."
695e61cba0SAndrew Jones		exit 2
705e61cba0SAndrew Jones	fi
715e61cba0SAndrew Jones
725ded2989SAndrew Jones	if [ "$UEFI_SHELL_RUN" != "y" ] && [ "$EFI_USE_ACPI" != "y" ]; then
735e61cba0SAndrew Jones		chr_testdev='-device virtio-serial-device'
745e61cba0SAndrew Jones		chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
752607d2d6SNikos Nikoleris	fi
765e61cba0SAndrew Jones
77f7f81c6aSAlexander Gordeev	pci_testdev=
78d5be1090SShaoqin Huang	if $qemu $M -device '?' | grep -q pci-testdev; then
79f7f81c6aSAlexander Gordeev		pci_testdev="-device pci-testdev"
80f7f81c6aSAlexander Gordeev	fi
81f7f81c6aSAlexander Gordeev
8201e047d0SGavin Shan	A="-accel $ACCEL$ACCEL_PROPS"
835f77b72dSJean-Philippe Brucker	command="$qemu -nodefaults $M $A -cpu $qemu_cpu $chr_testdev $pci_testdev"
842607d2d6SNikos Nikoleris	command+=" -display none -serial stdio"
8541c0f78cSEric Auger	command="$(migration_cmd) $(timeout_cmd) $command"
8692a1afcbSAndrew Jones
8763c60156SAndrew Jones	if [ "$UEFI_SHELL_RUN" = "y" ]; then
88db9c4e1cSAlexandru Elisei		ENVIRON_DEFAULT=n run_test_status $command "$@"
895ded2989SAndrew Jones	elif [ "$EFI_USE_ACPI" = "y" ]; then
90db9c4e1cSAlexandru Elisei		run_test_status $command -kernel "$@"
912607d2d6SNikos Nikoleris	else
92db9c4e1cSAlexandru Elisei		run_test $command -kernel "$@"
932607d2d6SNikos Nikoleris	fi
94db9c4e1cSAlexandru Elisei}
95db9c4e1cSAlexandru Elisei
96db9c4e1cSAlexandru Eliseifunction arch_run_kvmtool()
97db9c4e1cSAlexandru Elisei{
98db9c4e1cSAlexandru Elisei	local command
99db9c4e1cSAlexandru Elisei
100*cf5286adSAndrew Jones	if [ "$HOST" != "arm" ] && [ "$HOST" != "aarch64" ]; then
101*cf5286adSAndrew Jones		echo "kvmtool requires KVM but the host ('$HOST') is not arm" >&2
102*cf5286adSAndrew Jones		exit 2
103*cf5286adSAndrew Jones	fi
104*cf5286adSAndrew Jones
105db9c4e1cSAlexandru Elisei	kvmtool=$(search_kvmtool_binary) ||
106db9c4e1cSAlexandru Elisei		exit $?
107db9c4e1cSAlexandru Elisei
108db9c4e1cSAlexandru Elisei	if [ "$ACCEL" ] && [ "$ACCEL" != "kvm" ]; then
109db9c4e1cSAlexandru Elisei		echo "kvmtool does not support $ACCEL" >&2
110db9c4e1cSAlexandru Elisei		exit 2
111db9c4e1cSAlexandru Elisei	fi
112db9c4e1cSAlexandru Elisei
113db9c4e1cSAlexandru Elisei	if ! kvm_available; then
114db9c4e1cSAlexandru Elisei		echo "kvmtool requires KVM but not available on the host" >&2
115db9c4e1cSAlexandru Elisei		exit 2
116db9c4e1cSAlexandru Elisei	fi
117db9c4e1cSAlexandru Elisei
118db9c4e1cSAlexandru Elisei	command="$(timeout_cmd) $kvmtool run"
119db9c4e1cSAlexandru Elisei	if [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ]; then
120db9c4e1cSAlexandru Elisei		run_test_status $command --kernel "$@" --aarch32
121db9c4e1cSAlexandru Elisei	else
122db9c4e1cSAlexandru Elisei		run_test_status $command --kernel "$@"
123db9c4e1cSAlexandru Elisei	fi
124db9c4e1cSAlexandru Elisei}
125db9c4e1cSAlexandru Elisei
126db9c4e1cSAlexandru Eliseicase $(vmm_get_target) in
127db9c4e1cSAlexandru Eliseiqemu)
128db9c4e1cSAlexandru Elisei	arch_run_qemu "$@"
129db9c4e1cSAlexandru Elisei	;;
130db9c4e1cSAlexandru Eliseikvmtool)
131db9c4e1cSAlexandru Elisei	arch_run_kvmtool "$@"
132db9c4e1cSAlexandru Elisei	;;
133db9c4e1cSAlexandru Eliseiesac
134