Revert "ramips: ethernet: fix to interrupt handling"
authorJo-Philipp Wich <jo@mein.io>
Fri, 18 Sep 2020 06:53:31 +0000 (08:53 +0200)
committerJo-Philipp Wich <jo@mein.io>
Fri, 18 Sep 2020 06:53:53 +0000 (08:53 +0200)
This reverts commit 7ac454014a11347887323a131415ac7032d53546.

The change reportedly causes regressions in ethernet performance.

Fixes: FS#3332
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c

index 3541b1124000d1d65bfe5fdb9fc464bffe5a1c1d..b2c3d32c5549b6fd8ea4c76dc224b9b4b41130d8 100644 (file)
@@ -876,8 +876,6 @@ static int fe_poll_rx(struct napi_struct *napi, int budget,
        struct fe_rx_dma *rxd, trxd;
        int done = 0, pad;
 
-       fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS);
-
        if (netdev->features & NETIF_F_RXCSUM)
                checksum_bit = soc->checksum_bit;
        else
@@ -970,6 +968,9 @@ release_desc:
                done++;
        }
 
+       if (done < budget)
+               fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS);
+
        return done;
 }
 
@@ -985,8 +986,6 @@ static int fe_poll_tx(struct fe_priv *priv, int budget, u32 tx_intr,
        u32 idx, hwidx;
        struct fe_tx_ring *ring = &priv->tx_ring;
 
-       fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
-
        idx = ring->tx_free_idx;
        hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
 
@@ -1010,7 +1009,9 @@ static int fe_poll_tx(struct fe_priv *priv, int budget, u32 tx_intr,
        if (idx == hwidx) {
                /* read hw index again make sure no new tx packet */
                hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
-               if (idx != hwidx)
+               if (idx == hwidx)
+                       fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
+               else
                        *tx_again = 1;
        } else {
                *tx_again = 1;