diff --git a/bindep.txt b/bindep.txt
index a6c65af259..7f3c28f12a 100644
--- a/bindep.txt
+++ b/bindep.txt
@@ -32,7 +32,7 @@ libvirt-bin [platform:dpkg devstack]
 libvirt [platform:rpm devstack]
 libvirt-dev [platform:dpkg devstack]
 libvirt-devel [platform:rpm devstack]
-qemu [platform:dpkg devstack build-image-dib]
+qemu-system [platform:dpkg devstack build-image-dib]
 qemu-kvm [platform:dpkg devstack]
 qemu-utils [platform:dpkg devstack build-image-dib]
 qemu-system-data [platform:dpkg devstack]
diff --git a/devstack/files/bindep.txt b/devstack/files/bindep.txt
index 45b0737c77..7fc76f9417 100644
--- a/devstack/files/bindep.txt
+++ b/devstack/files/bindep.txt
@@ -31,7 +31,7 @@ libvirt-clients [platform:dpkg]
 libvirt [platform:rpm]
 libvirt-dev [platform:dpkg]
 libvirt-devel [platform:rpm]
-qemu [platform:dpkg]
+qemu-system [platform:dpkg]
 qemu-kvm [platform:dpkg platform:rpm]
 qemu-utils [platform:dpkg]
 qemu-system-data [platform:dpkg]
diff --git a/devstack/lib/ironic b/devstack/lib/ironic
index d6c06c111c..913da68650 100644
--- a/devstack/lib/ironic
+++ b/devstack/lib/ironic
@@ -675,8 +675,8 @@ IRONIC_GRUB2_SHIM_FILE=${IRONIC_GRUB2_SHIM_FILE:-}
 IRONIC_GRUB2_FILE=${IRONIC_GRUB2_FILE:-}
 IRONIC_GRUB2_NETWORK_FILE=${IRONIC_GRUB2_NETWORK_FILE:-}
 IRONIC_UEFI_FILES_DIR=${IRONIC_UEFI_FILES_DIR:-/var/lib/libvirt/images}
-UEFI_LOADER_PATH=$IRONIC_UEFI_FILES_DIR/OVMF_CODE.fd
-UEFI_NVRAM_PATH=$IRONIC_UEFI_FILES_DIR/OVMF_VARS.fd
+UEFI_LOADER_PATH=$IRONIC_UEFI_FILES_DIR/OVMF_CODE_4M.fd
+UEFI_NVRAM_PATH=$IRONIC_UEFI_FILES_DIR/OVMF_VARS_4M.fd
 
 if [[ $IRONIC_HW_ARCH == "aarch64" ]]; then
     UEFI_LOADER_PATH=$IRONIC_UEFI_FILES_DIR/AAVMF_CODE.fd
@@ -693,7 +693,7 @@ if [[ $IRONIC_HW_ARCH == "x86_64" ]]; then
     fi
 elif [[ $IRONIC_HW_ARCH == "aarch64" ]]; then
     if is_ubuntu; then
-        install_package qemu-system-arm qemu-efi qemu-efi-aarch64
+        install_package qemu-system-arm qemu-efi-aarch64
     elif is_fedora; then
         install_package grub2-arm64-efi
     fi
@@ -830,7 +830,7 @@ function get_uefi_loader {
         fi
     else
         if is_ubuntu; then
-            echo /usr/share/OVMF/OVMF_CODE.fd
+            echo /usr/share/OVMF/OVMF_CODE_4M.fd
         elif is_fedora; then
             echo /usr/share/edk2/ovmf/OVMF_CODE.fd
         fi
@@ -846,7 +846,7 @@ function get_uefi_nvram {
         fi
     else
         if is_ubuntu; then
-            echo /usr/share/OVMF/OVMF_VARS.fd
+            echo /usr/share/OVMF/OVMF_VARS_4M.fd
         elif is_fedora; then
             echo /usr/share/edk2/ovmf/OVMF_VARS.fd
         fi
diff --git a/zuul.d/ironic-jobs.yaml b/zuul.d/ironic-jobs.yaml
index dc3a1b0a88..70cc094ffc 100644
--- a/zuul.d/ironic-jobs.yaml
+++ b/zuul.d/ironic-jobs.yaml
@@ -4,7 +4,7 @@
     abstract: true
     description: Base job for devstack/tempest based ironic jobs.
     parent: devstack-tempest
-    nodeset: openstack-single-node-jammy
+    nodeset: openstack-single-node-noble
     post-run: playbooks/ci-workarounds/get_extra_logging.yaml
     timeout: 10800
     required-projects:
@@ -475,8 +475,8 @@
         # representing June 2023 release. Ubuntu Kinetic is shipping Q3 2022
         # i.e. OVN 22.09, so likely possible to remove sometime *after*
         # Ubuntu Mantic OVN 2023.03.
-        OVN_BRANCH: v23.06.0
-        OVS_BRANCH: v3.1.1
+        OVN_BRANCH: v23.09.0
+        OVS_BRANCH: v3.2.0-20-g1d78a3f31
       devstack_services:
         q-agt: False
         q-dhcp: False
@@ -520,8 +520,8 @@
         # representing June 2023 release. Ubuntu Kinetic is shipping Q3 2022
         # i.e. OVN 22.09, so likely possible to remove sometime *after*
         # Ubuntu Mantic which is OVN 2023.03.
-        OVN_BRANCH: v23.06.0
-        OVS_BRANCH: v3.1.1
+        OVN_BRANCH: v23.09.0
+        OVS_BRANCH: v3.2.0-20-g1d78a3f31
       devstack_services:
         q-agt: False
         q-dhcp: False
@@ -647,7 +647,7 @@
     name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
     description: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
     parent: tempest-multinode-full-base
-    nodeset: openstack-two-node-jammy
+    nodeset: openstack-two-node-noble
     pre-run: playbooks/ci-workarounds/pre.yaml
     required-projects:
       - opendev.org/openstack/ironic
@@ -817,7 +817,7 @@
     name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-shard
     description: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-shard
     parent: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
-    nodeset: openstack-two-node-jammy
+    nodeset: openstack-two-node-noble
     vars:
       tempest_test_regex: "BaremetalBasicOps"
       devstack_localrc:
@@ -943,14 +943,6 @@
         BUILD_TIMEOUT: 2000
         IRONIC_TEMPEST_BUILD_TIMEOUT: 2000
         IRONIC_PING_TIMEOUT: 1440
-        # TODO(TheJulia): Change this to UEFI once we have Ubuntu Jammy
-        # as it auto-attempts to UEFI boot PXE v4 and PXE v6. Prior just
-        # does IPv4 and we cannot easily edit the nvram to inject just v6.
-        # TODO(TheJulia): The devstack plugin also needs to be changed to
-        # dhcpv6-stateful instead of stateless when this is changed to UEFI
-        # as OVMF/E2DK does not support stateless.
-        IRONIC_BOOT_MODE: bios
-
 
 # NOTE(rpittau): OLD TINYIPA JOBS
 # Those jobs are used by other projects, we leave them here until
@@ -1258,7 +1250,7 @@
 
 - job:
     name: ironic-cross-sushy
-    nodeset: ubuntu-jammy
+    nodeset: ubuntu-noble
     description: Ironic unit tests run with Sushy from source
     parent: openstack-tox
     required-projects:
@@ -1273,8 +1265,8 @@
       - ^tools/.*$
     vars:
       # NOTE(dtantsur): change this every release cycle if needed.
-      bindep_profile: test py310
-      tox_envlist: py310
+      bindep_profile: test py312
+      tox_envlist: py312
       # This variable ensures that sushy is installed from source.
       tox_install_siblings: true
       # NOTE(dtantsur): this job will be run on sushy as well, so it's
diff --git a/zuul.d/metal3-jobs.yaml b/zuul.d/metal3-jobs.yaml
index 43f4e7d7d8..b8661db73f 100644
--- a/zuul.d/metal3-jobs.yaml
+++ b/zuul.d/metal3-jobs.yaml
@@ -3,6 +3,9 @@
     name: metal3-base
     abstract: true
     description: Base job for metal3-dev-env based ironic jobs.
+    # NOTE(rpittau): metal3-dev-env does not support ubuntu noble yet
+    # so migration will happen later, for more info see:
+    # https://github.com/metal3-io/metal3-dev-env/issues/1430
     nodeset: openstack-single-node-jammy
     run: playbooks/metal3-ci/run.yaml
     post-run: playbooks/metal3-ci/post.yaml
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 4ce1fa1f79..557c1c3ae0 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -60,7 +60,7 @@
             voting: false
         - ironic-standalone-anaconda:
             voting: false
-        - bifrost-integration-tinyipa-ubuntu-jammy:
+        - bifrost-integration-tinyipa-ubuntu-noble:
             voting: false
         - bifrost-integration-redfish-vmedia-uefi-centos-9:
             voting: false