Skip to content

Commit

Permalink
phy: marvell: add link partner advertised modes
Browse files Browse the repository at this point in the history
Read the standard link partner advertisment registers and store it in
phydev->lp_advertising, so ethtool can report this information to
userspace via ethtool.  Zero it as per genphy if autonegotiation is
disabled.  Tested with a Marvell 88E1512 PHY.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Russell King authored and David S. Miller committed Sep 25, 2015
1 parent b626ef0 commit 357cd64
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/net/phy/marvell.c
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,7 @@ static int marvell_read_status(struct phy_device *phydev)
int adv;
int err;
int lpa;
int lpagb;
int status = 0;

/* Update the link, but return if there
Expand All @@ -802,10 +803,17 @@ static int marvell_read_status(struct phy_device *phydev)
if (lpa < 0)
return lpa;

lpagb = phy_read(phydev, MII_STAT1000);
if (lpagb < 0)
return lpagb;

adv = phy_read(phydev, MII_ADVERTISE);
if (adv < 0)
return adv;

phydev->lp_advertising = mii_stat1000_to_ethtool_lpa_t(lpagb) |
mii_lpa_to_ethtool_lpa_t(lpa);

lpa &= adv;

if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
Expand Down Expand Up @@ -853,6 +861,7 @@ static int marvell_read_status(struct phy_device *phydev)
phydev->speed = SPEED_10;

phydev->pause = phydev->asym_pause = 0;
phydev->lp_advertising = 0;
}

return 0;
Expand Down

0 comments on commit 357cd64

Please sign in to comment.