mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-07 17:19:02 +00:00
phy: aquantia: Fix AN when higher speeds than 1G are not advertised
[ Upstream commit9b7fd1670a
] 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 <ondrej.spacek@nxp.com> Fixes:09c4c57f7b
("net: phy: aquantia: add support for auto-negotiation configuration") Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> Link: https://lore.kernel.org/r/20220610084037.7625-1-claudiu.manoil@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
05c1a6d04f
commit
7d0586f226
1 changed files with 14 additions and 1 deletions
|
@ -34,6 +34,8 @@
|
|||
#define MDIO_AN_VEND_PROV 0xc400
|
||||
#define MDIO_AN_VEND_PROV_1000BASET_FULL BIT(15)
|
||||
#define MDIO_AN_VEND_PROV_1000BASET_HALF BIT(14)
|
||||
#define MDIO_AN_VEND_PROV_5000BASET_FULL BIT(11)
|
||||
#define MDIO_AN_VEND_PROV_2500BASET_FULL BIT(10)
|
||||
#define MDIO_AN_VEND_PROV_DOWNSHIFT_EN BIT(4)
|
||||
#define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK GENMASK(3, 0)
|
||||
#define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT 4
|
||||
|
@ -231,9 +233,20 @@ static int aqr_config_aneg(struct phy_device *phydev)
|
|||
phydev->advertising))
|
||||
reg |= MDIO_AN_VEND_PROV_1000BASET_HALF;
|
||||
|
||||
/* Handle the case when the 2.5G and 5G speeds are not advertised */
|
||||
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
|
||||
phydev->advertising))
|
||||
reg |= MDIO_AN_VEND_PROV_2500BASET_FULL;
|
||||
|
||||
if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
|
||||
phydev->advertising))
|
||||
reg |= MDIO_AN_VEND_PROV_5000BASET_FULL;
|
||||
|
||||
ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV,
|
||||
MDIO_AN_VEND_PROV_1000BASET_HALF |
|
||||
MDIO_AN_VEND_PROV_1000BASET_FULL, reg);
|
||||
MDIO_AN_VEND_PROV_1000BASET_FULL |
|
||||
MDIO_AN_VEND_PROV_2500BASET_FULL |
|
||||
MDIO_AN_VEND_PROV_5000BASET_FULL, reg);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (ret > 0)
|
||||
|
|
Loading…
Reference in a new issue