From: Markus Niebel <[email protected]> Disable the support due to chip errata and call genphy_config_aneg instead of genphy_config. For a complete describtion look at the errata sheets: DS80000691D or DS80000692D.
Signed-off-by: Markus Niebel <[email protected]> Signed-off-by: Max Merchel <[email protected]> --- drivers/net/phy/micrel_ksz90x1.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/micrel_ksz90x1.c b/drivers/net/phy/micrel_ksz90x1.c index a02dbe900b8..bc42506c65e 100644 --- a/drivers/net/phy/micrel_ksz90x1.c +++ b/drivers/net/phy/micrel_ksz90x1.c @@ -336,6 +336,7 @@ static int ksz9031_phy_extwrite(struct phy_device *phydev, int addr, static int ksz9031_config(struct phy_device *phydev) { + unsigned int features = phydev->drv->features; int ret; ret = ksz9031_of_config(phydev); @@ -371,7 +372,22 @@ static int ksz9031_config(struct phy_device *phydev) return 0; } - return genphy_config(phydev); + /* Silicon Errata Sheet (DS80000691D or DS80000692D): + * Whenever the device's Asymmetric Pause capability is set to 1, + * link-up may fail after a link-up to link-down transition. + * + * Workaround: + * Do not enable the Asymmetric Pause capability bit. + */ + features &= ~ADVERTISE_PAUSE_ASYM; + /* update feature support and forward to advertised features */ + phydev->supported = features; + phydev->advertising = phydev->supported; + + /* genphy_restart_aneg called from genphy_config_aneg */ + return genphy_config_aneg(phydev); + + return 0; } U_BOOT_PHY_DRIVER(ksz9031) = { -- 2.43.0

