1a755990cSAndrew Jones#!/bin/bash 2a755990cSAndrew Jones 3a755990cSAndrew Jonesif [ $# -eq 0 ]; then 4a755990cSAndrew Jones echo "Usage $0 TEST_CASE [QEMU_ARGS]" 5a755990cSAndrew Jones exit 2 6a755990cSAndrew Jonesfi 7a755990cSAndrew Jones 8a755990cSAndrew Jonesif [ ! -f config.mak ]; then 9a755990cSAndrew Jones echo "run './configure --enable-efi && make' first. See ./configure -h" 10a755990cSAndrew Jones exit 2 11a755990cSAndrew Jonesfi 12a755990cSAndrew Jonessource config.mak 13a755990cSAndrew Jonessource scripts/arch-run.bash 14*734fe135SAndrew Jonessource scripts/vmm.bash 15*734fe135SAndrew Jones 16*734fe135SAndrew Jonesif [[ $(vmm_get_target) == "kvmtool" ]]; then 17*734fe135SAndrew Jones echo "kvmtool does not support EFI tests." 18*734fe135SAndrew Jones exit 2 19*734fe135SAndrew Jonesfi 20a755990cSAndrew Jones 21a755990cSAndrew Jonesif [ -f RISCV_VIRT_CODE.fd ]; then 22a755990cSAndrew Jones DEFAULT_UEFI=RISCV_VIRT_CODE.fd 23a755990cSAndrew Jonesfi 24a755990cSAndrew Jones 25a755990cSAndrew JonesKERNEL_NAME=$1 26a755990cSAndrew Jones 27a755990cSAndrew Jones: "${EFI_SRC:=$TEST_DIR}" 28a755990cSAndrew Jones: "${EFI_UEFI:=$DEFAULT_UEFI}" 29a755990cSAndrew Jones: "${EFI_TEST:=efi-tests}" 30a755990cSAndrew Jones: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}" 31a755990cSAndrew Jones: "${EFI_TESTNAME:=$TESTNAME}" 32a755990cSAndrew Jones: "${EFI_TESTNAME:=$EFI_CASE}" 33a755990cSAndrew Jones: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" 34a755990cSAndrew Jones: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" 35a755990cSAndrew Jones 36a755990cSAndrew Jonesif [ ! -f "$EFI_UEFI" ]; then 37a755990cSAndrew Jones echo "UEFI firmware not found." 38a755990cSAndrew Jones echo "Please specify the path with the env variable EFI_UEFI" 39a755990cSAndrew Jones exit 2 40a755990cSAndrew Jonesfi 41a755990cSAndrew Jones 42a755990cSAndrew Jonesif [ "$EFI_USE_ACPI" = "y" ]; then 43a755990cSAndrew Jones echo "ACPI not available" 44a755990cSAndrew Jones exit 2 45a755990cSAndrew Jonesfi 46a755990cSAndrew Jones 47a755990cSAndrew Jones# Remove the TEST_CASE from $@ 48a755990cSAndrew Jonesshift 1 49a755990cSAndrew Jones 50a755990cSAndrew Jones# Fish out the arguments for the test, they should be the next string 51a755990cSAndrew Jones# after the "-append" option 52a755990cSAndrew Jonesqemu_args=() 53a755990cSAndrew Jonescmd_args=() 54a755990cSAndrew Joneswhile (( "$#" )); do 55a755990cSAndrew Jones if [ "$1" = "-append" ]; then 560ebc1af6SNicholas Piggin cmd_args=("$2") 57a755990cSAndrew Jones shift 2 58a755990cSAndrew Jones else 59a755990cSAndrew Jones qemu_args+=("$1") 60a755990cSAndrew Jones shift 1 61a755990cSAndrew Jones fi 62a755990cSAndrew Jonesdone 63a755990cSAndrew Jones 64a755990cSAndrew Jonesif [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then 65a755990cSAndrew Jones EFI_CASE_DIR="$EFI_TEST/dummy" 66a755990cSAndrew Jones mkdir -p "$EFI_CASE_DIR" 67a755990cSAndrew Jones $TEST_DIR/run \ 68a755990cSAndrew Jones $EFI_CASE \ 69a755990cSAndrew Jones -machine pflash0=pflash0 \ 70a755990cSAndrew Jones -blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \ 71a755990cSAndrew Jones -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 72a755990cSAndrew Jones "${qemu_args[@]}" 73a755990cSAndrew Jones exit 74a755990cSAndrew Jonesfi 75a755990cSAndrew Jones 76a755990cSAndrew Jonesuefi_shell_run() 77a755990cSAndrew Jones{ 78a755990cSAndrew Jones mkdir -p "$EFI_CASE_DIR" 79a755990cSAndrew Jones cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" 80a755990cSAndrew Jones echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" 81a755990cSAndrew Jones if [ "$EFI_USE_ACPI" != "y" ]; then 82a755990cSAndrew Jones qemu_args+=(-machine acpi=off) 83a755990cSAndrew Jones FDT_BASENAME="dtb" 84a755990cSAndrew Jones UEFI_SHELL_RUN=y $TEST_DIR/run \ 85a755990cSAndrew Jones -machine pflash0=pflash0 \ 86a755990cSAndrew Jones -blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \ 87a755990cSAndrew Jones -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" \ 88a755990cSAndrew Jones "${qemu_args[@]}" 89a755990cSAndrew Jones echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" 90a755990cSAndrew Jones fi 91a755990cSAndrew Jones echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" 92a755990cSAndrew Jones 93a755990cSAndrew Jones UEFI_SHELL_RUN=y $TEST_DIR/run \ 94a755990cSAndrew Jones -machine pflash0=pflash0 \ 95a755990cSAndrew Jones -blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \ 96a755990cSAndrew Jones -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 97a755990cSAndrew Jones "${qemu_args[@]}" 98a755990cSAndrew Jones} 99a755990cSAndrew Jones 100a755990cSAndrew Jonesif [ "$EFI_DIRECT" = "y" ]; then 101a755990cSAndrew Jones if [ "$EFI_USE_ACPI" != "y" ]; then 102a755990cSAndrew Jones qemu_args+=(-machine acpi=off) 103a755990cSAndrew Jones fi 104a755990cSAndrew Jones $TEST_DIR/run \ 105a755990cSAndrew Jones $KERNEL_NAME \ 1067f01fa71SNicholas Piggin -append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \ 107a755990cSAndrew Jones -machine pflash0=pflash0 \ 108a755990cSAndrew Jones -blockdev node-name=pflash0,driver=file,read-only=on,filename="$EFI_UEFI" \ 109a755990cSAndrew Jones "${qemu_args[@]}" 110a755990cSAndrew Joneselse 111a755990cSAndrew Jones uefi_shell_run 112a755990cSAndrew Jonesfi 113