Fix marvell_set_downshift() from clobbering MSCR register.
A typo in marvell_set_downshift() clobbers the MSCR register. This register also shares settings with the auto MDI-X detection, set by marvell_set_polarity(). In the 1116R init, downshift is set after polarity, causing the polarity settings to be clobbered.
This bug is present on the 5.4 series and was introduced in commit 6ef05eb73c8f ("net: phy: marvell: Refactor setting downshift into a helper"). This patch need not be forward-ported to 5.5 because the affected functions were rewritten.
Fixes: 6ef05eb73c8f ("net: phy: marvell: Refactor setting downshift into a helper") Signed-off-by: Darell Tan darell.tan@gmail.com Reviewed-by: Andrew Lunn andrew@lunn.ch Acked-by: David S. Miller davem@davemloft.net --- changes v2: - added tags to sign-off area - resubmitted to stable list from netdev, as instructed by David Miller
drivers/net/phy/marvell.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index a7796134e..6ab8fe339 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -282,7 +282,7 @@ static int marvell_set_downshift(struct phy_device *phydev, bool enable, if (reg < 0) return reg;
- reg &= MII_M1011_PHY_SRC_DOWNSHIFT_MASK; + reg &= ~MII_M1011_PHY_SRC_DOWNSHIFT_MASK; reg |= ((retries - 1) << MII_M1011_PHY_SCR_DOWNSHIFT_SHIFT); if (enable) reg |= MII_M1011_PHY_SCR_DOWNSHIFT_EN;