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