| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Jingju Hou <Jingju.Hou@synaptics.com> |
| Date: Mon, 23 Apr 2018 15:22:49 +0800 |
| Subject: net: phy: marvell: clear wol event before setting it |
| |
| From: Jingju Hou <Jingju.Hou@synaptics.com> |
| |
| [ Upstream commit b6a930fa88083b41d26ddf1cab95cbd740936c22 ] |
| |
| If WOL event happened once, the LED[2] interrupt pin will not be |
| cleared unless we read the CSISR register. If interrupts are in use, |
| the normal interrupt handling will clear the WOL event. Let's clear the |
| WOL event before enabling it if !phy_interrupt_is_valid(). |
| |
| Signed-off-by: Jingju Hou <Jingju.Hou@synaptics.com> |
| Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/phy/marvell.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/net/phy/marvell.c |
| +++ b/drivers/net/phy/marvell.c |
| @@ -1377,6 +1377,15 @@ static int m88e1318_set_wol(struct phy_d |
| if (err < 0) |
| goto error; |
| |
| + /* If WOL event happened once, the LED[2] interrupt pin |
| + * will not be cleared unless we reading the interrupt status |
| + * register. If interrupts are in use, the normal interrupt |
| + * handling will clear the WOL event. Clear the WOL event |
| + * before enabling it if !phy_interrupt_is_valid() |
| + */ |
| + if (!phy_interrupt_is_valid(phydev)) |
| + phy_read(phydev, MII_M1011_IEVENT); |
| + |
| /* Enable the WOL interrupt */ |
| err = __phy_modify(phydev, MII_88E1318S_PHY_CSIER, 0, |
| MII_88E1318S_PHY_CSIER_WOL_EIE); |