xref: /kvm-unit-tests/arm/run (revision d5f55dccf5304db5ed46b965e17cbcd797f44d8d)
15e61cba0SAndrew Jones#!/bin/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
22*d5f55dccSRadim 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
343382e779SAndrew Jonesif [ "$HOST" = "aarch64" ] && [ "$ACCEL" = "kvm" ]; then
350601b85cSAndrew Jones	processor="host"
363382e779SAndrew Jones	if [ "$ARCH" = "arm" ]; then
373382e779SAndrew Jones		processor+=",aarch64=off"
383382e779SAndrew Jones	fi
390601b85cSAndrew Jonesfi
400601b85cSAndrew Jones
4139ac3f84SAndrew Jonesqemu="${QEMU:-qemu-system-$ARCH_NAME}"
425e61cba0SAndrew Jonesqpath=$(which $qemu 2>/dev/null)
435e61cba0SAndrew Jones
445e61cba0SAndrew Jonesif [ -z "$qpath" ]; then
455e61cba0SAndrew Jones	echo $qemu not found.
465e61cba0SAndrew Jones	exit 2
475e61cba0SAndrew Jonesfi
485e61cba0SAndrew Jones
495e61cba0SAndrew Jonesif ! $qemu -machine '?' 2>&1 | grep 'ARM Virtual Machine' > /dev/null; then
505e61cba0SAndrew Jones	echo "$qpath doesn't support mach-virt ('-machine virt'). Exiting."
515e61cba0SAndrew Jones	exit 2
525e61cba0SAndrew Jonesfi
535e61cba0SAndrew Jones
545e61cba0SAndrew JonesM='-machine virt'
555e61cba0SAndrew Jones
565e61cba0SAndrew Jonesif ! $qemu $M -device '?' 2>&1 | grep virtconsole > /dev/null; then
575e61cba0SAndrew Jones	echo "$qpath doesn't support virtio-console for chr-testdev. Exiting."
585e61cba0SAndrew Jones	exit 2
595e61cba0SAndrew Jonesfi
605e61cba0SAndrew Jones
61b6f901ceSAndrew Jonesif $qemu $M -chardev testdev,id=id -initrd . 2>&1 \
625e61cba0SAndrew Jones		| grep backend > /dev/null; then
635e61cba0SAndrew Jones	echo "$qpath doesn't support chr-testdev. Exiting."
645e61cba0SAndrew Jones	exit 2
655e61cba0SAndrew Jonesfi
665e61cba0SAndrew Jones
675e61cba0SAndrew Joneschr_testdev='-device virtio-serial-device'
685e61cba0SAndrew Joneschr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
695e61cba0SAndrew Jones
700601b85cSAndrew JonesM+=",accel=$ACCEL"
7139ac3f84SAndrew Jonescommand="$qemu $M -cpu $processor $chr_testdev"
725e61cba0SAndrew Jonescommand+=" -display none -serial stdio -kernel"
73fd149358SAndrew Jonescommand="$(timeout_cmd) $command"
745e61cba0SAndrew Jonesecho $command "$@"
7592a1afcbSAndrew Jones
76b2a2aa5dSAndrew Jonesrun_qemu $command "$@"
77