net: phy: fix wrong mask to phy_modify()

Message ID 20180212110252.27804-1-inguin@gmx.de
State Accepted
Delegated to: David Miller
Headers show
Series
  • net: phy: fix wrong mask to phy_modify()
Related show

Commit Message

Ingo van Lil Feb. 12, 2018, 11:02 a.m.
When forcing a specific link mode, the PHY driver must clear the
existing speed and duplex bits in BMCR while preserving some other
control bits. This logic was accidentally inverted with the introduction
of phy_modify().

Signed-off-by: Ingo van Lil <inguin@gmx.de>
---
 drivers/net/phy/phy_device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andrew Lunn Feb. 12, 2018, 1:39 p.m. | #1
On Mon, Feb 12, 2018 at 12:02:52PM +0100, Ingo van Lil wrote:
> When forcing a specific link mode, the PHY driver must clear the
> existing speed and duplex bits in BMCR while preserving some other
> control bits. This logic was accidentally inverted with the introduction
> of phy_modify().
> 
> Signed-off-by: Ingo van Lil <inguin@gmx.de>

Fixes: fea23fb591cc ("net: phy: convert read-modify-write to phy_modify()")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
David Miller Feb. 12, 2018, 4:47 p.m. | #2
From: Ingo van Lil <inguin@gmx.de>
Date: Mon, 12 Feb 2018 12:02:52 +0100

> When forcing a specific link mode, the PHY driver must clear the
> existing speed and duplex bits in BMCR while preserving some other
> control bits. This logic was accidentally inverted with the introduction
> of phy_modify().
> 
> Signed-off-by: Ingo van Lil <inguin@gmx.de>

Applied and queued up for -stable.

Patch

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index b13eed21c87d..d39ae77707ef 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -1382,7 +1382,7 @@  int genphy_setup_forced(struct phy_device *phydev)
 		ctl |= BMCR_FULLDPLX;
 
 	return phy_modify(phydev, MII_BMCR,
-			  BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN, ctl);
+			  ~(BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN), ctl);
 }
 EXPORT_SYMBOL(genphy_setup_forced);