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: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0efc286a92
commit
fcf1f59afc
@ -1343,52 +1343,30 @@ 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;
|
||||||
|
|
||||||
lpa = phy_read(phydev, MII_LPA);
|
|
||||||
if (lpa < 0)
|
|
||||||
return lpa;
|
|
||||||
|
|
||||||
lpagb = phy_read(phydev, MII_STAT1000);
|
|
||||||
if (lpagb < 0)
|
|
||||||
return lpagb;
|
|
||||||
|
|
||||||
if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
|
|
||||||
phydev->duplex = DUPLEX_FULL;
|
|
||||||
else
|
|
||||||
phydev->duplex = DUPLEX_HALF;
|
|
||||||
|
|
||||||
status = status & MII_M1011_PHY_STATUS_SPD_MASK;
|
|
||||||
phydev->pause = 0;
|
|
||||||
phydev->asym_pause = 0;
|
|
||||||
|
|
||||||
switch (status) {
|
|
||||||
case MII_M1011_PHY_STATUS_1000:
|
|
||||||
phydev->speed = SPEED_1000;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MII_M1011_PHY_STATUS_100:
|
|
||||||
phydev->speed = SPEED_100;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
phydev->speed = SPEED_10;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fiber) {
|
if (!fiber) {
|
||||||
mii_lpa_to_linkmode_lpa_t(phydev->lp_advertising, lpa);
|
err = genphy_read_lpa(phydev);
|
||||||
mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, lpagb);
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
phydev->pause = 0;
|
||||||
|
phydev->asym_pause = 0;
|
||||||
phy_resolve_aneg_pause(phydev);
|
phy_resolve_aneg_pause(phydev);
|
||||||
} else {
|
} else {
|
||||||
|
lpa = phy_read(phydev, MII_LPA);
|
||||||
|
if (lpa < 0)
|
||||||
|
return lpa;
|
||||||
|
|
||||||
/* The fiber link is only 1000M capable */
|
/* The fiber link is only 1000M capable */
|
||||||
fiber_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
|
fiber_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
|
||||||
|
|
||||||
|
phydev->pause = 0;
|
||||||
|
phydev->asym_pause = 0;
|
||||||
if (phydev->duplex == DUPLEX_FULL) {
|
if (phydev->duplex == DUPLEX_FULL) {
|
||||||
if (!(lpa & LPA_PAUSE_FIBER)) {
|
if (!(lpa & LPA_PAUSE_FIBER)) {
|
||||||
phydev->pause = 0;
|
phydev->pause = 0;
|
||||||
@ -1402,6 +1380,26 @@ static int marvell_read_status_page_an(struct phy_device *phydev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status & MII_M1011_PHY_STATUS_FULLDUPLEX)
|
||||||
|
phydev->duplex = DUPLEX_FULL;
|
||||||
|
else
|
||||||
|
phydev->duplex = DUPLEX_HALF;
|
||||||
|
|
||||||
|
switch (status & MII_M1011_PHY_STATUS_SPD_MASK) {
|
||||||
|
case MII_M1011_PHY_STATUS_1000:
|
||||||
|
phydev->speed = SPEED_1000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MII_M1011_PHY_STATUS_100:
|
||||||
|
phydev->speed = SPEED_100;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
phydev->speed = SPEED_10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user