|
@@ -60,8 +60,7 @@
|
|
|
#include <linux/sungem_phy.h>
|
|
|
#include "sungem.h"
|
|
|
|
|
|
-/* Stripping FCS is causing problems, disabled for now */
|
|
|
-#undef STRIP_FCS
|
|
|
+#define STRIP_FCS
|
|
|
|
|
|
#define DEFAULT_MSG (NETIF_MSG_DRV | \
|
|
|
NETIF_MSG_PROBE | \
|
|
@@ -435,7 +434,7 @@ static int gem_rxmac_reset(struct gem *gp)
|
|
|
writel(desc_dma & 0xffffffff, gp->regs + RXDMA_DBLOW);
|
|
|
writel(RX_RING_SIZE - 4, gp->regs + RXDMA_KICK);
|
|
|
val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
|
|
|
- ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
|
|
|
+ (ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
|
|
|
writel(val, gp->regs + RXDMA_CFG);
|
|
|
if (readl(gp->regs + GREG_BIFCFG) & GREG_BIFCFG_M66EN)
|
|
|
writel(((5 & RXDMA_BLANK_IPKTS) |
|
|
@@ -760,7 +759,6 @@ static int gem_rx(struct gem *gp, int work_to_do)
|
|
|
struct net_device *dev = gp->dev;
|
|
|
int entry, drops, work_done = 0;
|
|
|
u32 done;
|
|
|
- __sum16 csum;
|
|
|
|
|
|
if (netif_msg_rx_status(gp))
|
|
|
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)
|
|
|
skb = copy_skb;
|
|
|
}
|
|
|
|
|
|
- csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
|
|
|
- skb->csum = csum_unfold(csum);
|
|
|
- skb->ip_summed = CHECKSUM_COMPLETE;
|
|
|
+ if (likely(dev->features & NETIF_F_RXCSUM)) {
|
|
|
+ __sum16 csum;
|
|
|
+
|
|
|
+ csum = (__force __sum16)htons((status & RXDCTRL_TCPCSUM) ^ 0xffff);
|
|
|
+ skb->csum = csum_unfold(csum);
|
|
|
+ skb->ip_summed = CHECKSUM_COMPLETE;
|
|
|
+ }
|
|
|
skb->protocol = eth_type_trans(skb, gp->dev);
|
|
|
|
|
|
napi_gro_receive(&gp->napi, skb);
|
|
@@ -1761,7 +1763,7 @@ static void gem_init_dma(struct gem *gp)
|
|
|
writel(0, gp->regs + TXDMA_KICK);
|
|
|
|
|
|
val = (RXDMA_CFG_BASE | (RX_OFFSET << 10) |
|
|
|
- ((14 / 2) << 13) | RXDMA_CFG_FTHRESH_128);
|
|
|
+ (ETH_HLEN << 13) | RXDMA_CFG_FTHRESH_128);
|
|
|
writel(val, gp->regs + RXDMA_CFG);
|
|
|
|
|
|
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)
|
|
|
pci_set_drvdata(pdev, dev);
|
|
|
|
|
|
/* We can do scatter/gather and HW checksum */
|
|
|
- dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM;
|
|
|
- dev->features |= dev->hw_features | NETIF_F_RXCSUM;
|
|
|
+ dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
|
|
|
+ dev->features = dev->hw_features;
|
|
|
if (pci_using_dac)
|
|
|
dev->features |= NETIF_F_HIGHDMA;
|
|
|
|