Commit f102852f authored by Russell King's avatar Russell King Committed by David S. Miller

net: phy: fix wrong masks to phy_modify()

The mask argument for phy_modify() in several locations was inverted.

Fixes: fea23fb5 ("net: phy: convert read-modify-write to phy_modify()")
Reported-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 64f26abb
...@@ -230,7 +230,7 @@ static int at803x_suspend(struct phy_device *phydev) ...@@ -230,7 +230,7 @@ static int at803x_suspend(struct phy_device *phydev)
static int at803x_resume(struct phy_device *phydev) static int at803x_resume(struct phy_device *phydev)
{ {
return phy_modify(phydev, MII_BMCR, ~(BMCR_PDOWN | BMCR_ISOLATE), 0); return phy_modify(phydev, MII_BMCR, BMCR_PDOWN | BMCR_ISOLATE, 0);
} }
static int at803x_probe(struct phy_device *phydev) static int at803x_probe(struct phy_device *phydev)
......
...@@ -668,7 +668,7 @@ static int m88e3016_config_init(struct phy_device *phydev) ...@@ -668,7 +668,7 @@ static int m88e3016_config_init(struct phy_device *phydev)
/* Enable Scrambler and Auto-Crossover */ /* Enable Scrambler and Auto-Crossover */
ret = phy_modify(phydev, MII_88E3016_PHY_SPEC_CTRL, ret = phy_modify(phydev, MII_88E3016_PHY_SPEC_CTRL,
~MII_88E3016_DISABLE_SCRAMBLER, MII_88E3016_DISABLE_SCRAMBLER,
MII_88E3016_AUTO_MDIX_CROSSOVER); MII_88E3016_AUTO_MDIX_CROSSOVER);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -684,9 +684,9 @@ static int m88e1111_config_init_hwcfg_mode(struct phy_device *phydev, ...@@ -684,9 +684,9 @@ static int m88e1111_config_init_hwcfg_mode(struct phy_device *phydev,
mode |= MII_M1111_HWCFG_FIBER_COPPER_AUTO; mode |= MII_M1111_HWCFG_FIBER_COPPER_AUTO;
return phy_modify(phydev, MII_M1111_PHY_EXT_SR, return phy_modify(phydev, MII_M1111_PHY_EXT_SR,
(u16)~(MII_M1111_HWCFG_MODE_MASK | MII_M1111_HWCFG_MODE_MASK |
MII_M1111_HWCFG_FIBER_COPPER_AUTO | MII_M1111_HWCFG_FIBER_COPPER_AUTO |
MII_M1111_HWCFG_FIBER_COPPER_RES), MII_M1111_HWCFG_FIBER_COPPER_RES,
mode); mode);
} }
...@@ -705,8 +705,7 @@ static int m88e1111_config_init_rgmii_delays(struct phy_device *phydev) ...@@ -705,8 +705,7 @@ static int m88e1111_config_init_rgmii_delays(struct phy_device *phydev)
} }
return phy_modify(phydev, MII_M1111_PHY_EXT_CR, return phy_modify(phydev, MII_M1111_PHY_EXT_CR,
(u16)~(MII_M1111_RGMII_RX_DELAY | MII_M1111_RGMII_RX_DELAY | MII_M1111_RGMII_TX_DELAY,
MII_M1111_RGMII_TX_DELAY),
delay); delay);
} }
...@@ -833,7 +832,7 @@ static int m88e1510_config_init(struct phy_device *phydev) ...@@ -833,7 +832,7 @@ static int m88e1510_config_init(struct phy_device *phydev)
/* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */ /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
err = phy_modify(phydev, MII_88E1510_GEN_CTRL_REG_1, err = phy_modify(phydev, MII_88E1510_GEN_CTRL_REG_1,
~MII_88E1510_GEN_CTRL_REG_1_MODE_MASK, MII_88E1510_GEN_CTRL_REG_1_MODE_MASK,
MII_88E1510_GEN_CTRL_REG_1_MODE_SGMII); MII_88E1510_GEN_CTRL_REG_1_MODE_SGMII);
if (err < 0) if (err < 0)
return err; return err;
...@@ -957,7 +956,7 @@ static int m88e1145_config_init_rgmii(struct phy_device *phydev) ...@@ -957,7 +956,7 @@ static int m88e1145_config_init_rgmii(struct phy_device *phydev)
if (err < 0) if (err < 0)
return err; return err;
err = phy_modify(phydev, 0x1e, 0xf03f, err = phy_modify(phydev, 0x1e, 0x0fc0,
2 << 9 | /* 36 ohm */ 2 << 9 | /* 36 ohm */
2 << 6); /* 39 ohm */ 2 << 6); /* 39 ohm */
if (err < 0) if (err < 0)
...@@ -1379,7 +1378,7 @@ static int m88e1318_set_wol(struct phy_device *phydev, ...@@ -1379,7 +1378,7 @@ static int m88e1318_set_wol(struct phy_device *phydev,
/* Setup LED[2] as interrupt pin (active low) */ /* Setup LED[2] as interrupt pin (active low) */
err = __phy_modify(phydev, MII_88E1318S_PHY_LED_TCR, err = __phy_modify(phydev, MII_88E1318S_PHY_LED_TCR,
(u16)~MII_88E1318S_PHY_LED_TCR_FORCE_INT, MII_88E1318S_PHY_LED_TCR_FORCE_INT,
MII_88E1318S_PHY_LED_TCR_INTn_ENABLE | MII_88E1318S_PHY_LED_TCR_INTn_ENABLE |
MII_88E1318S_PHY_LED_TCR_INT_ACTIVE_LOW); MII_88E1318S_PHY_LED_TCR_INT_ACTIVE_LOW);
if (err < 0) if (err < 0)
...@@ -1419,7 +1418,7 @@ static int m88e1318_set_wol(struct phy_device *phydev, ...@@ -1419,7 +1418,7 @@ static int m88e1318_set_wol(struct phy_device *phydev,
/* Clear WOL status and disable magic packet matching */ /* Clear WOL status and disable magic packet matching */
err = __phy_modify(phydev, MII_88E1318S_PHY_WOL_CTRL, err = __phy_modify(phydev, MII_88E1318S_PHY_WOL_CTRL,
(u16)~MII_88E1318S_PHY_WOL_CTRL_MAGIC_PACKET_MATCH_ENABLE, MII_88E1318S_PHY_WOL_CTRL_MAGIC_PACKET_MATCH_ENABLE,
MII_88E1318S_PHY_WOL_CTRL_CLEAR_WOL_STATUS); MII_88E1318S_PHY_WOL_CTRL_CLEAR_WOL_STATUS);
if (err < 0) if (err < 0)
goto error; goto error;
......
...@@ -332,7 +332,7 @@ EXPORT_SYMBOL(phy_write_mmd); ...@@ -332,7 +332,7 @@ EXPORT_SYMBOL(phy_write_mmd);
* @set: bit mask of bits to set * @set: bit mask of bits to set
* *
* Unlocked helper function which allows a PHY register to be modified as * Unlocked helper function which allows a PHY register to be modified as
* new register value = (old register value & mask) | set * new register value = (old register value & ~mask) | set
*/ */
int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set) int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)
{ {
......
...@@ -1393,7 +1393,7 @@ EXPORT_SYMBOL(genphy_setup_forced); ...@@ -1393,7 +1393,7 @@ EXPORT_SYMBOL(genphy_setup_forced);
int genphy_restart_aneg(struct phy_device *phydev) int genphy_restart_aneg(struct phy_device *phydev)
{ {
/* Don't isolate the PHY if we're negotiating */ /* Don't isolate the PHY if we're negotiating */
return phy_modify(phydev, MII_BMCR, ~BMCR_ISOLATE, return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE,
BMCR_ANENABLE | BMCR_ANRESTART); BMCR_ANENABLE | BMCR_ANRESTART);
} }
EXPORT_SYMBOL(genphy_restart_aneg); EXPORT_SYMBOL(genphy_restart_aneg);
...@@ -1666,13 +1666,13 @@ EXPORT_SYMBOL(genphy_suspend); ...@@ -1666,13 +1666,13 @@ EXPORT_SYMBOL(genphy_suspend);
int genphy_resume(struct phy_device *phydev) int genphy_resume(struct phy_device *phydev)
{ {
return phy_modify(phydev, MII_BMCR, ~BMCR_PDOWN, 0); return phy_modify(phydev, MII_BMCR, BMCR_PDOWN, 0);
} }
EXPORT_SYMBOL(genphy_resume); EXPORT_SYMBOL(genphy_resume);
int genphy_loopback(struct phy_device *phydev, bool enable) int genphy_loopback(struct phy_device *phydev, bool enable)
{ {
return phy_modify(phydev, MII_BMCR, ~BMCR_LOOPBACK, return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK,
enable ? BMCR_LOOPBACK : 0); enable ? BMCR_LOOPBACK : 0);
} }
EXPORT_SYMBOL(genphy_loopback); EXPORT_SYMBOL(genphy_loopback);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment