| From foo@baz Wed 18 Dec 2019 01:33:13 PM CET |
| From: Grygorii Strashko <grygorii.strashko@ti.com> |
| Date: Fri, 6 Dec 2019 14:28:20 +0200 |
| Subject: net: ethernet: ti: cpsw: fix extra rx interrupt |
| |
| From: Grygorii Strashko <grygorii.strashko@ti.com> |
| |
| [ Upstream commit 51302f77bedab8768b761ed1899c08f89af9e4e2 ] |
| |
| Now RX interrupt is triggered twice every time, because in |
| cpsw_rx_interrupt() it is asked first and then disabled. So there will be |
| pending interrupt always, when RX interrupt is enabled again in NAPI |
| handler. |
| |
| Fix it by first disabling IRQ and then do ask. |
| |
| Fixes: 870915feabdc ("drivers: net: cpsw: remove disable_irq/enable_irq as irq can be masked from cpsw itself") |
| Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/ti/cpsw.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/ti/cpsw.c |
| +++ b/drivers/net/ethernet/ti/cpsw.c |
| @@ -777,8 +777,8 @@ static irqreturn_t cpsw_rx_interrupt(int |
| { |
| struct cpsw_priv *priv = dev_id; |
| |
| - cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX); |
| writel(0, &priv->wr_regs->rx_en); |
| + cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_RX); |
| |
| if (priv->quirk_irq) { |
| disable_irq_nosync(priv->irqs_table[0]); |