diff --git a/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-meson-fix-cross-compilation-issues.patch b/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-meson-fix-cross-compilation-issues.patch
deleted file mode 100644
index 617c614958..0000000000
--- a/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-meson-fix-cross-compilation-issues.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 49cc7ebaf3ed86b693ac80c76a28ba0db7406374 Mon Sep 17 00:00:00 2001
-From: Andrej Kozemcak <andrej.kozemcak@siemens.com>
-Date: Mon, 9 Mar 2026 15:50:26 +0100
-Subject: [PATCH] meson: fix cross-compilation issues
-
-Strip newline from GI_TYPELIB_PATH and LD_LIBRARY_PATH
-run_command().stdout() returns the raw shell output including a trailing
-newline. When the value is used to build a colon-separated path, the newline
-gets embedded at the end of the last path component, making the directory
-invalid and causing GObject Introspection to fail with:
-
-  ImportError: Typelib file for namespace 'Gio', version '2.0' not found
-
-Use .strip() to remove leading/trailing whitespace from both env variable
-reads.
-
-Fix jansson SONAME detection for cross-compilation
-When cross-compiling, jansson's pkg-config 'libdir' variable returns a
-path relative to the sysroot (e.g., /usr/lib) without the actual sysroot
-prefix.  The host readelf binary cannot find the library at that path.
-
-Fix this by using meson.get_external_property('sys_root', '') to obtain
-the sysroot path set by the cross-compilation environment and prepend it
-to the library path before calling readelf.
-
-Upstream-Status: Submitted [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2380]
-Signed-off-by: Andrej Kozemcak <andrej.kozemcak@siemens.com>
----
- meson.build                       | 3 ++-
- src/libnm-client-impl/meson.build | 4 ++--
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index 8b0334240d..75f6871dd2 100644
---- a/meson.build
-+++ b/meson.build
-@@ -296,7 +296,8 @@ config_h.set10('WITH_JANSSON', jansson_dep.found())
- jansson_msg = 'no'
- if jansson_dep.found()
-   jansson_libdir = jansson_dep.get_variable(pkgconfig: 'libdir')
--  res = run_command(find_program('eu-readelf', 'readelf'), '-d', join_paths(jansson_libdir, 'libjansson.so'), check: false)
-+  jansson_sysroot = meson.is_cross_build() ? meson.get_external_property('sys_root', '') : ''
-+  res = run_command(find_program('eu-readelf', 'readelf'), '-d', jansson_sysroot + join_paths(jansson_libdir, 'libjansson.so'), check: false)
-   jansson_soname = ''
-   foreach line: res.stdout().split('\n')
-     if line.strip().contains('SONAME')
-diff --git a/src/libnm-client-impl/meson.build b/src/libnm-client-impl/meson.build
-index 3352ebfee0..329078ab46 100644
---- a/src/libnm-client-impl/meson.build
-+++ b/src/libnm-client-impl/meson.build
-@@ -167,13 +167,13 @@ if enable_introspection
-     install: true,
-   )
- 
--  gi_typelib_path = run_command('printenv', 'GI_TYPELIB_PATH', check: false).stdout()
-+  gi_typelib_path = run_command('printenv', 'GI_TYPELIB_PATH', check: false).stdout().strip()
-   if gi_typelib_path != ''
-     gi_typelib_path = ':' + gi_typelib_path
-   endif
-   gi_typelib_path = meson.current_build_dir() + gi_typelib_path
- 
--  ld_library_path = run_command('printenv', 'LD_LIBRARY_PATH', check: false).stdout()
-+  ld_library_path = run_command('printenv', 'LD_LIBRARY_PATH', check: false).stdout().strip()
-   if ld_library_path != ''
-     ld_library_path = ':' + ld_library_path
-   endif
--- 
-2.47.3
-
diff --git a/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.56.0.bb b/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.58.0.bb
similarity index 94%
rename from meta-networking/recipes-connectivity/networkmanager/networkmanager_1.56.0.bb
rename to meta-networking/recipes-connectivity/networkmanager/networkmanager_1.58.0.bb
index a8f1a1673d..976f936b0d 100644
--- a/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.56.0.bb
+++ b/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.58.0.bb
@@ -38,20 +38,19 @@ DEPENDS:append:class-target = " bash-completion"
 inherit meson gettext update-rc.d systemd gobject-introspection update-alternatives upstream-version-is-even pkgconfig
 
 SRC_URI = " \
-    git://github.com/NetworkManager/NetworkManager.git;protocol=https;branch=nm-1-56;tag=${PV} \
+    git://github.com/NetworkManager/NetworkManager.git;protocol=https;branch=nm-1-58;tag=${PV} \
     file://${BPN}.initd \
     file://enable-dhcpcd.conf \
     file://enable-iwd.conf \
-    file://0002-meson-fix-cross-compilation-issues.patch \
 "
 SRC_URI:append:libc-musl = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch', '', d)}"
 
-SRCREV = "56b51b98fbb8627c4c09a483702e18fd8aee7ce1"
+SRCREV = "61302aac7f2e7411f3b42159544926484eacd37e"
 
 # ['auto', 'symlink', 'file', 'netconfig', 'resolvconf']
 NETWORKMANAGER_DNS_RC_MANAGER_DEFAULT ??= "auto"
 
-# ['dhclient', 'dhcpcd', 'internal', 'nettools']
+# ['dhcpcd', 'internal', 'nettools']
 NETWORKMANAGER_DHCP_DEFAULT ??= "internal"
 
 # The default gets detected based on whether /usr/sbin/nft or /usr/sbin/iptables is installed, with nftables preferred.
@@ -81,9 +80,13 @@ PACKAGECONFIG ??= "readline nss ifupdown dnsmasq nmcli \
 
 inherit ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
 
+# systemdsystemunitdir and systemdsystemgeneratordir both default to an empty
+# string, which makes meson.build assert that systemd was found so it can
+# resolve them from systemd.pc. Both have to be turned off explicitly, not just
+# the unit dir, otherwise configure fails when systemd is not available.
 PACKAGECONFIG[systemd] = "\
     -Dsystemdsystemunitdir=${systemd_unitdir}/system -Dsession_tracking=systemd,\
-    -Dsystemdsystemunitdir=no -Dsystemd_journal=false -Dsession_tracking=no\
+    -Dsystemdsystemunitdir=no -Dsystemdsystemgeneratordir=no -Dsystemd_journal=false -Dsession_tracking=no\
 "
 PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false,polkit"
 PACKAGECONFIG[bluez5] = "-Dbluez5_dun=true,-Dbluez5_dun=false,bluez5"
@@ -96,7 +99,7 @@ PACKAGECONFIG[nss] = "-Dcrypto=nss,,nss"
 PACKAGECONFIG[resolvconf] = "-Dresolvconf=${base_sbindir}/resolvconf,-Dresolvconf=no,,resolvconf"
 PACKAGECONFIG[gnutls] = "-Dcrypto=gnutls,,gnutls"
 PACKAGECONFIG[crypto-null] = "-Dcrypto=null"
-PACKAGECONFIG[wifi] = "-Dwext=true -Dwifi=true,-Dwext=false -Dwifi=false"
+PACKAGECONFIG[wifi] = "-Dwifi=true,-Dwifi=false"
 PACKAGECONFIG[iwd] = "-Diwd=true,-Diwd=false"
 PACKAGECONFIG[ifupdown] = "-Difupdown=true,-Difupdown=false"
 PACKAGECONFIG[cloud-setup] = "-Dnm_cloud_setup=true,-Dnm_cloud_setup=false,jansson"
@@ -109,13 +112,13 @@ PACKAGECONFIG[audit] = "-Dlibaudit=yes,-Dlibaudit=no,audit"
 PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux"
 PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false"
 PACKAGECONFIG[dhcpcd] = "-Ddhcpcd=${base_sbindir}/dhcpcd,-Ddhcpcd=no,,dhcpcd"
-PACKAGECONFIG[dhclient] = "-Ddhclient=yes,-Ddhclient=no,,dhcp"
 PACKAGECONFIG[concheck] = "-Dconcheck=true,-Dconcheck=false"
 PACKAGECONFIG[adsl] = ",,"
 PACKAGECONFIG[wwan] = ",,"
 # The following PACKAGECONFIG is used to determine whether NM is managing /etc/resolv.conf itself or not
 PACKAGECONFIG[man-resolv-conf] = ",,"
 PACKAGECONFIG[nbft] = "-Dnbft=true,-Dnbft=false"
+PACKAGECONFIG[clat] = "-Dclat=true,-Dclat=false,libbpf"
 
 
 PACKAGES =+ " \
@@ -252,9 +255,10 @@ FILES:${PN}-daemon += " \
     ${sysconfdir}/resolv-conf.NetworkManager \
     ${sysconfdir}/sysconfig/network-scripts \
     ${systemd_system_unitdir} \
+    ${systemd_unitdir}/system-generators \
 "
 RDEPENDS:${PN}-daemon += "\
-    ${@bb.utils.contains('PACKAGECONFIG', 'ifupdown', 'bash', '', d)} \
+    bash \
 "
 RRECOMMENDS:${PN}-daemon += "\
     ${NETWORKMANAGER_FIREWALL_DEFAULT} \
