@@ -573,7 +573,12 @@ func Cmdline(ctx context.Context, cfg Config) (exe string, args []string, err er
573573 }
574574 args = appendArgsIfNoConflict (args , "-machine" , machine )
575575 case limayaml .RISCV64 :
576- machine := "virt,accel=" + accel
576+ // https://github.com/tianocore/edk2/blob/edk2-stable202408/OvmfPkg/RiscVVirt/README.md#test
577+ // > Note: the `acpi=off` machine property is specified because Linux guest
578+ // > support for ACPI (that is, the ACPI consumer side) is a work in progress.
579+ // > Currently, `acpi=off` is recommended unless you are developing ACPI support
580+ // > yourself.
581+ machine := "virt,acpi=off,accel=" + accel
577582 args = appendArgsIfNoConflict (args , "-machine" , machine )
578583 case limayaml .ARMV7L :
579584 machine := "virt,accel=" + accel
@@ -613,7 +618,7 @@ func Cmdline(ctx context.Context, cfg Config) (exe string, args []string, err er
613618 firmware = downloadedFirmware
614619 logrus .Infof ("Using existing firmware (%q)" , firmware )
615620 }
616- if firmware == "" && * y . Arch != limayaml . RISCV64 {
621+ if firmware == "" {
617622 firmware , err = getFirmware (exe , * y .Arch )
618623 if err != nil {
619624 return "" , nil , err
@@ -1031,6 +1036,14 @@ func qemuArch(arch limayaml.Arch) string {
10311036 return arch
10321037}
10331038
1039+ // qemuEdk2 returns the arch string used by `/usr/local/share/qemu/edk2-*-code.fd`.
1040+ func qemuEdk2Arch (arch limayaml.Arch ) string {
1041+ if arch == limayaml .RISCV64 {
1042+ return "riscv"
1043+ }
1044+ return qemuArch (arch )
1045+ }
1046+
10341047func Exe (arch limayaml.Arch ) (exe string , args []string , err error ) {
10351048 exeBase := "qemu-system-" + qemuArch (arch )
10361049 envK := "QEMU_SYSTEM_" + strings .ToUpper (qemuArch (arch ))
@@ -1094,7 +1107,7 @@ func getQemuVersion(qemuExe string) (*semver.Version, error) {
10941107
10951108func getFirmware (qemuExe string , arch limayaml.Arch ) (string , error ) {
10961109 switch arch {
1097- case limayaml .X8664 , limayaml .AARCH64 , limayaml .ARMV7L :
1110+ case limayaml .X8664 , limayaml .AARCH64 , limayaml .ARMV7L , limayaml . RISCV64 :
10981111 default :
10991112 return "" , fmt .Errorf ("unexpected architecture: %q" , arch )
11001113 }
@@ -1108,7 +1121,7 @@ func getFirmware(qemuExe string, arch limayaml.Arch) (string, error) {
11081121 localDir := filepath .Dir (binDir ) // "/usr/local"
11091122 userLocalDir := filepath .Join (currentUser .HomeDir , ".local" ) // "$HOME/.local"
11101123
1111- relativePath := fmt .Sprintf ("share/qemu/edk2-%s-code.fd" , qemuArch (arch ))
1124+ relativePath := fmt .Sprintf ("share/qemu/edk2-%s-code.fd" , qemuEdk2Arch (arch ))
11121125 candidates := []string {
11131126 filepath .Join (userLocalDir , relativePath ), // XDG-like
11141127 filepath .Join (localDir , relativePath ), // macOS (homebrew)
@@ -1135,6 +1148,8 @@ func getFirmware(qemuExe string, arch limayaml.Arch) (string, error) {
11351148 // Debian package "qemu-efi-arm"
11361149 // Fedora package "edk2-arm"
11371150 candidates = append (candidates , "/usr/share/AAVMF/AAVMF32_CODE.fd" )
1151+ case limayaml .RISCV64 :
1152+ // NOP, as EDK2 for RISCV64 is not packaged yet in well-known distros.
11381153 }
11391154
11401155 logrus .Debugf ("firmware candidates = %v" , candidates )
0 commit comments