diff options
author | Fugang Duan <b38611@freescale.com> | 2014-06-05 03:23:07 -0400 |
---|---|---|
committer | Fugang Duan <b38611@freescale.com> | 2014-06-13 02:00:42 -0400 |
commit | f9f9dd934002f5637f7d2c6120004092a3841fc2 (patch) | |
tree | 5801b5c4f19a7699fb6c0b60d54878d029807341 | |
parent | f976fe5dfbc3d9985d3425c7307ade3e2bb1e6b1 (diff) |
net: fec: Enable IP header hardware checksum
IP header checksum is calcalated by network layer in default.
To support software TSO, it is better to use HW calculate the
IP header checksum.
FEC hw checksum feature request the checksum field in frame
is zero, otherwise the calculative CRC is not correct.
For segmentated TCP packet, HW calculate the IP header checksum again,
it doesn't bring any impact. For SW TSO, HW calculated checksum bring
better performance.
Signed-off-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 67ea0034f4aa..591913dde10a 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -315,6 +315,7 @@ fec_enet_clear_csum(struct sk_buff *skb, struct net_device *ndev) | |||
315 | if (unlikely(skb_cow_head(skb, 0))) | 315 | if (unlikely(skb_cow_head(skb, 0))) |
316 | return -1; | 316 | return -1; |
317 | 317 | ||
318 | ip_hdr(skb)->check = 0; | ||
318 | *(__sum16 *)(skb->head + skb->csum_start + skb->csum_offset) = 0; | 319 | *(__sum16 *)(skb->head + skb->csum_start + skb->csum_offset) = 0; |
319 | 320 | ||
320 | return 0; | 321 | return 0; |
@@ -402,7 +403,7 @@ static int fec_enet_txq_submit_skb(struct fec_enet_priv_tx_q *txq, | |||
402 | * are done by the kernel | 403 | * are done by the kernel |
403 | */ | 404 | */ |
404 | if (skb->ip_summed == CHECKSUM_PARTIAL) | 405 | if (skb->ip_summed == CHECKSUM_PARTIAL) |
405 | status_esc |= BD_ENET_TX_PINS; | 406 | status_esc |= BD_ENET_TX_PINS | BD_ENET_TX_IINS; |
406 | } | 407 | } |
407 | 408 | ||
408 | if (id_entry->driver_data & FEC_QUIRK_HAS_AVB) | 409 | if (id_entry->driver_data & FEC_QUIRK_HAS_AVB) |