diff options
author | Fabio Estevam <fabio.estevam@nxp.com> | 2016-10-21 07:34:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-10-23 17:41:41 -0400 |
commit | 235bde1ed3f0fff0f68f367ec8807b89ea151258 (patch) | |
tree | b6a4b5958de3cd03351164b333a3fe2dcabeef98 | |
parent | b678aa578c9e400429e027269e8de2783e5e73ce (diff) |
net: fec: Call swap_buffer() prior to IP header alignment
Commit 3ac72b7b63d5 ("net: fec: align IP header in hardware") breaks
networking on mx28.
There is an erratum on mx28 (ENGR121613 - ENET big endian mode
not compatible with ARM little endian) that requires an additional
byte-swap operation to workaround this problem.
So call swap_buffer() prior to performing the IP header alignment
to restore network functionality on mx28.
Fixes: 3ac72b7b63d5 ("net: fec: align IP header in hardware")
Reported-and-tested-by: Henri Roosen <henri.roosen@ginzinger.com>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 48a033e64423..5aa9d4ded214 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -1430,14 +1430,14 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) | |||
1430 | skb_put(skb, pkt_len - 4); | 1430 | skb_put(skb, pkt_len - 4); |
1431 | data = skb->data; | 1431 | data = skb->data; |
1432 | 1432 | ||
1433 | if (!is_copybreak && need_swap) | ||
1434 | swap_buffer(data, pkt_len); | ||
1435 | |||
1433 | #if !defined(CONFIG_M5272) | 1436 | #if !defined(CONFIG_M5272) |
1434 | if (fep->quirks & FEC_QUIRK_HAS_RACC) | 1437 | if (fep->quirks & FEC_QUIRK_HAS_RACC) |
1435 | data = skb_pull_inline(skb, 2); | 1438 | data = skb_pull_inline(skb, 2); |
1436 | #endif | 1439 | #endif |
1437 | 1440 | ||
1438 | if (!is_copybreak && need_swap) | ||
1439 | swap_buffer(data, pkt_len); | ||
1440 | |||
1441 | /* Extract the enhanced buffer descriptor */ | 1441 | /* Extract the enhanced buffer descriptor */ |
1442 | ebdp = NULL; | 1442 | ebdp = NULL; |
1443 | if (fep->bufdesc_ex) | 1443 | if (fep->bufdesc_ex) |