phy/marvell: Make non-aneg speed/duplex forcing work for 88E1111 PHYs
According to specs, when auto-negotiation is disabled, Marvell PHYs need a software reset after changing speed/duplex forcing bits. Otherwise, the modified bits have no effect. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
a4b1164961
Коммит
8ff44985c7
|
@ -155,8 +155,27 @@ static int marvell_config_aneg(struct phy_device *phydev)
|
|||
return err;
|
||||
|
||||
err = genphy_config_aneg(phydev);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return err;
|
||||
if (phydev->autoneg != AUTONEG_ENABLE) {
|
||||
int bmcr;
|
||||
|
||||
/*
|
||||
* A write to speed/duplex bits (that is performed by
|
||||
* genphy_config_aneg() call above) must be followed by
|
||||
* a software reset. Otherwise, the write has no effect.
|
||||
*/
|
||||
bmcr = phy_read(phydev, MII_BMCR);
|
||||
if (bmcr < 0)
|
||||
return bmcr;
|
||||
|
||||
err = phy_write(phydev, MII_BMCR, bmcr | BMCR_RESET);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int m88e1121_config_aneg(struct phy_device *phydev)
|
||||
|
|
Загрузка…
Ссылка в новой задаче