if (!(flags & (RXWBFLAG_TCPON | RXWBFLAG_UDPON | RXWBFLAG_IPV4)))
return false;
+ /* Hardware Workaround , packet is IPv6 but checksum fail */
+ if (flags & RXWBFLAG_IPV6) {
+
+ printk("this is IPV6 packet : len=%d ", skb->len);
+ if ((flags & RXWBFLAG_TCPON) && (!(flags & RXWBFLAG_TCPCS)))
+ return false;
+ if ((flags & RXWBFLAG_UDPON) && (!(flags & RXWBFLAG_UDPCS)))
+ return false;
+ }
+
if (unlikely((flags & (RXWBFLAG_MF | RXWBFLAG_TCPON | RXWBFLAG_TCPCS))
== RXWBFLAG_TCPON)) {
if (flags & RXWBFLAG_IPV4)
#else
skb_checksum_none_assert(skb);
#endif
-
+ printk("flag=%04x , skb->ip_summed =%d \n",le16_to_cpu(rxdesc->descwb.flags), skb->ip_summed);
+
if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) {
if (jme->vlgrp) {
jme->jme_vlan_rx(skb, jme->vlgrp,
jme_mdio_write(jme->dev, jme->mii_if.phy_id, MII_BMCR, bmcr);
if (new_phy_power_ctrl(jme->chip_main_rev))
- jme_new_phy_off(jme);
+ jme_new_phy_off(jme);
}
static int
p32 += 0x100 >> 2;
mmapio_memcpy(jme, p32, JME_MISC, JME_MISC_LEN);
+ printk("===jread32=%x===\n",jread32(jme, JME_EXGP2));
+
p32 += 0x100 >> 2;
mmapio_memcpy(jme, p32, JME_RSS, JME_RSS_LEN);
struct net_device *netdev;
struct jme_adapter *jme;
u16 bmcr, bmsr;
- u32 apmc;
+ u32 apmc, phy_gp2;
/*
* set up PCI device basics
}
jme_load_macaddr(netdev);
+ phy_gp2 = jread32(jme, JME_EXGP2)|FIX_IPV6_CHECKSUM;
+ jwrite32(jme, JME_EXGP2,phy_gp2);
+ wmb();
+ printk("==%x=====\n", jread32(jme, JME_EXGP2));
+
/*
* Tell stack that we are not ready to work until open()
*/