]> err.no Git - linux-2.6/blobdiff - drivers/net/pasemi_mac.c
pasemi_mac: don't enable rx before there are buffers on the ring
[linux-2.6] / drivers / net / pasemi_mac.c
index daba11062d3bd9eab410d91af3f51b4e1d7b3b25..643fce860e5c802917fb139dbbc6c1ca767dca4e 100644 (file)
@@ -552,7 +552,7 @@ static int pasemi_mac_clean_tx(struct pasemi_mac *mac)
        struct pas_dma_xct_descr *dp;
        unsigned int start, count, limit;
        unsigned int total_count;
-       int flags;
+       unsigned long flags;
        struct sk_buff *skbs[32];
        dma_addr_t dmas[32];
 
@@ -786,14 +786,6 @@ static int pasemi_mac_open(struct net_device *dev)
 
        write_mac_reg(mac, PAS_MAC_CFG_TXP, flags);
 
-       flags = PAS_MAC_CFG_PCFG_S1 | PAS_MAC_CFG_PCFG_PE |
-               PAS_MAC_CFG_PCFG_PR | PAS_MAC_CFG_PCFG_CE;
-
-       if (mac->type == MAC_TYPE_GMAC)
-               flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G;
-       else
-               flags |= PAS_MAC_CFG_PCFG_TSR_10G | PAS_MAC_CFG_PCFG_SPD_10G;
-
        write_iob_reg(mac, PAS_IOB_DMA_RXCH_CFG(mac->dma_rxch),
                           PAS_IOB_DMA_RXCH_CFG_CNTTH(0));
 
@@ -808,8 +800,6 @@ static int pasemi_mac_open(struct net_device *dev)
        write_iob_reg(mac, PAS_IOB_DMA_COM_TIMEOUTCFG,
                           PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0xffffff));
 
-       write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags);
-
        ret = pasemi_mac_setup_rx_resources(dev);
        if (ret)
                goto out_rx_resources;
@@ -837,6 +827,17 @@ static int pasemi_mac_open(struct net_device *dev)
 
        pasemi_mac_replenish_rx_ring(dev);
 
+       flags = PAS_MAC_CFG_PCFG_S1 | PAS_MAC_CFG_PCFG_PE |
+               PAS_MAC_CFG_PCFG_PR | PAS_MAC_CFG_PCFG_CE;
+
+       if (mac->type == MAC_TYPE_GMAC)
+               flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G;
+       else
+               flags |= PAS_MAC_CFG_PCFG_TSR_10G | PAS_MAC_CFG_PCFG_SPD_10G;
+
+       /* Enable interface in MAC */
+       write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags);
+
        ret = pasemi_mac_phy_init(dev);
        /* Some configs don't have PHYs (XAUI etc), so don't complain about
         * failed init due to -ENODEV.
@@ -973,7 +974,7 @@ static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
        struct pas_dma_xct_descr *dp;
        u64 dflags, mactx, ptr;
        dma_addr_t map;
-       int flags;
+       unsigned long flags;
 
        dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_SS | XCT_MACTX_CRC_PAD;