summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorNimrod Andy <B38611@freescale.com>2014-06-12 00:16:19 (GMT)
committerDavid S. Miller <davem@davemloft.net>2014-06-12 18:01:57 (GMT)
commit96c50caa5148e0e0a077672574785700885c6764 (patch)
tree0fee259417371589404fa1732072f0df82e9753e /drivers/net
parent61a4427b955f79dfaa735788511ce558962c9d70 (diff)
downloadlinux-96c50caa5148e0e0a077672574785700885c6764.tar.xz
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>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c3
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 ee8e547..55b55d2 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -314,6 +314,7 @@ fec_enet_clear_csum(struct sk_buff *skb, struct net_device *ndev)
if (unlikely(skb_cow_head(skb, 0)))
return -1;
+ ip_hdr(skb)->check = 0;
*(__sum16 *)(skb->head + skb->csum_start + skb->csum_offset) = 0;
return 0;
@@ -395,7 +396,7 @@ static int txq_submit_skb(struct sk_buff *skb, struct net_device *ndev)
* are done by the kernel
*/
if (skb->ip_summed == CHECKSUM_PARTIAL)
- ebdp->cbd_esc |= BD_ENET_TX_PINS;
+ ebdp->cbd_esc |= BD_ENET_TX_PINS | BD_ENET_TX_IINS;
}
}