diff --git a/ansible/inventory/group_vars/all/infra-vms b/ansible/inventory/group_vars/all/infra-vms
index 569ab6b73a7a046e3fa7109e08d3da530328f49a..85fb396023565c0563196d7b0690e75cfb8b804a 100644
--- a/ansible/inventory/group_vars/all/infra-vms
+++ b/ansible/inventory/group_vars/all/infra-vms
@@ -76,8 +76,8 @@ infra_vm_wait_connection_ssh_extra_args: '-o StrictHostKeyChecking=no'
 # OS family. Needed for config drive generation.
 infra_vm_os_family: "{{ 'RedHat' if os_distribution in ['centos', 'rocky'] else 'Debian' }}"
 
-# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'bios'.
-infra_vm_boot_firmware: "bios"
+# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'efi'.
+infra_vm_boot_firmware: "efi"
 
 # Machine type. Libvirt default configuration is used.
 infra_vm_machine:
diff --git a/ansible/inventory/group_vars/all/seed-vm b/ansible/inventory/group_vars/all/seed-vm
index 953d580fdeb06d1fce28040a3edc9651ce844f07..0f8368bf6aa40a1effb4d7f26df4092be275b7ac 100644
--- a/ansible/inventory/group_vars/all/seed-vm
+++ b/ansible/inventory/group_vars/all/seed-vm
@@ -66,8 +66,8 @@ seed_vm_data_format: qcow2
 # List of network interfaces to attach to the seed VM.
 seed_vm_interfaces: "{{ network_interfaces | sort | map('net_libvirt_vm_network') | list }}"
 
-# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'bios'.
-seed_vm_boot_firmware: "bios"
+# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'efi'.
+seed_vm_boot_firmware: "efi"
 
 # Machine type. Libvirt default configuration is used.
 seed_vm_machine:
diff --git a/etc/kayobe/infra-vms.yml b/etc/kayobe/infra-vms.yml
index ba75c641c10aa2101aa797003171831cb8eed5dd..23ab7b8aecacf8a1bddcf379816dc74c4c100079 100644
--- a/etc/kayobe/infra-vms.yml
+++ b/etc/kayobe/infra-vms.yml
@@ -58,7 +58,7 @@
 # OS family. Needed for config drive generation.
 #infra_vm_os_family:
 
-# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'bios'.
+# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'efi'.
 #infra_vm_boot_firmware:
 
 # Machine type. Libvirt default configuration is used.
diff --git a/etc/kayobe/seed-vm.yml b/etc/kayobe/seed-vm.yml
index 5fdcc1690236706554d03f09116a682310f12c6e..25b0c72ecb5a3f11e15b24fb95c9d8b8491fda0a 100644
--- a/etc/kayobe/seed-vm.yml
+++ b/etc/kayobe/seed-vm.yml
@@ -61,7 +61,7 @@
 #
 #seed_vm_interfaces:
 
-# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'bios'.
+# Boot firmware. Possible values are 'bios' or 'efi'. Default is 'efi'.
 #seed_vm_boot_firmware:
 
 # Machine type. Libvirt default configuration is used.
diff --git a/releasenotes/notes/seed-infra-vm-efi-default-9b2114a4e2fb4b8a.yaml b/releasenotes/notes/seed-infra-vm-efi-default-9b2114a4e2fb4b8a.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..60888b72573c725f94fe5890d92250593ea60e9a
--- /dev/null
+++ b/releasenotes/notes/seed-infra-vm-efi-default-9b2114a4e2fb4b8a.yaml
@@ -0,0 +1,10 @@
+---
+upgrade:
+  - |
+    Changes the default boot firmware for seed and infra VMs to ``efi``. Set
+    ``infra_vm_boot_firmware`` and ``seed_vm_boot_firmware`` to ``bios`` to
+    retain existing behaviour.
+fixes:
+  - |
+    Fixes compatibility with Rocky Linux 9.4 GenericCloud images by switching
+    to ``efi`` boot firmware.