Commit fcf1f59a authored by Russell King's avatar Russell King Committed by David S. Miller

net: phy: marvell: rearrange to use genphy_read_lpa()

Rearrange the Marvell PHY driver to use genphy_read_lpa() rather than
open-coding this functionality.
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0efc286a
...@@ -1343,30 +1343,50 @@ static int marvell_read_status_page_an(struct phy_device *phydev, ...@@ -1343,30 +1343,50 @@ static int marvell_read_status_page_an(struct phy_device *phydev,
{ {
int status; int status;
int lpa; int lpa;
int lpagb; int err;
status = phy_read(phydev, MII_M1011_PHY_STATUS); status = phy_read(phydev, MII_M1011_PHY_STATUS);
if (status < 0) if (status < 0)
return status; return status;
if (!fiber) {
err = genphy_read_lpa(phydev);
if (err < 0)
return err;
phydev->pause = 0;
phydev->asym_pause = 0;
phy_resolve_aneg_pause(phydev);
} else {
lpa = phy_read(phydev, MII_LPA); lpa = phy_read(phydev, MII_LPA);
if (lpa < 0) if (lpa < 0)
return lpa; return lpa;
lpagb = phy_read(phydev, MII_STAT1000); /* The fiber link is only 1000M capable */
if (lpagb < 0) fiber_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
return lpagb;
phydev->pause = 0;
phydev->asym_pause = 0;
if (phydev->duplex == DUPLEX_FULL) {
if (!(lpa & LPA_PAUSE_FIBER)) {
phydev->pause = 0;
phydev->asym_pause = 0;
} else if ((lpa & LPA_PAUSE_ASYM_FIBER)) {
phydev->pause = 1;
phydev->asym_pause = 1;
} else {
phydev->pause = 1;
phydev->asym_pause = 0;
}
}
}
if (status & MII_M1011_PHY_STATUS_FULLDUPLEX) if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
phydev->duplex = DUPLEX_FULL; phydev->duplex = DUPLEX_FULL;
else else
phydev->duplex = DUPLEX_HALF; phydev->duplex = DUPLEX_HALF;
status = status & MII_M1011_PHY_STATUS_SPD_MASK; switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
phydev->pause = 0;
phydev->asym_pause = 0;
switch (status) {
case MII_M1011_PHY_STATUS_1000: case MII_M1011_PHY_STATUS_1000:
phydev->speed = SPEED_1000; phydev->speed = SPEED_1000;
break; break;
...@@ -1380,28 +1400,6 @@ static int marvell_read_status_page_an(struct phy_device *phydev, ...@@ -1380,28 +1400,6 @@ static int marvell_read_status_page_an(struct phy_device *phydev,
break; break;
} }
if (!fiber) {
mii_lpa_to_linkmode_lpa_t(phydev->lp_advertising, lpa);
mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, lpagb);
phy_resolve_aneg_pause(phydev);
} else {
/* The fiber link is only 1000M capable */
fiber_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
if (phydev->duplex == DUPLEX_FULL) {
if (!(lpa & LPA_PAUSE_FIBER)) {
phydev->pause = 0;
phydev->asym_pause = 0;
} else if ((lpa & LPA_PAUSE_ASYM_FIBER)) {
phydev->pause = 1;
phydev->asym_pause = 1;
} else {
phydev->pause = 1;
phydev->asym_pause = 0;
}
}
}
return 0; return 0;
} }
......
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