ralink: fix hw status almost full not work on mt7620 and mt7621
[openwrt.git] / target / linux / ramips / files / drivers / net / ethernet / ralink / ralink_soc_eth.c
index 14a950a..3a8475a 100644 (file)
@@ -923,26 +923,33 @@ static int fe_poll(struct napi_struct *napi, int budget)
        struct fe_priv *priv = container_of(napi, struct fe_priv, rx_napi);
        struct fe_hw_stats *hwstat = priv->hw_stats;
        int tx_done, rx_done;
-       u32 status, mask;
-       u32 tx_intr, rx_intr;
+       u32 status, fe_status, status_reg, mask;
+       u32 tx_intr, rx_intr, status_intr;
 
-       status = fe_reg_r32(FE_REG_FE_INT_STATUS);
+       fe_status = status = fe_reg_r32(FE_REG_FE_INT_STATUS);
        tx_intr = priv->soc->tx_int;
        rx_intr = priv->soc->rx_int;
+       status_intr = priv->soc->status_int;
        tx_done = rx_done = 0;
 
+       if (fe_reg_table[FE_REG_FE_INT_STATUS2]) {
+               fe_status = fe_reg_r32(FE_REG_FE_INT_STATUS2);
+               status_reg = FE_REG_FE_INT_STATUS2;
+       } else
+               status_reg = FE_REG_FE_INT_STATUS;
+
        if (status & tx_intr)
                tx_done = fe_poll_tx(priv, budget, tx_intr);
 
        if (status & rx_intr)
                rx_done = fe_poll_rx(napi, budget, priv, rx_intr);
 
-       if (unlikely(hwstat && (status & FE_CNT_GDM_AF))) {
-               if (spin_trylock(&hwstat->stats_lock)) {
+       if (unlikely(fe_status & status_intr)) {
+               if (hwstat && spin_trylock(&hwstat->stats_lock)) {
                        fe_stats_update(priv);
                        spin_unlock(&hwstat->stats_lock);
                }
-               fe_reg_w32(FE_CNT_GDM_AF, FE_REG_FE_INT_STATUS);
+               fe_reg_w32(status_intr, status_reg);
        }
 
        if (unlikely(netif_msg_intr(priv))) {