|
34 | 34 | #define MDIO_AN_VEND_PROV 0xc400
|
35 | 35 | #define MDIO_AN_VEND_PROV_1000BASET_FULL BIT(15)
|
36 | 36 | #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) |
37 | 39 | #define MDIO_AN_VEND_PROV_DOWNSHIFT_EN BIT(4)
|
38 | 40 | #define MDIO_AN_VEND_PROV_DOWNSHIFT_MASK GENMASK(3, 0)
|
39 | 41 | #define MDIO_AN_VEND_PROV_DOWNSHIFT_DFLT 4
|
@@ -231,9 +233,20 @@ static int aqr_config_aneg(struct phy_device *phydev)
|
231 | 233 | phydev->advertising))
|
232 | 234 | reg |= MDIO_AN_VEND_PROV_1000BASET_HALF;
|
233 | 235 |
|
| 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 | + |
234 | 245 | ret = phy_modify_mmd_changed(phydev, MDIO_MMD_AN, MDIO_AN_VEND_PROV,
|
235 | 246 | 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); |
237 | 250 | if (ret < 0)
|
238 | 251 | return ret;
|
239 | 252 | if (ret > 0)
|
|
0 commit comments