[][MAC80211][hnat][Fix ETH bring up issue for the mt7622]

[Description]
Fix ETH bring up issue for the mt7622.

The mtk_probe() function cannot request an interrupt because some
legacy platforms do not have individual PDMA interrupts.
Therefore, we add an MTK_PDMA_INT flag to bypass requesting the PDMA
interrupt in this case.

Without this patch, the ETH cannot be brought up on the MT7622.

[Release-log]
N/A


Change-Id: Ib88e7744b004dfadf6738ab20a3d012157d9c34d
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8187283
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3003-add-wed.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3003-add-wed.patch
index ae4e9c1..09502e9 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3003-add-wed.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3003-add-wed.patch
@@ -206,8 +206,8 @@
 +		mtk_wed_add_hw(np, eth, wdma, i);
 +	}
 +
- 	for (i = 0; i < MTK_PDMA_IRQ_NUM; i++)
- 		eth->irq_pdma[i] = platform_get_irq(pdev, i);
+ 	if (MTK_HAS_CAPS(eth->soc->caps, MTK_PDMA_INT)) {
+ 		for (i = 0; i < MTK_PDMA_IRQ_NUM; i++)
  
 @@ -5170,10 +5200,11 @@ static int mtk_probe(struct platform_device *pdev)
  	}
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index c679247..6cf9fc5 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -3898,7 +3898,12 @@
 	/* FE int grouping */
 	mtk_w32(eth, MTK_TX_DONE_INT, reg_map->qdma.int_grp);
 	mtk_w32(eth, MTK_RX_DONE_INT(0), reg_map->qdma.int_grp2);
-	mtk_w32(eth, 0x210FFFF2, MTK_FE_INT_GRP);
+	if (MTK_HAS_CAPS(eth->soc->caps, MTK_PDMA_INT))
+		mtk_w32(eth, 0x210FFFF2, MTK_FE_INT_GRP);
+	else {
+		mtk_w32(eth, MTK_RX_DONE_INT(0), reg_map->pdma.int_grp);
+		mtk_w32(eth, 0x210F2FF3, MTK_FE_INT_GRP);
+	}
 	mtk_w32(eth, MTK_FE_INT_TSO_FAIL |
 		MTK_FE_INT_TSO_ILLEGAL | MTK_FE_INT_TSO_ALIGN |
 		MTK_FE_INT_RFIFO_OV | MTK_FE_INT_RFIFO_UF, MTK_FE_INT_ENABLE);
@@ -5035,15 +5040,19 @@
 		}
 	}
 
-	for (i = 0; i < MTK_PDMA_IRQ_NUM; i++)
-		eth->irq_pdma[i] = platform_get_irq(pdev, i);
+	if (MTK_HAS_CAPS(eth->soc->caps, MTK_PDMA_INT)) {
+		for (i = 0; i < MTK_PDMA_IRQ_NUM; i++)
+			eth->irq_pdma[i] = platform_get_irq(pdev, i);
+	}
 
 	for (i = 0; i < MTK_FE_IRQ_NUM; i++) {
 		if (MTK_HAS_CAPS(eth->soc->caps, MTK_SHARED_INT) && i > 0)
 			eth->irq_fe[i] = eth->irq_fe[0];
-		else
+		else if (MTK_HAS_CAPS(eth->soc->caps, MTK_PDMA_INT))
 			eth->irq_fe[i] =
 				platform_get_irq(pdev, i + MTK_PDMA_IRQ_NUM);
+		else
+			eth->irq_fe[i] = platform_get_irq(pdev, i);
 
 		if (eth->irq_fe[i] < 0) {
 			dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
@@ -5125,39 +5134,55 @@
 		if (err)
 			goto err_free_dev;
 
-		err = devm_request_irq(eth->dev, eth->irq_fe[2],
-				       mtk_handle_fe_irq, 0,
-				       dev_name(eth->dev), eth);
-		if (err)
-			goto err_free_dev;
+		if (MTK_HAS_CAPS(eth->soc->caps, MTK_PDMA_INT)) {
+			err = devm_request_irq(eth->dev, eth->irq_fe[2],
+					       mtk_handle_fe_irq, 0,
+					       dev_name(eth->dev), eth);
+			if (err)
+				goto err_free_dev;
 
-		err = devm_request_irq(eth->dev, eth->irq_pdma[0],
-				       mtk_handle_irq_rx, IRQF_SHARED,
-				       dev_name(eth->dev), &eth->rx_napi[0]);
-		if (err)
-			goto err_free_dev;
+			err = devm_request_irq(eth->dev, eth->irq_pdma[0],
+					       mtk_handle_irq_rx, IRQF_SHARED,
+					       dev_name(eth->dev), &eth->rx_napi[0]);
+			if (err)
+				goto err_free_dev;
 
-		if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSS)) {
-			for (i = 0; i < MTK_RX_RSS_NUM; i++) {
-				err = devm_request_irq(eth->dev,
-						       eth->irq_pdma[MTK_RSS_RING(i)],
-						       mtk_handle_irq_rx, IRQF_SHARED,
-						       dev_name(eth->dev),
-						       &eth->rx_napi[MTK_RSS_RING(i)]);
-				if (err)
-					goto err_free_dev;
+			if (MTK_HAS_CAPS(eth->soc->caps, MTK_RSS)) {
+				for (i = 0; i < MTK_RX_RSS_NUM; i++) {
+					err = devm_request_irq(eth->dev,
+							       eth->irq_pdma[MTK_RSS_RING(i)],
+							       mtk_handle_irq_rx, IRQF_SHARED,
+							       dev_name(eth->dev),
+							       &eth->rx_napi[MTK_RSS_RING(i)]);
+					if (err)
+						goto err_free_dev;
+				}
 			}
-		}
+
+			if (MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO)) {
+				i = (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_RX_V2) ||
+				     MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) ? 0 : 1;
+				for (; i < MTK_HW_LRO_RING_NUM; i++) {
+					err = devm_request_irq(eth->dev,
+							       eth->irq_pdma[i],
+							       mtk_handle_irq_rx, IRQF_SHARED,
+							       dev_name(eth->dev),
+							       &eth->rx_napi[MTK_HW_LRO_RING(i)]);
+					if (err)
+						goto err_free_dev;
+				}
+			}
+		} else {
+			err = devm_request_irq(eth->dev, eth->irq_fe[2],
+					       mtk_handle_irq_rx, 0,
+					       dev_name(eth->dev), &eth->rx_napi[0]);
+			if (err)
+				goto err_free_dev;
 
-		if (MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO)) {
-			i = (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_RX_V2) ||
-			     MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V3)) ? 0 : 1;
-			for (; i < MTK_HW_LRO_RING_NUM; i++) {
-				err = devm_request_irq(eth->dev,
-						       eth->irq_pdma[i],
-						       mtk_handle_irq_rx, IRQF_SHARED,
-						       dev_name(eth->dev),
-						       &eth->rx_napi[MTK_HW_LRO_RING(i)]);
+			if (MTK_FE_IRQ_NUM > 3) {
+				err = devm_request_irq(eth->dev, eth->irq_fe[3],
+						       mtk_handle_fe_irq, 0,
+						       dev_name(eth->dev), eth);
 				if (err)
 					goto err_free_dev;
 			}
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 0e658b0..7811de7 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -92,7 +92,11 @@
 #define MTK_FE_INT_RFIFO_UF	BIT(19)
 #define MTK_GDM1_AF		BIT(28)
 #define MTK_GDM2_AF		BIT(29)
+#if defined(CONFIG_MEDIATEK_NETSYS_V2) || defined(CONFIG_MEDIATEK_NETSYS_V3)
 #define MTK_FE_IRQ_NUM		(4)
+#else
+#define MTK_FE_IRQ_NUM		(3)
+#endif
 #define MTK_PDMA_IRQ_NUM	(4)
 #define MTK_MAX_IRQ_NUM		(MTK_FE_IRQ_NUM + MTK_PDMA_IRQ_NUM)
 
@@ -1396,6 +1400,7 @@
 	MTK_HWLRO_BIT,
 	MTK_RSS_BIT,
 	MTK_SHARED_INT_BIT,
+	MTK_PDMA_INT_BIT,
 	MTK_TRGMII_MT7621_CLK_BIT,
 	MTK_QDMA_BIT,
 	MTK_NETSYS_V1_BIT,
@@ -1447,6 +1452,7 @@
 #define MTK_HWLRO		BIT_ULL(MTK_HWLRO_BIT)
 #define MTK_RSS			BIT_ULL(MTK_RSS_BIT)
 #define MTK_SHARED_INT		BIT_ULL(MTK_SHARED_INT_BIT)
+#define MTK_PDMA_INT		BIT_ULL(MTK_PDMA_INT_BIT)
 #define MTK_TRGMII_MT7621_CLK	BIT_ULL(MTK_TRGMII_MT7621_CLK_BIT)
 #define MTK_QDMA		BIT_ULL(MTK_QDMA_BIT)
 #define MTK_NETSYS_V1		BIT_ULL(MTK_NETSYS_V1_BIT)
@@ -1556,17 +1562,17 @@
 		      MTK_MUX_U3_GMAC2_TO_QPHY | MTK_NETSYS_V1 | \
 		      MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
 
-#define MT7986_CAPS   (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
+#define MT7986_CAPS   (MTK_PDMA_INT | MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
                        MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
-			MTK_NETSYS_V2 | MTK_RSS)
+		       MTK_NETSYS_V2 | MTK_RSS)
 
-#define MT7981_CAPS   (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
-			MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
-			MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
-			MTK_NETSYS_V2 | MTK_RSS)
+#define MT7981_CAPS   (MTK_PDMA_INT | MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
+		       MTK_GMAC2_GEPHY | MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
+		       MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
+		       MTK_NETSYS_V2 | MTK_RSS)
 
 #define MT7988_CAPS   (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC3_SGMII | \
-		       MTK_MUX_GMAC123_TO_GEPHY_SGMII | MTK_QDMA | \
+		       MTK_PDMA_INT | MTK_MUX_GMAC123_TO_GEPHY_SGMII | MTK_QDMA | \
 		       MTK_NETSYS_V3 | MTK_RSTCTRL_PPE1 | MTK_RSTCTRL_PPE2 | \
 		       MTK_GMAC1_USXGMII | MTK_GMAC2_USXGMII | \
 		       MTK_GMAC3_USXGMII | MTK_MUX_GMAC123_TO_USXGMII | \