From b08324a354cd186a7beafedb4e6c5eb671c7bf94 Mon Sep 17 00:00:00 2001
From: Steven Powell <spowellgrr@gmail.com>
Date: Wed, 10 Jul 2024 13:37:30 -0500
Subject: [PATCH 1/3] Support running x86 QEMU on arm64

---
 pkg/drivers/qemu/qemu.go                  | 14 ++++++++++----
 pkg/minikube/registry/drvs/qemu2/qemu2.go |  4 ++++
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go
index 5d1569a4aa..84dd24593e 100644
--- a/pkg/drivers/qemu/qemu.go
+++ b/pkg/drivers/qemu/qemu.go
@@ -42,6 +42,7 @@ import (
 
 	"k8s.io/klog/v2"
 	pkgdrivers "k8s.io/minikube/pkg/drivers"
+	"k8s.io/minikube/pkg/minikube/detect"
 	"k8s.io/minikube/pkg/minikube/exit"
 	"k8s.io/minikube/pkg/minikube/firewall"
 	"k8s.io/minikube/pkg/minikube/out"
@@ -412,14 +413,19 @@ func (d *Driver) Start() error {
 	}
 
 	// hardware acceleration is important, it increases performance by 10x
-	if runtime.GOOS == "darwin" {
+	var accel string
+	if detect.IsAmd64M1Emulation() {
+		accel = "tcg"
+	} else if runtime.GOOS == "darwin" {
 		// On macOS, enable the Hypervisor framework accelerator.
-		startCmd = append(startCmd,
-			"-accel", "hvf")
+		accel = "hvf"
 	} else if _, err := os.Stat("/dev/kvm"); err == nil && runtime.GOOS == "linux" {
 		// On Linux, enable the Kernel Virtual Machine accelerator.
+		accel = "kvm"
+	}
+	if accel != "" {
 		startCmd = append(startCmd,
-			"-accel", "kvm")
+			"-accel", accel)
 	}
 
 	startCmd = append(startCmd,
diff --git a/pkg/minikube/registry/drvs/qemu2/qemu2.go b/pkg/minikube/registry/drvs/qemu2/qemu2.go
index 0e4fa2f8d4..4b848694ab 100644
--- a/pkg/minikube/registry/drvs/qemu2/qemu2.go
+++ b/pkg/minikube/registry/drvs/qemu2/qemu2.go
@@ -31,6 +31,7 @@ import (
 	"k8s.io/minikube/pkg/drivers/qemu"
 
 	"k8s.io/minikube/pkg/minikube/config"
+	"k8s.io/minikube/pkg/minikube/detect"
 	"k8s.io/minikube/pkg/minikube/download"
 	"k8s.io/minikube/pkg/minikube/driver"
 	"k8s.io/minikube/pkg/minikube/localpath"
@@ -76,6 +77,9 @@ func qemuFirmwarePath(customPath string) (string, error) {
 	if runtime.GOOS == "windows" {
 		return "C:\\Program Files\\qemu\\share\\edk2-x86_64-code.fd", nil
 	}
+	if detect.IsAmd64M1Emulation() {
+		return "/opt/homebrew/opt/qemu/share/qemu/edk2-x86_64-code.fd", nil
+	}
 	arch := runtime.GOARCH
 	// For macOS, find the correct brew installation path for qemu firmware
 	if runtime.GOOS == "darwin" {

From 3f865e4da7a29ad564c6abeecaab553a9d5a1c05 Mon Sep 17 00:00:00 2001
From: Steven Powell <spowellgrr@gmail.com>
Date: Mon, 15 Jul 2024 15:53:55 -0500
Subject: [PATCH 2/3] QEMU: refactor selecting hardware selection into func

---
 pkg/drivers/qemu/qemu.go | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go
index 84dd24593e..96d28ae5e3 100644
--- a/pkg/drivers/qemu/qemu.go
+++ b/pkg/drivers/qemu/qemu.go
@@ -413,16 +413,7 @@ func (d *Driver) Start() error {
 	}
 
 	// hardware acceleration is important, it increases performance by 10x
-	var accel string
-	if detect.IsAmd64M1Emulation() {
-		accel = "tcg"
-	} else if runtime.GOOS == "darwin" {
-		// On macOS, enable the Hypervisor framework accelerator.
-		accel = "hvf"
-	} else if _, err := os.Stat("/dev/kvm"); err == nil && runtime.GOOS == "linux" {
-		// On Linux, enable the Kernel Virtual Machine accelerator.
-		accel = "kvm"
-	}
+	accel := hardwareAcceleration()
 	if accel != "" {
 		startCmd = append(startCmd,
 			"-accel", accel)
@@ -552,6 +543,21 @@ func (d *Driver) Start() error {
 	return WaitForTCPWithDelay(fmt.Sprintf("%s:%d", d.IPAddress, d.SSHPort), time.Second)
 }
 
+func hardwareAcceleration() string {
+	if detect.IsAmd64M1Emulation() {
+		return "tcg"
+	}
+	if runtime.GOOS == "darwin" {
+		// On macOS, enable the Hypervisor framework accelerator.
+		return "hvf"
+	}
+	if _, err := os.Stat("/dev/kvm"); err == nil && runtime.GOOS == "linux" {
+		// On Linux, enable the Kernel Virtual Machine accelerator.
+		return "kvm"
+	}
+	return ""
+}
+
 func isBootpdError(err error) bool {
 	if runtime.GOOS != "darwin" {
 		return false

From 250786e3d78a02b9b5829017be504a497f87ce75 Mon Sep 17 00:00:00 2001
From: Steven Powell <spowellgrr@gmail.com>
Date: Tue, 16 Jul 2024 18:53:26 -0500
Subject: [PATCH 3/3] log what hardware acceleration value is used

---
 pkg/drivers/qemu/qemu.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go
index 96d28ae5e3..018974d07f 100644
--- a/pkg/drivers/qemu/qemu.go
+++ b/pkg/drivers/qemu/qemu.go
@@ -415,6 +415,7 @@ func (d *Driver) Start() error {
 	// hardware acceleration is important, it increases performance by 10x
 	accel := hardwareAcceleration()
 	if accel != "" {
+		klog.Infof("Using %s for hardware acceleration", accel)
 		startCmd = append(startCmd,
 			"-accel", accel)
 	}