X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Framips%2Ffiles-4.14%2Fdrivers%2Fnet%2Fethernet%2Fmediatek%2Fmtk_eth_soc.c;h=3541b1124000d1d65bfe5fdb9fc464bffe5a1c1d;hb=7ac454014a11347887323a131415ac7032d53546;hp=b2c3d32c5549b6fd8ea4c76dc224b9b4b41130d8;hpb=f5afa593e7cead980350fb82f6853d880c493872;p=openwrt%2Fstaging%2Fzorun.git diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c index b2c3d32c55..3541b11240 100644 --- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -876,6 +876,8 @@ 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 @@ -968,9 +970,6 @@ release_desc: done++; } - if (done < budget) - fe_reg_w32(rx_intr, FE_REG_FE_INT_STATUS); - return done; } @@ -986,6 +985,8 @@ 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); @@ -1009,9 +1010,7 @@ 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) - fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS); - else + if (idx != hwidx) *tx_again = 1; } else { *tx_again = 1;