]>
Commit | Line | Data |
---|---|---|
38568109 GKH |
1 | From foo@baz Thu Mar 28 21:54:17 CET 2019 |
2 | From: Jerome Brunet <jbrunet@baylibre.com> | |
3 | Date: Thu, 14 Mar 2019 14:49:45 +0100 | |
4 | Subject: net: phy: meson-gxl: fix interrupt support | |
5 | ||
6 | From: Jerome Brunet <jbrunet@baylibre.com> | |
7 | ||
8 | [ Upstream commit daa5c4d0167a308306525fd5ab9a5e18e21f4f74 ] | |
9 | ||
10 | If an interrupt is already pending when the interrupt is enabled on the | |
11 | GXL phy, no IRQ will ever be triggered. | |
12 | ||
13 | The fix is simply to make sure pending IRQs are cleared before setting | |
14 | up the irq mask. | |
15 | ||
16 | Fixes: cf127ff20af1 ("net: phy: meson-gxl: add interrupt support") | |
17 | Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> | |
18 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
20 | --- | |
21 | drivers/net/phy/meson-gxl.c | 6 ++++++ | |
22 | 1 file changed, 6 insertions(+) | |
23 | ||
24 | --- a/drivers/net/phy/meson-gxl.c | |
25 | +++ b/drivers/net/phy/meson-gxl.c | |
26 | @@ -211,6 +211,7 @@ static int meson_gxl_ack_interrupt(struc | |
27 | static int meson_gxl_config_intr(struct phy_device *phydev) | |
28 | { | |
29 | u16 val; | |
30 | + int ret; | |
31 | ||
32 | if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { | |
33 | val = INTSRC_ANEG_PR | |
34 | @@ -223,6 +224,11 @@ static int meson_gxl_config_intr(struct | |
35 | val = 0; | |
36 | } | |
37 | ||
38 | + /* Ack any pending IRQ */ | |
39 | + ret = meson_gxl_ack_interrupt(phydev); | |
40 | + if (ret) | |
41 | + return ret; | |
42 | + | |
43 | return phy_write(phydev, INTSRC_MASK, val); | |
44 | } | |
45 |