summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ezchip/nps_enet.c
diff options
context:
space:
mode:
authorNoam Camus2015-08-20 07:00:01 +0200
committerDavid S. Miller2015-08-24 01:08:53 +0200
commit0dd20f3ce04e75521bd3f9867ecbc852ab348912 (patch)
tree231fc9ce3ad2d7ee351a4c047aac1e04165bdd34 /drivers/net/ethernet/ezchip/nps_enet.c
parentMerge branch 'gro_tunnels' (diff)
downloadkernel-qcow2-linux-0dd20f3ce04e75521bd3f9867ecbc852ab348912.tar.gz
kernel-qcow2-linux-0dd20f3ce04e75521bd3f9867ecbc852ab348912.tar.xz
kernel-qcow2-linux-0dd20f3ce04e75521bd3f9867ecbc852ab348912.zip
NET: nps_enet: replace use of cause register
When interrupt is received we read directly from control register for RX/TX instead of reading cause register since this register fails to indicate TX done when TX interrupt is "edge mode". Signed-off-by: Noam Camus <noamc@ezchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ezchip/nps_enet.c')
-rw-r--r--drivers/net/ethernet/ezchip/nps_enet.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/ethernet/ezchip/nps_enet.c b/drivers/net/ethernet/ezchip/nps_enet.c
index 24a85b292007..0e652b4fee8d 100644
--- a/drivers/net/ethernet/ezchip/nps_enet.c
+++ b/drivers/net/ethernet/ezchip/nps_enet.c
@@ -211,12 +211,13 @@ static irqreturn_t nps_enet_irq_handler(s32 irq, void *dev_instance)
{
struct net_device *ndev = dev_instance;
struct nps_enet_priv *priv = netdev_priv(ndev);
- struct nps_enet_buf_int_cause buf_int_cause;
+ struct nps_enet_rx_ctl rx_ctrl;
+ struct nps_enet_tx_ctl tx_ctrl;
- buf_int_cause.value =
- nps_enet_reg_get(priv, NPS_ENET_REG_BUF_INT_CAUSE);
+ rx_ctrl.value = nps_enet_reg_get(priv, NPS_ENET_REG_RX_CTL);
+ tx_ctrl.value = nps_enet_reg_get(priv, NPS_ENET_REG_TX_CTL);
- if (buf_int_cause.tx_done || buf_int_cause.rx_rdy)
+ if ((!tx_ctrl.ct && priv->tx_packet_sent) || rx_ctrl.cr)
if (likely(napi_schedule_prep(&priv->napi))) {
nps_enet_reg_set(priv, NPS_ENET_REG_BUF_INT_ENABLE, 0);
__napi_schedule(&priv->napi);