]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: phy: add flag is_genphy_driven to struct phy_device
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 14 Jun 2025 20:30:43 +0000 (22:30 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 17 Jun 2025 01:15:16 +0000 (18:15 -0700)
In order to get rid of phy_driver_is_genphy() and
phy_driver_is_genphy_10g(), as first step add and use a flag
phydev->is_genphy_driven.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/3f3ad6dc-402e-4915-8d5a-2306b6d5562b@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phy_device.c
include/linux/phy.h

index 5090783440206142cc516384d1244d7a34d76f02..2aae97b2ffd8bcfff84f088334c836265bff690a 100644 (file)
@@ -1522,7 +1522,6 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
        struct mii_bus *bus = phydev->mdio.bus;
        struct device *d = &phydev->mdio.dev;
        struct module *ndev_owner = NULL;
-       bool using_genphy = false;
        int err;
 
        /* For Ethernet device drivers that register their own MDIO bus, we
@@ -1548,7 +1547,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
                else
                        d->driver = &genphy_driver.mdiodrv.driver;
 
-               using_genphy = true;
+               phydev->is_genphy_driven = 1;
        }
 
        if (!try_module_get(d->driver->owner)) {
@@ -1557,7 +1556,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
                goto error_put_device;
        }
 
-       if (using_genphy) {
+       if (phydev->is_genphy_driven) {
                err = d->driver->probe(d);
                if (err >= 0)
                        err = device_bind_driver(d);
@@ -1627,7 +1626,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
         * the generic PHY driver we can't figure it out, thus set the old
         * legacy PORT_MII value.
         */
-       if (using_genphy)
+       if (phydev->is_genphy_driven)
                phydev->port = PORT_MII;
 
        /* Initial carrier state is off as the phy is about to be
@@ -1666,6 +1665,7 @@ error:
 
 error_module_put:
        module_put(d->driver->owner);
+       phydev->is_genphy_driven = 0;
        d->driver = NULL;
 error_put_device:
        put_device(d);
@@ -1799,9 +1799,10 @@ void phy_detach(struct phy_device *phydev)
         * from the generic driver so that there's a chance a
         * real driver could be loaded
         */
-       if (phy_driver_is_genphy(phydev) ||
-           phy_driver_is_genphy_10g(phydev))
+       if (phydev->is_genphy_driven) {
                device_release_driver(&phydev->mdio.dev);
+               phydev->is_genphy_driven = 0;
+       }
 
        /* Assert the reset signal */
        phy_device_reset(phydev, 1);
index 8e2e4fcd050e58ddd5dcabe41390bea528fa797b..32ed27f10639a3ddca807f53ed245960fb241337 100644 (file)
@@ -528,6 +528,7 @@ struct macsec_ops;
  * @mac_managed_pm: Set true if MAC driver takes of suspending/resuming PHY
  * @wol_enabled: Set to true if the PHY or the attached MAC have Wake-on-LAN
  *              enabled.
+ * @is_genphy_driven: PHY is driven by one of the generic PHY drivers
  * @state: State of the PHY for management purposes
  * @dev_flags: Device-specific flags used by the PHY driver.
  *
@@ -631,6 +632,7 @@ struct phy_device {
        unsigned is_on_sfp_module:1;
        unsigned mac_managed_pm:1;
        unsigned wol_enabled:1;
+       unsigned is_genphy_driven:1;
 
        unsigned autoneg:1;
        /* The most recently read link state */