|
|
@@ -298,7 +298,7 @@ static int arc_emac_poll(struct napi_struct *napi, int budget)
|
|
|
work_done = arc_emac_rx(ndev, budget);
|
|
|
if (work_done < budget) {
|
|
|
napi_complete(napi);
|
|
|
- arc_reg_or(priv, R_ENABLE, RXINT_MASK);
|
|
|
+ arc_reg_or(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
|
|
|
}
|
|
|
|
|
|
return work_done;
|
|
|
@@ -327,9 +327,9 @@ static irqreturn_t arc_emac_intr(int irq, void *dev_instance)
|
|
|
/* Reset all flags except "MDIO complete" */
|
|
|
arc_reg_set(priv, R_STATUS, status);
|
|
|
|
|
|
- if (status & RXINT_MASK) {
|
|
|
+ if (status & (RXINT_MASK | TXINT_MASK)) {
|
|
|
if (likely(napi_schedule_prep(&priv->napi))) {
|
|
|
- arc_reg_clr(priv, R_ENABLE, RXINT_MASK);
|
|
|
+ arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK);
|
|
|
__napi_schedule(&priv->napi);
|
|
|
}
|
|
|
}
|
|
|
@@ -440,7 +440,7 @@ static int arc_emac_open(struct net_device *ndev)
|
|
|
arc_reg_set(priv, R_TX_RING, (unsigned int)priv->txbd_dma);
|
|
|
|
|
|
/* Enable interrupts */
|
|
|
- arc_reg_set(priv, R_ENABLE, RXINT_MASK | ERR_MASK);
|
|
|
+ arc_reg_set(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
|
|
|
|
|
|
/* Set CONTROL */
|
|
|
arc_reg_set(priv, R_CTRL,
|
|
|
@@ -511,7 +511,7 @@ static int arc_emac_stop(struct net_device *ndev)
|
|
|
netif_stop_queue(ndev);
|
|
|
|
|
|
/* Disable interrupts */
|
|
|
- arc_reg_clr(priv, R_ENABLE, RXINT_MASK | ERR_MASK);
|
|
|
+ arc_reg_clr(priv, R_ENABLE, RXINT_MASK | TXINT_MASK | ERR_MASK);
|
|
|
|
|
|
/* Disable EMAC */
|
|
|
arc_reg_clr(priv, R_CTRL, EN_MASK);
|