| From foo@baz Thu Sep 14 23:20:08 PDT 2017 |
| From: Claudiu Manoil <claudiu.manoil@nxp.com> |
| Date: Mon, 4 Sep 2017 10:45:28 +0300 |
| Subject: gianfar: Fix Tx flow control deactivation |
| |
| From: Claudiu Manoil <claudiu.manoil@nxp.com> |
| |
| |
| [ Upstream commit 5d621672bc1a1e5090c1ac5432a18c79e0e13e03 ] |
| |
| The wrong register is checked for the Tx flow control bit, |
| it should have been maccfg1 not maccfg2. |
| This went unnoticed for so long probably because the impact is |
| hardly visible, not to mention the tangled code from adjust_link(). |
| First, link flow control (i.e. handling of Rx/Tx link level pause frames) |
| is disabled by default (needs to be enabled via 'ethtool -A'). |
| Secondly, maccfg2 always returns 0 for tx_flow_oldval (except for a few |
| old boards), which results in Tx flow control remaining always on |
| once activated. |
| |
| Fixes: 45b679c9a3ccd9e34f28e6ec677b812a860eb8eb ("gianfar: Implement PAUSE frame generation support") |
| Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/freescale/gianfar.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/freescale/gianfar.c |
| +++ b/drivers/net/ethernet/freescale/gianfar.c |
| @@ -3690,7 +3690,7 @@ static noinline void gfar_update_link_st |
| u32 tempval1 = gfar_read(®s->maccfg1); |
| u32 tempval = gfar_read(®s->maccfg2); |
| u32 ecntrl = gfar_read(®s->ecntrl); |
| - u32 tx_flow_oldval = (tempval & MACCFG1_TX_FLOW); |
| + u32 tx_flow_oldval = (tempval1 & MACCFG1_TX_FLOW); |
| |
| if (phydev->duplex != priv->oldduplex) { |
| if (!(phydev->duplex)) |