ramips: change ethernet napi interrupt sequence
authorFelix Fietkau <nbd@openwrt.org>
Fri, 5 Jun 2015 08:59:48 +0000 (08:59 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 5 Jun 2015 08:59:48 +0000 (08:59 +0000)
when open device. first ready napi software rx.
then enable hardware interrupt.
final start software tx queue to send data.

Signed-off-by: michael lee <igvtee@gmail.com>
SVN-Revision: 45894

target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c

index 60c3c9124689c23187a093e7a9fb5d433b6610f7..bef715b40c53409499d87f05d46c0fc4e495d4d8 100644 (file)
@@ -1153,7 +1153,6 @@ static int fe_open(struct net_device *dev)
                goto err_out;
 
        spin_lock_irqsave(&priv->page_lock, flags);
                goto err_out;
 
        spin_lock_irqsave(&priv->page_lock, flags);
-       napi_enable(&priv->rx_napi);
 
        val = FE_TX_WB_DDONE | FE_RX_DMA_EN | FE_TX_DMA_EN;
        if (priv->flags & FE_FLAG_RX_2B_OFFSET)
 
        val = FE_TX_WB_DDONE | FE_RX_DMA_EN | FE_TX_DMA_EN;
        if (priv->flags & FE_FLAG_RX_2B_OFFSET)
@@ -1169,8 +1168,9 @@ static int fe_open(struct net_device *dev)
        if (priv->soc->has_carrier && priv->soc->has_carrier(priv))
                netif_carrier_on(dev);
 
        if (priv->soc->has_carrier && priv->soc->has_carrier(priv))
                netif_carrier_on(dev);
 
-       netif_start_queue(dev);
+       napi_enable(&priv->rx_napi);
        fe_int_enable(priv->soc->tx_int | priv->soc->rx_int);
        fe_int_enable(priv->soc->tx_int | priv->soc->rx_int);
+       netif_start_queue(dev);
 
        return 0;
 
 
        return 0;
 
@@ -1185,15 +1185,14 @@ static int fe_stop(struct net_device *dev)
        unsigned long flags;
        int i;
 
        unsigned long flags;
        int i;
 
-       fe_int_disable(priv->soc->tx_int | priv->soc->rx_int);
-
        netif_tx_disable(dev);
        netif_tx_disable(dev);
+       fe_int_disable(priv->soc->tx_int | priv->soc->rx_int);
+       napi_disable(&priv->rx_napi);
 
        if (priv->phy)
                priv->phy->stop(priv);
 
        spin_lock_irqsave(&priv->page_lock, flags);
 
        if (priv->phy)
                priv->phy->stop(priv);
 
        spin_lock_irqsave(&priv->page_lock, flags);
-       napi_disable(&priv->rx_napi);
 
        fe_reg_w32(fe_reg_r32(FE_REG_PDMA_GLO_CFG) &
                     ~(FE_TX_WB_DDONE | FE_RX_DMA_EN | FE_TX_DMA_EN),
 
        fe_reg_w32(fe_reg_r32(FE_REG_PDMA_GLO_CFG) &
                     ~(FE_TX_WB_DDONE | FE_RX_DMA_EN | FE_TX_DMA_EN),