summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>2022-02-06 00:49:51 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-02-16 12:51:43 +0100
commit365bf4dafdb9594aaf40ba5b86f2bfe589b7296e (patch)
tree94f7c600b3c636f589b5b7ca57e25f0912406339
parent1cd1178d2f2e695290b9b686dfed65dbf5ffac9f (diff)
downloadlinux-stable-365bf4dafdb9594aaf40ba5b86f2bfe589b7296e.tar.gz
linux-stable-365bf4dafdb9594aaf40ba5b86f2bfe589b7296e.tar.bz2
linux-stable-365bf4dafdb9594aaf40ba5b86f2bfe589b7296e.zip
net: phy: marvell: Fix MDI-x polarity setting in 88e1118-compatible PHYs
commit aec12836e7196e4d360b2cbf20cf7aa5139ad2ec upstream. When setting up autonegotiation for 88E1118R and compatible PHYs, a software reset of PHY is issued before setting up polarity. This is incorrect as changes of MDI Crossover Mode bits are disruptive to the normal operation and must be followed by a software reset to take effect. Let's patch m88e1118_config_aneg() to fix the issue mentioned before by invoking software reset of the PHY just after setting up MDI-x polarity. Fixes: 605f196efbf8 ("phy: Add support for Marvell 88E1118 PHY") Signed-off-by: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> Reviewed-by: Serge Semin <fancer.lancer@gmail.com> Suggested-by: Andrew Lunn <andrew@lunn.ch> Cc: stable@vger.kernel.org Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/net/phy/marvell.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 484f6691b9c9..418b28b4267d 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -899,16 +899,15 @@ static int m88e1118_config_aneg(struct phy_device *phydev)
{
int err;
- err = genphy_soft_reset(phydev);
+ err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
if (err < 0)
return err;
- err = marvell_set_polarity(phydev, phydev->mdix_ctrl);
+ err = genphy_config_aneg(phydev);
if (err < 0)
return err;
- err = genphy_config_aneg(phydev);
- return 0;
+ return genphy_soft_reset(phydev);
}
static int m88e1118_config_init(struct phy_device *phydev)