xref: /kvm-unit-tests/riscv/efi/run (revision 0ebc1af663da6e7bb2c34ff8cb83f8436aaabd8c)
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