diff mbox series

[kvm-unit-tests,RFC,03/13] x86/efi: Add support for running tests with UEFI in SEV-SNP environment

Message ID 20240419125759.242870-4-papaluri@amd.com (mailing list archive)
State New, archived
Headers show
Series Introduce SEV-SNP Support | expand

Commit Message

Paluri, PavanKumar April 19, 2024, 12:57 p.m. UTC
SEV-SNP no longer supports using pflash unit=0 for loading the OVMF bios, and
instead relies on -bios parameter. So add support for this in the runner script
(x86/efi/run).

Signed-off-by: Pavan Kumar Paluri <papaluri@amd.com>
---
 x86/efi/README.md |  6 ++++++
 x86/efi/run       | 37 +++++++++++++++++++++++++++++--------
 2 files changed, 35 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/x86/efi/README.md b/x86/efi/README.md
index af6e339c2cca..1653bf60cd13 100644
--- a/x86/efi/README.md
+++ b/x86/efi/README.md
@@ -34,6 +34,12 @@  the env variable `EFI_UEFI`:
 
     EFI_UEFI=/path/to/OVMF.fd ./x86/efi/run ./x86/msr.efi
 
+### Run test cases with UEFI in SEV-SNP environment
+
+To run a test case with UEFI and AMD SEV-SNP enabled:
+
+    EFI_SNP=y ./x86/efi/run ./x86/amd_sev.efi
+
 ## Code structure
 
 ### Code from GNU-EFI
diff --git a/x86/efi/run b/x86/efi/run
index 85aeb94fe605..2e8e29b947be 100755
--- a/x86/efi/run
+++ b/x86/efi/run
@@ -15,9 +15,11 @@  source config.mak
 
 : "${EFI_SRC:=$TEST_DIR}"
 : "${EFI_UEFI:=/usr/share/ovmf/OVMF.fd}"
+: "${EFI_VARS:=/usr/share/ovmf/OVMF_VARS.fd}"
 : "${EFI_TEST:=efi-tests}"
 : "${EFI_SMP:=1}"
 : "${EFI_CASE:=$(basename $1 .efi)}"
+: "${EFI_SNP:=n}"
 
 if [ ! -f "$EFI_UEFI" ]; then
 	echo "UEFI firmware not found: $EFI_UEFI"
@@ -43,6 +45,24 @@  fi
 mkdir -p "$EFI_CASE_DIR"
 cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_BINARY"
 
+# SEV-SNP no longer supports using pflash unit=0 for loading the bios,
+# and instead relies on -bios parameter. pflash unit=0 will instead only
+# be used for OVMF_VARS image, if present.
+if [ "$EFI_SNP" == "y" ]; then
+	"$TEST_DIR/run" \
+	-bios "${EFI_UEFI}" \
+	-drive file="$EFI_VARS",format=raw,if=pflash,unit=0 \
+	-drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
+	-net none \
+	-nographic \
+	-m 512M \
+	-object memory-backend-memfd,id=ram1,size=512M,share=true,prealloc=false \
+	-machine q35,confidential-guest-support=sev0,memory-backend=ram1 \
+	-object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1 \
+	-cpu EPYC-v4
+
+	exit $?
+else
 # Run test case with 256MiB QEMU memory. QEMU default memory size is 128MiB.
 # After UEFI boot up and we call `LibMemoryMap()`, the largest consecutive
 # memory region is ~42MiB. Although this is sufficient for many test cases to
@@ -54,11 +74,12 @@  cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_BINARY"
 # to x86/run. This `smp` flag overrides any previous `smp` flags (e.g.,
 # `-smp 4`). This is necessary because KVM-Unit-Tests do not currently support
 # SMP under UEFI. This last flag should be removed when this issue is resolved.
-"$TEST_DIR/run" \
-	-drive file="$EFI_UEFI",format=raw,if=pflash,readonly=on \
-	-drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
-	-net none \
-	-nographic \
-	-m 256 \
-	"$@" \
-	-smp "$EFI_SMP"
+	"$TEST_DIR/run" \
+		-drive file="$EFI_UEFI",format=raw,if=pflash,readonly=on \
+		-drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
+		-net none \
+		-nographic \
+		-m 256 \
+		"$@" \
+		-smp "$EFI_SMP"
+fi