]> err.no Git - linux-2.6/blobdiff - drivers/net/bfin_mac.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-2.6] / drivers / net / bfin_mac.c
index f2368b71a7203b8ba2a4380b5f7639c28ba5f78c..717dcc1aa1e97acb8bfddf2e44e97cc51cb8a8f7 100644 (file)
@@ -408,7 +408,7 @@ static int mii_probe(struct net_device *dev)
        mdc_div = ((sclk / MDC_CLK) / 2) - 1;
 
        sysctl = bfin_read_EMAC_SYSCTL();
-       sysctl |= SET_MDCDIV(mdc_div);
+       sysctl = (sysctl & ~MDCDIV) | SET_MDCDIV(mdc_div);
        bfin_write_EMAC_SYSCTL(sysctl);
 
        /* search for connect PHY device */
@@ -575,7 +575,6 @@ adjust_head:
 static int bf537mac_hard_start_xmit(struct sk_buff *skb,
                                struct net_device *dev)
 {
-       struct bf537mac_local *lp = netdev_priv(dev);
        unsigned int data;
 
        current_tx_ptr->skb = skb;
@@ -634,7 +633,6 @@ out:
 static void bf537mac_rx(struct net_device *dev)
 {
        struct sk_buff *skb, *new_skb;
-       struct bf537mac_local *lp = netdev_priv(dev);
        unsigned short len;
 
        /* allocate a new skb for next time receive */
@@ -651,6 +649,12 @@ static void bf537mac_rx(struct net_device *dev)
        current_rx_ptr->skb = new_skb;
        current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2;
 
+       /* Invidate the data cache of skb->data range when it is write back
+        * cache. It will prevent overwritting the new data from DMA
+        */
+       blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
+                                        (unsigned long)new_skb->end);
+
        len = (unsigned short)((current_rx_ptr->status.status_word) & RX_FRLEN);
        skb_put(skb, len);
        blackfin_dcache_invalidate_range((unsigned long)skb->head,
@@ -965,7 +969,7 @@ static int __init bf537mac_probe(struct net_device *dev)
        lp->mii_bus.write = mdiobus_write;
        lp->mii_bus.reset = mdiobus_reset;
        lp->mii_bus.name = "bfin_mac_mdio";
-       lp->mii_bus.id = 0;
+       snprintf(lp->mii_bus.id, MII_BUS_ID_SIZE, "0");
        lp->mii_bus.irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
        for (i = 0; i < PHY_MAX_ADDR; ++i)
                lp->mii_bus.irq[i] = PHY_POLL;