aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/sun/sungem.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/net/ethernet/sun/sungem.c b/drivers/net/ethernet/sun/sungem.c
index 7a16d40a72d1..b9221fc1674d 100644
--- a/drivers/net/ethernet/sun/sungem.c
+++ b/drivers/net/ethernet/sun/sungem.c
@@ -60,8 +60,7 @@
60#include <linux/sungem_phy.h> 60#include <linux/sungem_phy.h>
61#include "sungem.h" 61#include "sungem.h"
62 62
63/* Stripping FCS is causing problems, disabled for now */ 63#define STRIP_FCS
64#undef STRIP_FCS
65 64
66#define DEFAULT_MSG (NETIF_MSG_DRV | \ 65#define DEFAULT_MSG (NETIF_MSG_DRV | \
67 NETIF_MSG_PROBE | \ 66 NETIF_MSG_PROBE | \
@@ -435,7 +434,7 @@ static int gem_rxmac_reset(struct gem *gp)
435 writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW); 434 writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
436 writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK); 435 writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
437 val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) | 436 val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
438 ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128); 437 (ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
439 writel(val, gp->regs + RXDMA_CFG); 438 writel(val, gp->regs + RXDMA_CFG);
440 if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN) 439 if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
441 writel(((5 & RXDMA_BLANK_IPKTS) | 440 writel(((5 & RXDMA_BLANK_IPKTS) |
@@ -760,7 +759,6 @@ static int gem_rx(struct gem *gp, int work_to_do)
760 struct net_device *dev = gp->dev; 759 struct net_device *dev = gp->dev;
761 int entry, drops, work_done = 0; 760 int entry, drops, work_done = 0;
762 u32 done; 761 u32 done;
763 __sum16 csum;
764 762
765 if (netif_msg_rx_status(gp)) 763 if (netif_msg_rx_status(gp))
766 printk(KERN_DEBUG "%s: rx interrupt, done: %d, rx_new: %d\n", 764 printk(KERN_DEBUG "%s: rx interrupt, done: %d, rx_new: %d\n",
@@ -855,9 +853,13 @@ static int gem_rx(struct gem *gp, int work_to_do)
855 skb = copy_skb; 853 skb = copy_skb;
856 } 854 }
857 855
858 csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff); 856 if (likely(dev->features & NETIF_F_RXCSUM)) {
859 skb->csum = csum_unfold(csum); 857 __sum16 csum;
860 skb->ip_summed = CHECKSUM_COMPLETE; 858
859 csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
860 skb->csum = csum_unfold(csum);
861 skb->ip_summed = CHECKSUM_COMPLETE;
862 }
861 skb->protocol = eth_type_trans(skb, gp->dev); 863 skb->protocol = eth_type_trans(skb, gp->dev);
862 864
863 napi_gro_receive(&gp->napi, skb); 865 napi_gro_receive(&gp->napi, skb);
@@ -1761,7 +1763,7 @@ static void gem_init_dma(struct gem *gp)
1761 writel(0, gp->regs + TXDMA_KICK); 1763 writel(0, gp->regs + TXDMA_KICK);
1762 1764
1763 val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) | 1765 val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
1764 ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128); 1766 (ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
1765 writel(val, gp->regs + RXDMA_CFG); 1767 writel(val, gp->regs + RXDMA_CFG);
1766 1768
1767 writel(desc_dma >> 32, gp->regs + RXDMA_DBHI); 1769 writel(desc_dma >> 32, gp->regs + RXDMA_DBHI);
@@ -2985,8 +2987,8 @@ static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2985 pci_set_drvdata(pdev, dev); 2987 pci_set_drvdata(pdev, dev);
2986 2988
2987 /* We can do scatter/gather and HW checksum */ 2989 /* We can do scatter/gather and HW checksum */
2988 dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; 2990 dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
2989 dev->features |= dev->hw_features | NETIF_F_RXCSUM; 2991 dev->features = dev->hw_features;
2990 if (pci_using_dac) 2992 if (pci_using_dac)
2991 dev->features |= NETIF_F_HIGHDMA; 2993 dev->features |= NETIF_F_HIGHDMA;
2992 2994