net: phy: fix wrong mask to phy_modify()
authorIngo van Lil <inguin@gmx.de>
Mon, 12 Feb 2018 11:02:52 +0000 (12:02 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Feb 2018 16:42:48 +0000 (11:42 -0500)
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().

Fixes: fea23fb591cc ("net: phy: convert read-modify-write to phy_modify()")
Signed-off-by: Ingo van Lil <inguin@gmx.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy_device.c

index b13eed21c87dac6fcad78c4240cf76200a1c4288..d39ae77707ef0ac49e7df50cb0b84ab222ed6f67 100644 (file)
@@ -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);