mdiobus_unregister(eth->mii_bus);
 }
 
-static inline void mtk_irq_disable(struct mtk_eth *eth,
-                                  unsigned reg, u32 mask)
+static inline void mtk_tx_irq_disable(struct mtk_eth *eth, u32 mask)
 {
        unsigned long flags;
        u32 val;
 
-       spin_lock_irqsave(ð->irq_lock, flags);
-       val = mtk_r32(eth, reg);
-       mtk_w32(eth, val & ~mask, reg);
-       spin_unlock_irqrestore(ð->irq_lock, flags);
+       spin_lock_irqsave(ð->tx_irq_lock, flags);
+       val = mtk_r32(eth, MTK_QDMA_INT_MASK);
+       mtk_w32(eth, val & ~mask, MTK_QDMA_INT_MASK);
+       spin_unlock_irqrestore(ð->tx_irq_lock, flags);
 }
 
-static inline void mtk_irq_enable(struct mtk_eth *eth,
-                                 unsigned reg, u32 mask)
+static inline void mtk_tx_irq_enable(struct mtk_eth *eth, u32 mask)
 {
        unsigned long flags;
        u32 val;
 
-       spin_lock_irqsave(ð->irq_lock, flags);
-       val = mtk_r32(eth, reg);
-       mtk_w32(eth, val | mask, reg);
-       spin_unlock_irqrestore(ð->irq_lock, flags);
+       spin_lock_irqsave(ð->tx_irq_lock, flags);
+       val = mtk_r32(eth, MTK_QDMA_INT_MASK);
+       mtk_w32(eth, val | mask, MTK_QDMA_INT_MASK);
+       spin_unlock_irqrestore(ð->tx_irq_lock, flags);
+}
+
+static inline void mtk_rx_irq_disable(struct mtk_eth *eth, u32 mask)
+{
+       unsigned long flags;
+       u32 val;
+
+       spin_lock_irqsave(ð->rx_irq_lock, flags);
+       val = mtk_r32(eth, MTK_PDMA_INT_MASK);
+       mtk_w32(eth, val & ~mask, MTK_PDMA_INT_MASK);
+       spin_unlock_irqrestore(ð->rx_irq_lock, flags);
+}
+
+static inline void mtk_rx_irq_enable(struct mtk_eth *eth, u32 mask)
+{
+       unsigned long flags;
+       u32 val;
+
+       spin_lock_irqsave(ð->rx_irq_lock, flags);
+       val = mtk_r32(eth, MTK_PDMA_INT_MASK);
+       mtk_w32(eth, val | mask, MTK_PDMA_INT_MASK);
+       spin_unlock_irqrestore(ð->rx_irq_lock, flags);
 }
 
 static int mtk_set_mac_address(struct net_device *dev, void *p)
                return budget;
 
        napi_complete(napi);
-       mtk_irq_enable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
+       mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
 
        return tx_done;
 }
                goto poll_again;
        }
        napi_complete(napi);
-       mtk_irq_enable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+       mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
 
        return rx_done + budget - remain_budget;
 }
 
        if (likely(napi_schedule_prep(ð->rx_napi))) {
                __napi_schedule(ð->rx_napi);
-               mtk_irq_disable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+               mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
        }
 
        return IRQ_HANDLED;
 
        if (likely(napi_schedule_prep(ð->tx_napi))) {
                __napi_schedule(ð->tx_napi);
-               mtk_irq_disable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
+               mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
        }
 
        return IRQ_HANDLED;
        struct mtk_mac *mac = netdev_priv(dev);
        struct mtk_eth *eth = mac->hw;
 
-       mtk_irq_disable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
-       mtk_irq_disable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+       mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
+       mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
        mtk_handle_irq_rx(eth->irq[2], dev);
-       mtk_irq_enable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
-       mtk_irq_enable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+       mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
+       mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
 }
 #endif
 
 
                napi_enable(ð->tx_napi);
                napi_enable(ð->rx_napi);
-               mtk_irq_enable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
-               mtk_irq_enable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+               mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
+               mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
        }
        atomic_inc(ð->dma_refcnt);
 
        if (!atomic_dec_and_test(ð->dma_refcnt))
                return 0;
 
-       mtk_irq_disable(eth, MTK_QDMA_INT_MASK, MTK_TX_DONE_INT);
-       mtk_irq_disable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);
+       mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
+       mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
        napi_disable(ð->tx_napi);
        napi_disable(ð->rx_napi);
 
 
        /* disable delay and normal interrupt */
        mtk_w32(eth, 0, MTK_QDMA_DELAY_INT);
-       mtk_irq_disable(eth, MTK_QDMA_INT_MASK, ~0);
-       mtk_irq_disable(eth, MTK_PDMA_INT_MASK, ~0);
+       mtk_tx_irq_disable(eth, ~0);
+       mtk_rx_irq_disable(eth, ~0);
        mtk_w32(eth, RST_GL_PSE, MTK_RST_GL);
        mtk_w32(eth, 0, MTK_RST_GL);
 
        phy_disconnect(dev->phydev);
        if (of_phy_is_fixed_link(mac->of_node))
                of_phy_deregister_fixed_link(mac->of_node);
-       mtk_irq_disable(eth, MTK_QDMA_INT_MASK, ~0);
-       mtk_irq_disable(eth, MTK_PDMA_INT_MASK, ~0);
+       mtk_tx_irq_disable(eth, ~0);
+       mtk_rx_irq_disable(eth, ~0);
 }
 
 static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                return PTR_ERR(eth->base);
 
        spin_lock_init(ð->page_lock);
-       spin_lock_init(ð->irq_lock);
+       spin_lock_init(ð->tx_irq_lock);
+       spin_lock_init(ð->rx_irq_lock);
 
        eth->ethsys = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
                                                      "mediatek,ethsys");