Skip to content

Commit

Permalink
mv643xx_eth: fix receive checksumming
Browse files Browse the repository at this point in the history
We have to explicitly tell the hardware to include the pseudo-header
when doing receive checksumming, otherwise hardware checksumming will
fail for every received packet and we'll end up setting CHECKSUM_NONE
on every received packet.

While we're at it, when skb->ip_summed is set to CHECKSUM_UNNECESSARY
on received packets, skb->csum is supposed to be undefined, and thus
there is no need to set it.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
  • Loading branch information
Lennert Buytenhek authored and Lennert Buytenhek committed Sep 19, 2008
1 parent 457b1d5 commit 170e710
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions drivers/net/mv643xx_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -546,11 +546,8 @@ static int rxq_process(struct rx_queue *rxq, int budget)
*/
skb_put(skb, byte_cnt - 2 - 4);

if (cmd_sts & LAYER_4_CHECKSUM_OK) {
if (cmd_sts & LAYER_4_CHECKSUM_OK)
skb->ip_summed = CHECKSUM_UNNECESSARY;
skb->csum = htons(
(cmd_sts & 0x0007fff8) >> 3);
}
skb->protocol = eth_type_trans(skb, mp->dev);
netif_receive_skb(skb);
}
Expand Down Expand Up @@ -1994,9 +1991,10 @@ static void port_start(struct mv643xx_eth_private *mp)

/*
* Receive all unmatched unicast, TCP, UDP, BPDU and broadcast
* frames to RX queue #0.
* frames to RX queue #0, and include the pseudo-header when
* calculating receive checksums.
*/
wrl(mp, PORT_CONFIG(mp->port_num), 0x00000000);
wrl(mp, PORT_CONFIG(mp->port_num), 0x02000000);

/*
* Treat BPDUs as normal multicasts, and disable partition mode.
Expand Down

0 comments on commit 170e710

Please sign in to comment.