aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pasemi_mac.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2007-09-26 17:24:42 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:53:43 -0400
commit36033766533176d61ba15793d8ef219775499c2f (patch)
treeebaebab67a5ff51388b92ca24723b1e324730ebb /drivers/net/pasemi_mac.c
parentca7e235f5eb960d83b45cef4384b490672538cd9 (diff)
pasemi_mac: don't enable rx before there are buffers on the ring
pasemi_mac: don't enable rx before there are buffers on the ring Reorder initialization of the DMA channels and the interface. Before there was a time window when the interface was enabled before DMA was enabled. Also, now there will always be RX buffers available at the time the MAC interface is enabled, to avoid temporary out-of-buffer errors for the very first packets (on busy networks). Signed-off-by: Olof Johansson <olof@lixom.net> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/pasemi_mac.c')
-rw-r--r--drivers/net/pasemi_mac.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/pasemi_mac.c b/drivers/net/pasemi_mac.c
index 8892b658655c..643fce860e5c 100644
--- a/drivers/net/pasemi_mac.c
+++ b/drivers/net/pasemi_mac.c
@@ -786,14 +786,6 @@ static int pasemi_mac_open(struct net_device *dev)
786 786
787 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags); 787 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags);
788 788
789 flags = PAS_MAC_CFG_PCFG_S1 | PAS_MAC_CFG_PCFG_PE |
790 PAS_MAC_CFG_PCFG_PR | PAS_MAC_CFG_PCFG_CE;
791
792 if (mac->type == MAC_TYPE_GMAC)
793 flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G;
794 else
795 flags |= PAS_MAC_CFG_PCFG_TSR_10G | PAS_MAC_CFG_PCFG_SPD_10G;
796
797 write_iob_reg(mac, PAS_IOB_DMA_RXCH_CFG(mac->dma_rxch), 789 write_iob_reg(mac, PAS_IOB_DMA_RXCH_CFG(mac->dma_rxch),
798 PAS_IOB_DMA_RXCH_CFG_CNTTH(0)); 790 PAS_IOB_DMA_RXCH_CFG_CNTTH(0));
799 791
@@ -808,8 +800,6 @@ static int pasemi_mac_open(struct net_device *dev)
808 write_iob_reg(mac, PAS_IOB_DMA_COM_TIMEOUTCFG, 800 write_iob_reg(mac, PAS_IOB_DMA_COM_TIMEOUTCFG,
809 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0xffffff)); 801 PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0xffffff));
810 802
811 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags);
812
813 ret = pasemi_mac_setup_rx_resources(dev); 803 ret = pasemi_mac_setup_rx_resources(dev);
814 if (ret) 804 if (ret)
815 goto out_rx_resources; 805 goto out_rx_resources;
@@ -837,6 +827,17 @@ static int pasemi_mac_open(struct net_device *dev)
837 827
838 pasemi_mac_replenish_rx_ring(dev); 828 pasemi_mac_replenish_rx_ring(dev);
839 829
830 flags = PAS_MAC_CFG_PCFG_S1 | PAS_MAC_CFG_PCFG_PE |
831 PAS_MAC_CFG_PCFG_PR | PAS_MAC_CFG_PCFG_CE;
832
833 if (mac->type == MAC_TYPE_GMAC)
834 flags |= PAS_MAC_CFG_PCFG_TSR_1G | PAS_MAC_CFG_PCFG_SPD_1G;
835 else
836 flags |= PAS_MAC_CFG_PCFG_TSR_10G | PAS_MAC_CFG_PCFG_SPD_10G;
837
838 /* Enable interface in MAC */
839 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags);
840
840 ret = pasemi_mac_phy_init(dev); 841 ret = pasemi_mac_phy_init(dev);
841 /* Some configs don't have PHYs (XAUI etc), so don't complain about 842 /* Some configs don't have PHYs (XAUI etc), so don't complain about
842 * failed init due to -ENODEV. 843 * failed init due to -ENODEV.