]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: mdio: fix incorrect phy address check
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 25 Oct 2025 18:35:47 +0000 (20:35 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 30 Oct 2025 01:58:01 +0000 (18:58 -0700)
max_addr is the max number of addresses, not the highest possible address,
therefore check phydev->mdio.addr > max_addr isn't correct.
To fix this change the semantics of max_addr, so that it represents
the highest possible address. IMO this is also a little bit more intuitive
wrt name max_addr.

Fixes: 4a107a0e8361 ("net: stmmac: mdio: use phy_find_first to simplify stmmac_mdio_register")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Reported-by: Simon Horman <horms@kernel.org>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/e869999b-2d4b-4dc1-9890-c2d3d1e8d0f8@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c

index 3f8cc3293964c2961ff4994794691a902875c937..1e82850f2a25c33dffafa2fd3fb77a04852e9ace 100644 (file)
@@ -583,9 +583,9 @@ int stmmac_mdio_register(struct net_device *ndev)
        struct device_node *mdio_node = priv->plat->mdio_node;
        struct device *dev = ndev->dev.parent;
        struct fwnode_handle *fixed_node;
+       int max_addr = PHY_MAX_ADDR - 1;
        struct fwnode_handle *fwnode;
        struct phy_device *phydev;
-       int max_addr;
 
        if (!mdio_bus_data)
                return 0;
@@ -609,15 +609,12 @@ int stmmac_mdio_register(struct net_device *ndev)
 
                if (priv->synopsys_id < DWXGMAC_CORE_2_20) {
                        /* Right now only C22 phys are supported */
-                       max_addr = MII_XGMAC_MAX_C22ADDR + 1;
+                       max_addr = MII_XGMAC_MAX_C22ADDR;
 
                        /* Check if DT specified an unsupported phy addr */
                        if (priv->plat->phy_addr > MII_XGMAC_MAX_C22ADDR)
                                dev_err(dev, "Unsupported phy_addr (max=%d)\n",
                                        MII_XGMAC_MAX_C22ADDR);
-               } else {
-                       /* XGMAC version 2.20 onwards support 32 phy addr */
-                       max_addr = PHY_MAX_ADDR;
                }
        } else {
                new_bus->read = &stmmac_mdio_read_c22;
@@ -626,8 +623,6 @@ int stmmac_mdio_register(struct net_device *ndev)
                        new_bus->read_c45 = &stmmac_mdio_read_c45;
                        new_bus->write_c45 = &stmmac_mdio_write_c45;
                }
-
-               max_addr = PHY_MAX_ADDR;
        }
 
        if (mdio_bus_data->needs_reset)