From aaa4468b179095c6d1f45da504dd6b472c3af207 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Sat, 20 Aug 2022 16:47:52 +0100 Subject: [PATCH] efi: add more arch-specific locations for OVMF firmware files and use args.architecture 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 | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 53126a159..8b7f2d317 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -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", -- 2.47.2