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