Index: /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.c =================================================================== --- /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.c (revision 12402) +++ /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.c (revision 12403) @@ -171,6 +171,6 @@ unsigned char *buf; - if (unlikely(!priv)) - goto error; + if (unlikely(!priv)) + goto error; if (!priv->vlan) @@ -182,7 +182,8 @@ } - buf = skb_push(skb, 2); - buf[0] = 0x10; - buf[1] = 0x80; + + skb_push(skb, 2); + skb->data[0] = 0x10; + skb->data[1] = 0x80; send: @@ -219,5 +220,5 @@ /* check for vlan header presence */ - if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00)) + if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00)) // always present goto recv; @@ -232,5 +233,5 @@ buf[14 + 2] &= 0xf0; - buf[14 + 2] |= vlan >> 8; + buf[14 + 2] |= vlan >> 8; //quatsch buf[15 + 2] = vlan & 0xff; @@ -489,4 +490,14 @@ /* XXX: undocumented magic from atheros, required! */ priv->write(priv, 0x38, 0xc000050e); + priv->write(priv,0x60, 0xffffffff); + priv->write(priv,0x64, 0xaaaaaaaa); + priv->write(priv,0x68, 0x55555555); + priv->write(priv,0x6c, 0x0); + priv->write(priv,0x70, 0x41af); + + /* set mtu */ + ar8216_rmw(priv, AR8216_REG_GLOBAL_CTRL,AR8216_GCTRL_MTU,1716 ); // 1500 + 4 /* vlan */ + 2 /* header */); + + return ar8216_hw_apply(dev); } Index: /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.h =================================================================== --- /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.h (revision 12398) +++ /src/linux/ar531x/linux-2.6.23/drivers/net/phy/ar8216.h (revision 12403) @@ -27,4 +27,7 @@ #define AR8216_REG_CTRL 0x0000 #define AR8216_CTRL_RESET BIT(31) + +#define AR8216_REG_GLOBAL_CTRL 0x0030 +#define AR8216_GCTRL_MTU BITS(0, 10) #define AR8216_REG_VTU 0x0040