On 10.07.23 08:36, Marco Felsch wrote: > This commit ports Linux commit: > > | commit 3c51fa5d2afe7a4909b53af5019635326389dd29 > | Author: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> > | Date: Tue Jan 12 22:59:43 2021 +0000 > | > | net: phy: ar803x: disable extended next page bit > | > | This bit is enabled by default and advertises support for extended > | next page support. XNP is only needed for 10GBase-T and MultiGig > | support which is not supported. Additionally, Cisco MultiGig switches > | will read this bit and attempt 10Gb negotiation even though Next Page > | support is disabled. This will cause timeouts when the interface is > | forced to 100Mbps and auto-negotiation will fail. The interfaces are > | only 1000Base-T and supporting auto-negotiation for this only requires > | the Next Page bit to be set. > | > | Taken from: > | https://github.com/SolidRun/linux-stable/commit/7406c5244b7ea6bc17a2afe8568277a8c4b126a9 > | and adapted to mainline kernels by rmk. > | > | Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> > | Reviewed-by: Andrew Lunn <andrew@xxxxxxx> > | Link: https://lore.kernel.org/r/E1kzSdb-000417-FJ@xxxxxxxxxxxxxxxxxxxxxx > | Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> > > Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx> Reviewed-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> > --- > drivers/net/phy/at803x.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c > index d8a9c3588f..577bdf1244 100644 > --- a/drivers/net/phy/at803x.c > +++ b/drivers/net/phy/at803x.c > @@ -365,7 +365,13 @@ static int at803x_config_init(struct phy_device *phydev) > if (ret < 0) > return ret; > > - return 0; > + /* Ar803x extended next page bit is enabled by default. Cisco > + * multigig switches read this bit and attempt to negotiate 10Gbps > + * rates even if the next page bit is disabled. This is incorrect > + * behaviour but we still need to accommodate it. XNP is only needed > + * for 10Gbps support, so disable XNP. > + */ > + return phy_modify(phydev, MII_ADVERTISE, MDIO_AN_CTRL1_XNP, 0); > } > > static struct phy_driver at803x_driver[] = { -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |