Skip to content

Commit 384649e

Browse files
committed
Merge branch 'WoL-fixes-for-DP83822-and-DP83tc811'
Dan Murphy says: ==================== WoL fixes for DP83822 and DP83tc811 The WoL feature for each device was enabled during boot or when the PHY was brought up which may be undesired. These patches disable the WoL in the config_init. The disabling and enabling of the WoL is now done though the set_wol call. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 8f34e53 + 6c59904 commit 384649e

File tree

2 files changed

+26
-25
lines changed

2 files changed

+26
-25
lines changed

drivers/net/phy/dp83822.c

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,18 @@ static int dp83822_set_wol(struct phy_device *phydev,
137137
value &= ~DP83822_WOL_SECURE_ON;
138138
}
139139

140-
value |= (DP83822_WOL_EN | DP83822_WOL_INDICATION_SEL |
141-
DP83822_WOL_CLR_INDICATION);
142-
phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
143-
value);
140+
/* Clear any pending WoL interrupt */
141+
phy_read(phydev, MII_DP83822_MISR2);
142+
143+
value |= DP83822_WOL_EN | DP83822_WOL_INDICATION_SEL |
144+
DP83822_WOL_CLR_INDICATION;
145+
146+
return phy_write_mmd(phydev, DP83822_DEVADDR,
147+
MII_DP83822_WOL_CFG, value);
144148
} else {
145-
value = phy_read_mmd(phydev, DP83822_DEVADDR,
146-
MII_DP83822_WOL_CFG);
147-
value &= ~DP83822_WOL_EN;
148-
phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
149-
value);
149+
return phy_clear_bits_mmd(phydev, DP83822_DEVADDR,
150+
MII_DP83822_WOL_CFG, DP83822_WOL_EN);
150151
}
151-
152-
return 0;
153152
}
154153

155154
static void dp83822_get_wol(struct phy_device *phydev,
@@ -258,12 +257,11 @@ static int dp83822_config_intr(struct phy_device *phydev)
258257

259258
static int dp83822_config_init(struct phy_device *phydev)
260259
{
261-
int value;
262-
263-
value = DP83822_WOL_MAGIC_EN | DP83822_WOL_SECURE_ON | DP83822_WOL_EN;
260+
int value = DP83822_WOL_EN | DP83822_WOL_MAGIC_EN |
261+
DP83822_WOL_SECURE_ON;
264262

265-
return phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
266-
value);
263+
return phy_clear_bits_mmd(phydev, DP83822_DEVADDR,
264+
MII_DP83822_WOL_CFG, value);
267265
}
268266

269267
static int dp83822_phy_reset(struct phy_device *phydev)

drivers/net/phy/dp83tc811.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,19 @@ static int dp83811_set_wol(struct phy_device *phydev,
139139
value &= ~DP83811_WOL_SECURE_ON;
140140
}
141141

142-
value |= (DP83811_WOL_EN | DP83811_WOL_INDICATION_SEL |
143-
DP83811_WOL_CLR_INDICATION);
144-
phy_write_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG,
145-
value);
142+
/* Clear any pending WoL interrupt */
143+
phy_read(phydev, MII_DP83811_INT_STAT1);
144+
145+
value |= DP83811_WOL_EN | DP83811_WOL_INDICATION_SEL |
146+
DP83811_WOL_CLR_INDICATION;
147+
148+
return phy_write_mmd(phydev, DP83811_DEVADDR,
149+
MII_DP83811_WOL_CFG, value);
146150
} else {
147-
phy_clear_bits_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG,
148-
DP83811_WOL_EN);
151+
return phy_clear_bits_mmd(phydev, DP83811_DEVADDR,
152+
MII_DP83811_WOL_CFG, DP83811_WOL_EN);
149153
}
150154

151-
return 0;
152155
}
153156

154157
static void dp83811_get_wol(struct phy_device *phydev,
@@ -292,8 +295,8 @@ static int dp83811_config_init(struct phy_device *phydev)
292295

293296
value = DP83811_WOL_MAGIC_EN | DP83811_WOL_SECURE_ON | DP83811_WOL_EN;
294297

295-
return phy_write_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG,
296-
value);
298+
return phy_clear_bits_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG,
299+
value);
297300
}
298301

299302
static int dp83811_phy_reset(struct phy_device *phydev)

0 commit comments

Comments
 (0)