|
@@ -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)
|