if (!tp->phydev) {
                mdiobus_unregister(new_bus);
                return -ENODEV;
+       } else if (!tp->phydev->drv) {
+               /* Most chip versions fail with the genphy driver.
+                * Therefore ensure that the dedicated PHY driver is loaded.
+                */
+               dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n");
+               mdiobus_unregister(new_bus);
+               return -EUNATCH;
        }
 
        /* PHY will be woken up in rtl_open() */
        int chipset, region;
        int jumbo_max, rc;
 
-       /* Some tools for creating an initramfs don't consider softdeps, then
-        * r8169.ko may be in initramfs, but realtek.ko not. Then the generic
-        * PHY driver is used that doesn't work with most chip versions.
-        */
-       if (!driver_find("RTL8201CP Ethernet", &mdio_bus_type)) {
-               dev_err(&pdev->dev, "realtek.ko not loaded, maybe it needs to be added to initramfs?\n");
-               return -ENOENT;
-       }
-
        dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
        if (!dev)
                return -ENOMEM;