xref: /kvm-unit-tests/arm/run (revision 8b13a5b5cfdb26920c8f631a1e56e7a5eac917fe)
11b7dd7d3SSergey Bronnikov#!/usr/bin/env bash
25e61cba0SAndrew Jones
3b6ff178dSAndrew Jonesif [ -z "$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
10b6ff178dSAndrew Jonesfi
1139ac3f84SAndrew Jonesprocessor="$PROCESSOR"
125e61cba0SAndrew Jones
130601b85cSAndrew Jonesif [ -c /dev/kvm ]; then
140601b85cSAndrew Jones	if [ "$HOST" = "arm" ] && [ "$ARCH" = "arm" ]; then
150601b85cSAndrew Jones		kvm_available=yes
160601b85cSAndrew Jones	elif [ "$HOST" = "aarch64" ]; then
170601b85cSAndrew Jones		kvm_available=yes
180601b85cSAndrew Jones	fi
190601b85cSAndrew Jonesfi
200601b85cSAndrew Jones
213a5ed97eSAndrew Jonesif [ "$ACCEL" = "kvm" ] && [ "$kvm_available" != "yes" ]; then
22d5f55dccSRadim Krčmář	echo "KVM is needed, but not available on this host"
230601b85cSAndrew Jones	exit 2
240601b85cSAndrew Jonesfi
250601b85cSAndrew Jones
260601b85cSAndrew Jonesif [ -z "$ACCEL" ]; then
273a5ed97eSAndrew Jones	if [ "$kvm_available" = "yes" ]; then
280601b85cSAndrew Jones		ACCEL="kvm"
290601b85cSAndrew Jones	else
300601b85cSAndrew Jones		ACCEL="tcg"
310601b85cSAndrew Jones	fi
320601b85cSAndrew Jonesfi
330601b85cSAndrew Jones
344b968505SBalamuruhan Sqemu=$(search_qemu_binary)
355e61cba0SAndrew Jones
365e61cba0SAndrew Jonesif ! $qemu -machine '?' 2>&1 | grep 'ARM Virtual Machine' > /dev/null; then
374b968505SBalamuruhan S	echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting."
385e61cba0SAndrew Jones	exit 2
395e61cba0SAndrew Jonesfi
405e61cba0SAndrew Jones
415e61cba0SAndrew JonesM='-machine virt'
425e61cba0SAndrew Jones
43d9729025SAndrew Jonesif [ "$ACCEL" = "kvm" ]; then
44d9729025SAndrew Jones	if $qemu $M,\? 2>&1 | grep gic-version > /dev/null; then
45d9729025SAndrew Jones		M+=',gic-version=host'
46d9729025SAndrew Jones	fi
4767c2cc50SAlex Bennée	if [ "$HOST" = "aarch64" ] || [ "$HOST" = "arm" ]; then
48d9729025SAndrew Jones		processor="host"
4967c2cc50SAlex Bennée		if [ "$ARCH" = "arm" ] && [ "$HOST" = "aarch64" ]; then
50d9729025SAndrew Jones			processor+=",aarch64=off"
51d9729025SAndrew Jones		fi
52d9729025SAndrew Jones	fi
53d9729025SAndrew Jonesfi
54d9729025SAndrew Jones
555e61cba0SAndrew Jonesif ! $qemu $M -device '?' 2>&1 | grep virtconsole > /dev/null; then
564b968505SBalamuruhan S	echo "$qemu doesn't support virtio-console for chr-testdev. Exiting."
575e61cba0SAndrew Jones	exit 2
585e61cba0SAndrew Jonesfi
595e61cba0SAndrew Jones
60b6f901ceSAndrew Jonesif $qemu $M -chardev testdev,id=id -initrd . 2>&1 \
615e61cba0SAndrew Jones		| grep backend > /dev/null; then
624b968505SBalamuruhan S	echo "$qemu doesn't support chr-testdev. Exiting."
635e61cba0SAndrew Jones	exit 2
645e61cba0SAndrew Jonesfi
655e61cba0SAndrew Jones
665e61cba0SAndrew Joneschr_testdev='-device virtio-serial-device'
675e61cba0SAndrew Joneschr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
685e61cba0SAndrew Jones
69f7f81c6aSAlexander Gordeevpci_testdev=
70f7f81c6aSAlexander Gordeevif $qemu $M -device '?' 2>&1 | grep pci-testdev > /dev/null; then
71f7f81c6aSAlexander Gordeev	pci_testdev="-device pci-testdev"
72f7f81c6aSAlexander Gordeevfi
73f7f81c6aSAlexander Gordeev
740601b85cSAndrew JonesM+=",accel=$ACCEL"
753695c93aSAndrew Jonescommand="$qemu -nodefaults $M -cpu $processor $chr_testdev $pci_testdev"
76*8b13a5b5SRadim Krčmářcommand+=" -display none -serial stdio -kernel"
77fd149358SAndrew Jonescommand="$(timeout_cmd) $command"
7892a1afcbSAndrew Jones
79b2a2aa5dSAndrew Jonesrun_qemu $command "$@"
80