Commit 8027c85c authored by Łukasz Stelmach's avatar Łukasz Stelmach Committed by Jakub Kicinski

net: mii: Report advertised link capabilities when autonegotiation is off

Unify the set of information returned by mii_ethtool_get_link_ksettings(),
mii_ethtool_gset() and phy_ethtool_ksettings_get(). Make the mii_*()
functions report advertised settings when autonegotiation if disabled.
Suggested-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarŁukasz Stelmach <l.stelmach@samsung.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20201027114317.8259-1-l.stelmach@samsung.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6e2b243d
...@@ -84,15 +84,16 @@ int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) ...@@ -84,15 +84,16 @@ int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd)
ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000);
stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000);
} }
if (bmcr & BMCR_ANENABLE) {
ecmd->advertising |= ADVERTISED_Autoneg;
ecmd->autoneg = AUTONEG_ENABLE;
ecmd->advertising |= mii_get_an(mii, MII_ADVERTISE); ecmd->advertising |= mii_get_an(mii, MII_ADVERTISE);
if (mii->supports_gmii) if (mii->supports_gmii)
ecmd->advertising |= ecmd->advertising |=
mii_ctrl1000_to_ethtool_adv_t(ctrl1000); mii_ctrl1000_to_ethtool_adv_t(ctrl1000);
if (bmcr & BMCR_ANENABLE) {
ecmd->advertising |= ADVERTISED_Autoneg;
ecmd->autoneg = AUTONEG_ENABLE;
if (bmsr & BMSR_ANEGCOMPLETE) { if (bmsr & BMSR_ANEGCOMPLETE) {
ecmd->lp_advertising = mii_get_an(mii, MII_LPA); ecmd->lp_advertising = mii_get_an(mii, MII_LPA);
ecmd->lp_advertising |= ecmd->lp_advertising |=
...@@ -171,14 +172,15 @@ void mii_ethtool_get_link_ksettings(struct mii_if_info *mii, ...@@ -171,14 +172,15 @@ void mii_ethtool_get_link_ksettings(struct mii_if_info *mii,
ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000);
stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000);
} }
if (bmcr & BMCR_ANENABLE) {
advertising |= ADVERTISED_Autoneg;
cmd->base.autoneg = AUTONEG_ENABLE;
advertising |= mii_get_an(mii, MII_ADVERTISE); advertising |= mii_get_an(mii, MII_ADVERTISE);
if (mii->supports_gmii) if (mii->supports_gmii)
advertising |= mii_ctrl1000_to_ethtool_adv_t(ctrl1000); advertising |= mii_ctrl1000_to_ethtool_adv_t(ctrl1000);
if (bmcr & BMCR_ANENABLE) {
advertising |= ADVERTISED_Autoneg;
cmd->base.autoneg = AUTONEG_ENABLE;
if (bmsr & BMSR_ANEGCOMPLETE) { if (bmsr & BMSR_ANEGCOMPLETE) {
lp_advertising = mii_get_an(mii, MII_LPA); lp_advertising = mii_get_an(mii, MII_LPA);
lp_advertising |= lp_advertising |=
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment