diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 6ba681b..b6de48a 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -7201,6 +7201,7 @@ constructor (GType type,
        NMDevicePrivate *priv;
        NMPlatform *platform;
        static guint32 id = 0;
+       gboolean no_firmware = FALSE;
 
        object = G_OBJECT_CLASS (nm_device_parent_class)->constructor (type,
                                 n_construct_params,
@@ -7221,6 +7222,14 @@ constructor (GType type,
                priv->udi = g_strdup_printf ("/virtual/device/placeholder/%d", id++);
        }
 
+       /*
+        * Some ETH device will power down the PHY when in DOWN state to save on power making
+        * it impossible to detect the link state.
+        * Power it before getting the generic capabilities.
+        */
+       if (NM_DEVICE_GET_CLASS (dev)->bring_up)
+               NM_DEVICE_GET_CLASS (dev)->bring_up (dev, &no_firmware);
+
        if (NM_DEVICE_GET_CLASS (dev)->get_generic_capabilities)
                priv->capabilities |= NM_DEVICE_GET_CLASS (dev)->get_generic_capabilities (dev);