[PATCH net] net: phy: mxl-gpy: fix bogus error on USXGMII and integrated PHY

Daniel Golle posted 1 patch 1 week, 4 days ago
drivers/net/phy/mxl-gpy.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH net] net: phy: mxl-gpy: fix bogus error on USXGMII and integrated PHY
Posted by Daniel Golle 1 week, 4 days ago
As the interface mode doesn't need to be updated on PHYs connected with
USXGMII and integrated PHYs, gpy_update_interface() should just return 0
in these cases rather than -EINVAL which has wrongly been introduced by
commit 7a495dde27ebc ("net: phy: mxl-gpy: Change gpy_update_interface()
function return type"), as this breaks support for those PHYs.

Fixes: 7a495dde27ebc ("net: phy: mxl-gpy: Change gpy_update_interface() function return type")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
 drivers/net/phy/mxl-gpy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/phy/mxl-gpy.c b/drivers/net/phy/mxl-gpy.c
index 0daf0e86844a0..0058284b08f3b 100644
--- a/drivers/net/phy/mxl-gpy.c
+++ b/drivers/net/phy/mxl-gpy.c
@@ -541,7 +541,7 @@ static int gpy_update_interface(struct phy_device *phydev)
 	/* Interface mode is fixed for USXGMII and integrated PHY */
 	if (phydev->interface == PHY_INTERFACE_MODE_USXGMII ||
 	    phydev->interface == PHY_INTERFACE_MODE_INTERNAL)
-		return -EINVAL;
+		return 0;
 
 	/* Automatically switch SERDES interface between SGMII and 2500-BaseX
 	 * according to speed. Disable ANEG in 2500-BaseX mode.
-- 
2.51.2
Re: [PATCH net] net: phy: mxl-gpy: fix bogus error on USXGMII and integrated PHY
Posted by Russell King (Oracle) 1 week, 4 days ago
On Thu, Nov 20, 2025 at 02:17:13PM +0000, Daniel Golle wrote:
> As the interface mode doesn't need to be updated on PHYs connected with
> USXGMII and integrated PHYs, gpy_update_interface() should just return 0
> in these cases rather than -EINVAL which has wrongly been introduced by
> commit 7a495dde27ebc ("net: phy: mxl-gpy: Change gpy_update_interface()
> function return type"), as this breaks support for those PHYs.

I think there's more problems here. gpy_update_interface() does more
than just updating the interface, it also reads the master/slave and
mdix state at the end of the function. Returning early for interfaces
we don't means that we don't wish to update the interface for means
these don't get read. Since these are media-side and are irrespective
of the host-side interface, this seems buggy.

So, while this patch is correct, I think it would make sense to also
fix the other problems here.

Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Thanks!

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Re: [PATCH net] net: phy: mxl-gpy: fix bogus error on USXGMII and integrated PHY
Posted by Maxime Chevallier 1 week, 4 days ago

On 20/11/2025 15:17, Daniel Golle wrote:
> As the interface mode doesn't need to be updated on PHYs connected with
> USXGMII and integrated PHYs, gpy_update_interface() should just return 0
> in these cases rather than -EINVAL which has wrongly been introduced by
> commit 7a495dde27ebc ("net: phy: mxl-gpy: Change gpy_update_interface()
> function return type"), as this breaks support for those PHYs.
> 
> Fixes: 7a495dde27ebc ("net: phy: mxl-gpy: Change gpy_update_interface() function return type")
> Signed-off-by: Daniel Golle <daniel@makrotopia.org>

That looks correct indeed :)

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>

Maxime

> ---
>  drivers/net/phy/mxl-gpy.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/phy/mxl-gpy.c b/drivers/net/phy/mxl-gpy.c
> index 0daf0e86844a0..0058284b08f3b 100644
> --- a/drivers/net/phy/mxl-gpy.c
> +++ b/drivers/net/phy/mxl-gpy.c
> @@ -541,7 +541,7 @@ static int gpy_update_interface(struct phy_device *phydev)
>  	/* Interface mode is fixed for USXGMII and integrated PHY */
>  	if (phydev->interface == PHY_INTERFACE_MODE_USXGMII ||
>  	    phydev->interface == PHY_INTERFACE_MODE_INTERNAL)
> -		return -EINVAL;
> +		return 0;
>  
>  	/* Automatically switch SERDES interface between SGMII and 2500-BaseX
>  	 * according to speed. Disable ANEG in 2500-BaseX mode.