Skip to content

Commit f102852

Browse files
Russell Kingdavem330
authored andcommitted
net: phy: fix wrong masks to phy_modify()
The mask argument for phy_modify() in several locations was inverted. Fixes: fea23fb ("net: phy: convert read-modify-write to phy_modify()") Reported-by: Heiner Kallweit <[email protected]> Tested-by: Andrew Lunn <[email protected]> Signed-off-by: Russell King <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 64f26ab commit f102852

File tree

4 files changed

+14
-15
lines changed

4 files changed

+14
-15
lines changed

drivers/net/phy/at803x.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ static int at803x_suspend(struct phy_device *phydev)
230230

231231
static int at803x_resume(struct phy_device *phydev)
232232
{
233-
return phy_modify(phydev, MII_BMCR, ~(BMCR_PDOWN | BMCR_ISOLATE), 0);
233+
return phy_modify(phydev, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, 0);
234234
}
235235

236236
static int at803x_probe(struct phy_device *phydev)

drivers/net/phy/marvell.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ static int m88e3016_config_init(struct phy_device *phydev)
668668

669669
/* Enable Scrambler and Auto-Crossover */
670670
ret = phy_modify(phydev, MII_88E3016_PHY_SPEC_CTRL,
671-
~MII_88E3016_DISABLE_SCRAMBLER,
671+
MII_88E3016_DISABLE_SCRAMBLER,
672672
MII_88E3016_AUTO_MDIX_CROSSOVER);
673673
if (ret < 0)
674674
return ret;
@@ -684,9 +684,9 @@ static int m88e1111_config_init_hwcfg_mode(struct phy_device *phydev,
684684
mode |= MII_M1111_HWCFG_FIBER_COPPER_AUTO;
685685

686686
return phy_modify(phydev, MII_M1111_PHY_EXT_SR,
687-
(u16)~(MII_M1111_HWCFG_MODE_MASK |
688-
MII_M1111_HWCFG_FIBER_COPPER_AUTO |
689-
MII_M1111_HWCFG_FIBER_COPPER_RES),
687+
MII_M1111_HWCFG_MODE_MASK |
688+
MII_M1111_HWCFG_FIBER_COPPER_AUTO |
689+
MII_M1111_HWCFG_FIBER_COPPER_RES,
690690
mode);
691691
}
692692

@@ -705,8 +705,7 @@ static int m88e1111_config_init_rgmii_delays(struct phy_device *phydev)
705705
}
706706

707707
return phy_modify(phydev, MII_M1111_PHY_EXT_CR,
708-
(u16)~(MII_M1111_RGMII_RX_DELAY |
709-
MII_M1111_RGMII_TX_DELAY),
708+
MII_M1111_RGMII_RX_DELAY | MII_M1111_RGMII_TX_DELAY,
710709
delay);
711710
}
712711

@@ -833,7 +832,7 @@ static int m88e1510_config_init(struct phy_device *phydev)
833832

834833
/* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
835834
err = phy_modify(phydev, MII_88E1510_GEN_CTRL_REG_1,
836-
~MII_88E1510_GEN_CTRL_REG_1_MODE_MASK,
835+
MII_88E1510_GEN_CTRL_REG_1_MODE_MASK,
837836
MII_88E1510_GEN_CTRL_REG_1_MODE_SGMII);
838837
if (err < 0)
839838
return err;
@@ -957,7 +956,7 @@ static int m88e1145_config_init_rgmii(struct phy_device *phydev)
957956
if (err < 0)
958957
return err;
959958

960-
err = phy_modify(phydev, 0x1e, 0xf03f,
959+
err = phy_modify(phydev, 0x1e, 0x0fc0,
961960
2 << 9 | /* 36 ohm */
962961
2 << 6); /* 39 ohm */
963962
if (err < 0)
@@ -1379,7 +1378,7 @@ static int m88e1318_set_wol(struct phy_device *phydev,
13791378

13801379
/* Setup LED[2] as interrupt pin (active low) */
13811380
err = __phy_modify(phydev, MII_88E1318S_PHY_LED_TCR,
1382-
(u16)~MII_88E1318S_PHY_LED_TCR_FORCE_INT,
1381+
MII_88E1318S_PHY_LED_TCR_FORCE_INT,
13831382
MII_88E1318S_PHY_LED_TCR_INTn_ENABLE |
13841383
MII_88E1318S_PHY_LED_TCR_INT_ACTIVE_LOW);
13851384
if (err < 0)
@@ -1419,7 +1418,7 @@ static int m88e1318_set_wol(struct phy_device *phydev,
14191418

14201419
/* Clear WOL status and disable magic packet matching */
14211420
err = __phy_modify(phydev, MII_88E1318S_PHY_WOL_CTRL,
1422-
(u16)~MII_88E1318S_PHY_WOL_CTRL_MAGIC_PACKET_MATCH_ENABLE,
1421+
MII_88E1318S_PHY_WOL_CTRL_MAGIC_PACKET_MATCH_ENABLE,
14231422
MII_88E1318S_PHY_WOL_CTRL_CLEAR_WOL_STATUS);
14241423
if (err < 0)
14251424
goto error;

drivers/net/phy/phy-core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ EXPORT_SYMBOL(phy_write_mmd);
332332
* @set: bit mask of bits to set
333333
*
334334
* Unlocked helper function which allows a PHY register to be modified as
335-
* new register value = (old register value & mask) | set
335+
* new register value = (old register value & ~mask) | set
336336
*/
337337
int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)
338338
{

drivers/net/phy/phy_device.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,7 +1393,7 @@ EXPORT_SYMBOL(genphy_setup_forced);
13931393
int genphy_restart_aneg(struct phy_device *phydev)
13941394
{
13951395
/* Don't isolate the PHY if we're negotiating */
1396-
return phy_modify(phydev, MII_BMCR, ~BMCR_ISOLATE,
1396+
return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE,
13971397
BMCR_ANENABLE | BMCR_ANRESTART);
13981398
}
13991399
EXPORT_SYMBOL(genphy_restart_aneg);
@@ -1666,13 +1666,13 @@ EXPORT_SYMBOL(genphy_suspend);
16661666

16671667
int genphy_resume(struct phy_device *phydev)
16681668
{
1669-
return phy_modify(phydev, MII_BMCR, ~BMCR_PDOWN, 0);
1669+
return phy_modify(phydev, MII_BMCR, BMCR_PDOWN, 0);
16701670
}
16711671
EXPORT_SYMBOL(genphy_resume);
16721672

16731673
int genphy_loopback(struct phy_device *phydev, bool enable)
16741674
{
1675-
return phy_modify(phydev, MII_BMCR, ~BMCR_LOOPBACK,
1675+
return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK,
16761676
enable ? BMCR_LOOPBACK : 0);
16771677
}
16781678
EXPORT_SYMBOL(genphy_loopback);

0 commit comments

Comments
 (0)