Merge branch 'systemport-net'

Florian Fainelli says:

====================
net: systemport: RX path and suspend fixes

These two patches fix a race condition where we have our RX interrupts
enabled, but not NAPI for the RX path, and the second patch fixes an
issue for packets stuck in RX fifo during a suspend/resume cycle.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2014-10-28 17:08:56 -04:00
commit 9ffa1fcaef

View File

@ -1397,6 +1397,9 @@ static void bcm_sysport_netif_start(struct net_device *dev)
/* Enable NAPI */ /* Enable NAPI */
napi_enable(&priv->napi); napi_enable(&priv->napi);
/* Enable RX interrupt and TX ring full interrupt */
intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
phy_start(priv->phydev); phy_start(priv->phydev);
/* Enable TX interrupts for the 32 TXQs */ /* Enable TX interrupts for the 32 TXQs */
@ -1499,9 +1502,6 @@ static int bcm_sysport_open(struct net_device *dev)
if (ret) if (ret)
goto out_free_rx_ring; goto out_free_rx_ring;
/* Enable RX interrupt and TX ring full interrupt */
intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
/* Turn on TDMA */ /* Turn on TDMA */
ret = tdma_enable_set(priv, 1); ret = tdma_enable_set(priv, 1);
if (ret) if (ret)
@ -1858,6 +1858,8 @@ static int bcm_sysport_resume(struct device *d)
if (!netif_running(dev)) if (!netif_running(dev))
return 0; return 0;
umac_reset(priv);
/* We may have been suspended and never received a WOL event that /* We may have been suspended and never received a WOL event that
* would turn off MPD detection, take care of that now * would turn off MPD detection, take care of that now
*/ */
@ -1885,9 +1887,6 @@ static int bcm_sysport_resume(struct device *d)
netif_device_attach(dev); netif_device_attach(dev);
/* Enable RX interrupt and TX ring full interrupt */
intrl2_0_mask_clear(priv, INTRL2_0_RDMA_MBDONE | INTRL2_0_TX_RING_FULL);
/* RX pipe enable */ /* RX pipe enable */
topctrl_writel(priv, 0, RX_FLUSH_CNTL); topctrl_writel(priv, 0, RX_FLUSH_CNTL);