Skip to content

Commit 7d0586f

Browse files
claudiu-mgregkh
authored andcommitted
phy: aquantia: Fix AN when higher speeds than 1G are not advertised
[ Upstream commit 9b7fd16 ] Even when the eth port is resticted to work with speeds not higher than 1G, and so the eth driver is requesting the phy (via phylink) to advertise up to 1000BASET support, the aquantia phy device is still advertising for 2.5G and 5G speeds. Clear these advertising defaults when requested. Cc: Ondrej Spacek <[email protected]> Fixes: 09c4c57 ("net: phy: aquantia: add support for auto-negotiation configuration") Signed-off-by: Claudiu Manoil <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 05c1a6d commit 7d0586f

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

drivers/net/phy/aquantia_main.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
#define MDIO_AN_VEND_PROV 0xc400
3535
#define MDIO_AN_VEND_PROV_1000BASET_FULL BIT(15)
3636
#define MDIO_AN_VEND_PROV_1000BASET_HALF BIT(14)
37+
#define MDIO_AN_VEND_PROV_5000BASET_FULL BIT(11)
38+
#define MDIO_AN_VEND_PROV_2500BASET_FULL BIT(10)
3739
#define MDIO_AN_VEND_PROV_DOWNSHIFT_EN BIT(4)
3840
#define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK GENMASK(3, 0)
3941
#define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT 4
@@ -231,9 +233,20 @@ static int aqr_config_aneg(struct phy_device *phydev)
231233
phydev->advertising))
232234
reg |= MDIO_AN_VEND_PROV_1000BASET_HALF;
233235

236+
/* Handle the case when the 2.5G and 5G speeds are not advertised */
237+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
238+
phydev->advertising))
239+
reg |= MDIO_AN_VEND_PROV_2500BASET_FULL;
240+
241+
if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
242+
phydev->advertising))
243+
reg |= MDIO_AN_VEND_PROV_5000BASET_FULL;
244+
234245
ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV,
235246
MDIO_AN_VEND_PROV_1000BASET_HALF |
236-
MDIO_AN_VEND_PROV_1000BASET_FULL, reg);
247+
MDIO_AN_VEND_PROV_1000BASET_FULL |
248+
MDIO_AN_VEND_PROV_2500BASET_FULL |
249+
MDIO_AN_VEND_PROV_5000BASET_FULL, reg);
237250
if (ret < 0)
238251
return ret;
239252
if (ret > 0)

0 commit comments

Comments
 (0)