]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
efi: add more arch-specific locations for OVMF firmware files and use args.architecture 1140/head
authorLuca Boccassi <bluca@debian.org>
Sat, 20 Aug 2022 15:47:52 +0000 (16:47 +0100)
committerLuca Boccassi <bluca@debian.org>
Sat, 20 Aug 2022 16:02:53 +0000 (17:02 +0100)
https://packages.debian.org/sid/all/ovmf/filelist
https://packages.debian.org/sid/all/ovmf-ia32/filelist
https://packages.debian.org/sid/all/qemu-efi-aarch64/filelist
https://packages.debian.org/sid/all/qemu-efi-arm/filelist

mkosi/__init__.py

index 53126a159f4dce46e120397c88150cb5bdd384ee..8b7f2d3176043381f2331a0c126b8e1f51295670 100644 (file)
@@ -7721,14 +7721,17 @@ def find_qemu_binary(args: MkosiArgs) -> str:
     die("Couldn't find QEMU/KVM binary")
 
 
-def find_qemu_firmware() -> Tuple[Path, bool]:
+def find_qemu_firmware(args: MkosiArgs) -> Tuple[Path, bool]:
     FIRMWARE_LOCATIONS = [
         # UEFI firmware blobs are found in a variety of locations,
         # depending on distribution and package.
         *{
             "x86_64": ["/usr/share/ovmf/x64/OVMF_CODE.secboot.fd"],
-            "i386": ["/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd"],
-        }.get(platform.machine(), []),
+            "i386": [
+                "/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd",
+                "/usr/share/OVMF/OVMF32_CODE_4M.secboot.fd"
+            ],
+        }.get(args.architecture, []),
         "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd",
         "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd",  # GENTOO:
         "/usr/share/qemu/OVMF_CODE.secboot.fd",
@@ -7753,7 +7756,9 @@ def find_qemu_firmware() -> Tuple[Path, bool]:
                 "/usr/share/qemu/ovmf-x86_64.bin",
             ],
             "i386": ["/usr/share/ovmf/ovmf_code_ia32.bin", "/usr/share/edk2/ovmf-ia32/OVMF_CODE.fd"],
-        }.get(platform.machine(), []),
+            "aarch64": ["/usr/share/AAVMF/AAVMF_CODE.fd"],
+            "armhfp": ["/usr/share/AAVMF/AAVMF32_CODE.fd"],
+        }.get(args.architecture, []),
         # After that, we try some generic paths and hope that if they exist,
         # they’ll correspond to the current architecture, thanks to the package manager.
         "/usr/share/edk2/ovmf/OVMF_CODE.fd",
@@ -7770,13 +7775,20 @@ def find_qemu_firmware() -> Tuple[Path, bool]:
     die("Couldn't find OVMF UEFI firmware blob.")
 
 
-def find_ovmf_vars() -> Path:
+def find_ovmf_vars(args: MkosiArgs) -> Path:
     OVMF_VARS_LOCATIONS = []
 
-    if platform.machine() == "x86_64":
+    if args.architecture == "x86_64":
         OVMF_VARS_LOCATIONS += ["/usr/share/ovmf/x64/OVMF_VARS.fd"]
-    elif platform.machine() == "i386":
-        OVMF_VARS_LOCATIONS += ["/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd"]
+    elif args.architecture == "i386":
+        OVMF_VARS_LOCATIONS += [
+            "/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd",
+            "/usr/share/OVMF/OVMF32_VARS_4M.fd",
+        ]
+    elif args.architecture == "armhfp":
+        OVMF_VARS_LOCATIONS += ["/usr/share/AAVMF/AAVMF32_VARS.fd"]
+    elif args.architecture == "aarch64":
+        OVMF_VARS_LOCATIONS += ["/usr/share/AAVMF/AAVMF_VARS.fd"]
 
     OVMF_VARS_LOCATIONS += ["/usr/share/edk2/ovmf/OVMF_VARS.fd",
                             "/usr/share/edk2-ovmf/OVMF_VARS.fd",  # GENTOO:
@@ -7818,7 +7830,7 @@ def run_qemu_cmdline(args: MkosiArgs) -> Iterator[List[str]]:
     else:
         mode = "uefi"
 
-    firmware, fw_supports_sb = find_qemu_firmware()
+    firmware, fw_supports_sb = find_qemu_firmware(args)
     smm = "on" if fw_supports_sb and mode == "uefi" else "off"
 
     cmdline = [
@@ -7875,7 +7887,7 @@ def run_qemu_cmdline(args: MkosiArgs) -> Iterator[List[str]]:
 
     with contextlib.ExitStack() as stack:
         if mode == "uefi" and fw_supports_sb:
-            ovmf_vars = stack.enter_context(copy_file_temporary(src=find_ovmf_vars(), dir=tmp_dir()))
+            ovmf_vars = stack.enter_context(copy_file_temporary(src=find_ovmf_vars(args), dir=tmp_dir()))
             cmdline += [
                 "-global",
                 "ICH9-LPC.disable_s3=1",