[][MAC80211][hnat][Fix issue of multiple PPEs unbind for ETH in mt7981/7986]

[Description]
Fix issue of multiple PPEs unbind for ETH in mt7981/7986.

Without this patch, the traffic from eth1 to eth0 cannot be bind when
multiple PPEs are enabled.

[Release-log]
N/A


Change-Id: If71f1f7dc1bc220af9a3d2ad96e2bad93a3a2877
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8814903
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3004-ethernet-update-ppe-from-netsys1-to-netsys2.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3004-ethernet-update-ppe-from-netsys1-to-netsys2.patch
index 37666e6..9f22f37 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3004-ethernet-update-ppe-from-netsys1-to-netsys2.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3004-ethernet-update-ppe-from-netsys1-to-netsys2.patch
@@ -1,51 +1,50 @@
-From 3a07dcf1a402223c3d96eed88f9dcb8eac0a9362 Mon Sep 17 00:00:00 2001
-From: Sujuan Chen <sujuan.chen@mediatek.com>
-Date: Mon, 18 Sep 2023 10:58:32 +0800
+From 07a3ac0ae724c4df67316e01b03432d8ee9f4229 Mon Sep 17 00:00:00 2001
+From: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
+Date: Mon, 18 Mar 2024 17:56:01 +0800
 Subject: [PATCH 04/24] ethernet update ppe from netsys1 to netsys2
 
 ---
- drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 14 ++++-
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 19 ++++---
  drivers/net/ethernet/mediatek/mtk_eth_soc.h   |  7 ++-
  drivers/net/ethernet/mediatek/mtk_ppe.c       | 29 +++++++++--
  drivers/net/ethernet/mediatek/mtk_ppe.h       | 51 +++++++++++++++++++
  .../net/ethernet/mediatek/mtk_ppe_offload.c   |  8 +++
  drivers/net/ethernet/mediatek/mtk_ppe_regs.h  | 10 ++++
- 6 files changed, 113 insertions(+), 6 deletions(-)
+ 6 files changed, 112 insertions(+), 12 deletions(-)
 
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-index 8d15399..45dc85f 100644
+index ffaa515..9262227 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2447,16 +2447,27 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
+@@ -2447,16 +2447,20 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
  			skb_checksum_none_assert(skb);
  		skb->protocol = eth_type_trans(skb, netdev);
  
--		hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
 +#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2)
-+			hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2;
-+#else
-+			hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
-+#endif
- 		if (hash != MTK_RXD4_FOE_ENTRY) {
- 			hash = jhash_1word(hash, 0);
- 			skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
- 		}
- 
-+#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2)
++		hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2;
 +		reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON_V2, trxd.rxd5);
-+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
-+			mtk_ppe_check_skb(eth->ppe, skb,
-+					  trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2);
++		if (hash != MTK_RXD5_FOE_ENTRY_V2)
++			skb_set_hash(skb, jhash_1word(hash, 0), PKT_HASH_TYPE_L4);
 +#else
+ 		hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
+-		if (hash != MTK_RXD4_FOE_ENTRY) {
+-			hash = jhash_1word(hash, 0);
+-			skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
+-		}
+-
  		reason = FIELD_GET(MTK_RXD4_PPE_CPU_REASON, trxd.rxd4);
- 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
- 			mtk_ppe_check_skb(eth->ppe, skb,
- 					  trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
++		if (hash != MTK_RXD4_FOE_ENTRY)
++			skb_set_hash(skb, jhash_1word(hash, 0), PKT_HASH_TYPE_L4);
 +#endif
++
+ 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
+-			mtk_ppe_check_skb(eth->ppe, skb,
+-					  trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
++			mtk_ppe_check_skb(eth->ppe, skb, hash);
  
  		if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
  			if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_RX_V2)) {
-@@ -5953,6 +5964,7 @@ static const struct mtk_soc_data mt7986_data = {
+@@ -5957,6 +5961,7 @@ static const struct mtk_soc_data mt7986_data = {
  	.required_clks = MT7986_CLKS_BITMAP,
  	.required_pctl = false,
  	.has_sram = false,
@@ -54,7 +53,7 @@
  	.txrx = {
  		.txd_size = sizeof(struct mtk_tx_dma_v2),
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-index 00cfe3b..69eb112 100644
+index 41daeb2..910baaf 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 @@ -137,7 +137,7 @@
@@ -66,7 +65,7 @@
  #define MTK_GDMA_DROP_ALL	0x7777
  
  /* GDM Egress Control Register */
-@@ -674,6 +674,11 @@
+@@ -680,6 +680,11 @@
  #define MTK_RXD4_SRC_PORT	GENMASK(21, 19)
  #define MTK_RXD4_ALG		GENMASK(31, 22)
  
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3005-flow-offload-add-mkhnat-dual-ppe-new-v2.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3005-flow-offload-add-mkhnat-dual-ppe-new-v2.patch
index 458379d..5ff363b 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3005-flow-offload-add-mkhnat-dual-ppe-new-v2.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3005-flow-offload-add-mkhnat-dual-ppe-new-v2.patch
@@ -1,18 +1,18 @@
-From d35e908b342bce34e01c29a07328a4a245d5d79d Mon Sep 17 00:00:00 2001
+From 01556d88ad11f0d096d2816b2a69999994e1740f Mon Sep 17 00:00:00 2001
 From: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
-Date: Tue, 26 Dec 2023 16:31:34 +0800
+Date: Mon, 18 Mar 2024 16:26:28 +0800
 Subject: [PATCH 05/24] flow-offload-add-mkhnat-dual-ppe-new-v2
 
 ---
  arch/arm64/boot/dts/mediatek/mt7986a.dtsi     |  1 +
- drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 58 ++++++++++++++-----
- drivers/net/ethernet/mediatek/mtk_eth_soc.h   | 14 ++++-
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 50 ++++++++++++++-----
+ drivers/net/ethernet/mediatek/mtk_eth_soc.h   | 14 ++++--
  drivers/net/ethernet/mediatek/mtk_ppe.c       |  5 +-
  drivers/net/ethernet/mediatek/mtk_ppe.h       |  7 ++-
- .../net/ethernet/mediatek/mtk_ppe_debugfs.c   | 27 ++++++---
- .../net/ethernet/mediatek/mtk_ppe_offload.c   | 48 +++++++++++----
+ .../net/ethernet/mediatek/mtk_ppe_debugfs.c   | 27 +++++++---
+ .../net/ethernet/mediatek/mtk_ppe_offload.c   | 48 ++++++++++++++----
  include/linux/netdevice.h                     |  4 ++
- 8 files changed, 124 insertions(+), 40 deletions(-)
+ 8 files changed, 119 insertions(+), 37 deletions(-)
  mode change 100644 => 100755 drivers/net/ethernet/mediatek/mtk_ppe_offload.c
 
 diff --git a/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/arch/arm64/boot/dts/mediatek/mt7986a.dtsi
@@ -28,31 +28,19 @@
                  #address-cells = <1>;
                  #size-cells = <0>;
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-index 45dc85f..07209f0 100644
+index 2fb67e0..7eeddb3 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2459,14 +2459,16 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
- 
- #if defined(CONFIG_MEDIATEK_NETSYS_RX_V2)
- 		reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON_V2, trxd.rxd5);
--		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
--			mtk_ppe_check_skb(eth->ppe, skb,
-+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) {
-+			mtk_ppe_check_skb(eth->ppe[0], skb,
- 					  trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2);
-+		}
- #else
- 		reason = FIELD_GET(MTK_RXD4_PPE_CPU_REASON, trxd.rxd4);
--		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
--			mtk_ppe_check_skb(eth->ppe, skb,
-+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) {
-+			mtk_ppe_check_skb(eth->ppe[0], skb,
- 					  trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
-+		}
+@@ -2464,7 +2464,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
  #endif
  
+ 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
+-			mtk_ppe_check_skb(eth->ppe, skb, hash);
++			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
+ 
  		if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
-@@ -4111,8 +4113,12 @@ static int mtk_open(struct net_device *dev)
+ 			if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_RX_V2)) {
+@@ -4112,8 +4112,12 @@ static int mtk_open(struct net_device *dev)
  		regmap_write(eth->sgmii->pcs[id].regmap,
  			     SGMSYS_QPHY_PWR_STATE_CTRL, 0);
  
@@ -67,7 +55,7 @@
  
  	mtk_gdm_config(eth, mac->id, gdm_config);
  
-@@ -4201,8 +4207,10 @@ static int mtk_stop(struct net_device *dev)
+@@ -4202,8 +4206,10 @@ static int mtk_stop(struct net_device *dev)
  
  	mtk_dma_free(eth);
  
@@ -80,7 +68,7 @@
  
  	return 0;
  }
-@@ -5761,15 +5769,35 @@ static int mtk_probe(struct platform_device *pdev)
+@@ -5762,15 +5768,35 @@ static int mtk_probe(struct platform_device *pdev)
  	}
  
  	if (eth->soc->offload_version) {
@@ -124,7 +112,7 @@
  
  	for (i = 0; i < MTK_MAX_DEVS; i++) {
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-index 69eb112..a00583f 100644
+index 910baaf..3995608 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 @@ -137,7 +137,12 @@
@@ -141,7 +129,7 @@
  #define MTK_GDMA_DROP_ALL	0x7777
  
  /* GDM Egress Control Register */
-@@ -1932,7 +1937,8 @@ struct mtk_eth {
+@@ -1936,7 +1941,8 @@ struct mtk_eth {
  	spinlock_t			syscfg0_lock;
  	struct timer_list		mtk_dma_monitor_timer;
  
@@ -151,7 +139,7 @@
  	struct rhashtable		flow_table;
  };
  
-@@ -2015,9 +2021,11 @@ int mtk_toprgu_init(struct mtk_eth *eth, struct device_node *r);
+@@ -2019,9 +2025,11 @@ int mtk_toprgu_init(struct mtk_eth *eth, struct device_node *r);
  int mtk_dump_usxgmii(struct regmap *pmap, char *name, u32 offset, u32 range);
  void mtk_usxgmii_link_poll(struct work_struct *work);
  
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3015-ethernet-update-ppe-from-netsys2-to-netsys3.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3015-ethernet-update-ppe-from-netsys2-to-netsys3.patch
index c44e494..b6c0d41 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3015-ethernet-update-ppe-from-netsys2-to-netsys3.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3015-ethernet-update-ppe-from-netsys2-to-netsys3.patch
@@ -1,44 +1,31 @@
-From a326344938c515068241eb66580f57255258d9c6 Mon Sep 17 00:00:00 2001
+From aaac91720ca1fd7679896286eac2b014e7150fca Mon Sep 17 00:00:00 2001
 From: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
-Date: Tue, 21 Nov 2023 16:42:01 +0800
+Date: Mon, 18 Mar 2024 16:35:07 +0800
 Subject: [PATCH 15/24] ethernet-update-ppe-from-netsys2-to-netsys3
 
 ---
- drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 14 ++++---
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c   |  8 +++-
  drivers/net/ethernet/mediatek/mtk_eth_soc.h   |  7 ++--
  drivers/net/ethernet/mediatek/mtk_ppe.c       | 35 ++++++++++++++---
  drivers/net/ethernet/mediatek/mtk_ppe.h       | 38 ++++++++++++++++---
  .../net/ethernet/mediatek/mtk_ppe_offload.c   |  6 ++-
  drivers/net/ethernet/mediatek/mtk_ppe_regs.h  |  7 ++++
- 6 files changed, 85 insertions(+), 22 deletions(-)
+ 6 files changed, 82 insertions(+), 19 deletions(-)
 
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-index 1660fd9..a3ed175 100644
+index 952bf51..f477ff3 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2447,17 +2447,17 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
+@@ -2447,7 +2447,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
  			skb_checksum_none_assert(skb);
  		skb->protocol = eth_type_trans(skb, netdev);
  
 -#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2)
--			hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2;
 +#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2) || defined(CONFIG_MEDIATEK_NETSYS_V3)
-+		hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2;
- #else
--			hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
-+		hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
- #endif
- 		if (hash != MTK_RXD4_FOE_ENTRY) {
- 			hash = jhash_1word(hash, 0);
- 			skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
- 		}
- 
--#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2)
-+#if defined(CONFIG_MEDIATEK_NETSYS_RX_V2) || defined(CONFIG_MEDIATEK_NETSYS_V3)
+ 		hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2;
  		reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON_V2, trxd.rxd5);
- 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) {
- 			mtk_ppe_check_skb(eth->ppe[0], skb,
-@@ -5799,7 +5799,8 @@ static int mtk_probe(struct platform_device *pdev)
+ 		if (hash != MTK_RXD5_FOE_ENTRY_V2) {
+@@ -5798,7 +5798,8 @@ static int mtk_probe(struct platform_device *pdev)
  
  		for (i = 0; i < eth->ppe_num; i++) {
  			eth->ppe[i] = mtk_ppe_init(eth,
@@ -48,7 +35,7 @@
  						   2, eth->soc->hash_way, i,
  						   eth->soc->has_accounting);
  			if (!eth->ppe[i]) {
-@@ -6066,6 +6067,9 @@ static const struct mtk_soc_data mt7988_data = {
+@@ -6065,6 +6066,9 @@ static const struct mtk_soc_data mt7988_data = {
  	.required_clks = MT7988_CLKS_BITMAP,
  	.required_pctl = false,
  	.has_sram = true,
@@ -59,7 +46,7 @@
  	.txrx = {
  		.txd_size = sizeof(struct mtk_tx_dma_v2),
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-index 02ca0b2..f9dda59 100644
+index 58547af..9c46ac1 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 @@ -137,9 +137,10 @@
@@ -74,7 +61,7 @@
  #else
  #define MTK_GDMA_TO_PPE0	0x4444
  #endif
-@@ -2014,14 +2015,14 @@ extern u32 dbg_show_level;
+@@ -2018,14 +2019,14 @@ extern u32 dbg_show_level;
  
  static inline void mtk_set_ib1_sp(struct mtk_eth *eth, struct mtk_foe_entry *foe, u32 val)
  {
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3022-mediatek-ethernet-add-multiple-ppe-allocati.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3022-mediatek-ethernet-add-multiple-ppe-allocati.patch
index 15d51b9..c96eaa8 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3022-mediatek-ethernet-add-multiple-ppe-allocati.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/999-3022-mediatek-ethernet-add-multiple-ppe-allocati.patch
@@ -1,21 +1,21 @@
-From d73ee12c93d4146b3585fc5d93271b1fbafcd3c4 Mon Sep 17 00:00:00 2001
+From e917fdd9042787edd43e4070c3480baf0dfb8d33 Mon Sep 17 00:00:00 2001
 From: Bo-Cun Chen <bc-bocun.chen@mediatek.com>
-Date: Tue, 26 Dec 2023 16:46:16 +0800
+Date: Mon, 18 Mar 2024 16:57:13 +0800
 Subject: [PATCH 22/24] 
  999-3022-mediatek-ethernet-add-multiple-ppe-allocatiion.patch
 
 ---
  arch/arm64/boot/dts/mediatek/mt7988.dtsi      |  1 +
- drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 19 +++++++++++++++++--
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c   | 22 ++++++++++++++++---
  drivers/net/ethernet/mediatek/mtk_eth_soc.h   |  3 +++
- .../net/ethernet/mediatek/mtk_ppe_offload.c   | 10 ++++++++++
- 4 files changed, 31 insertions(+), 2 deletions(-)
+ .../net/ethernet/mediatek/mtk_ppe_offload.c   | 10 +++++++++
+ 4 files changed, 33 insertions(+), 3 deletions(-)
 
 diff --git a/arch/arm64/boot/dts/mediatek/mt7988.dtsi b/arch/arm64/boot/dts/mediatek/mt7988.dtsi
-index 3368240..ff1619d 100644
+index 4a1a446..57b27f8 100644
 --- a/arch/arm64/boot/dts/mediatek/mt7988.dtsi
 +++ b/arch/arm64/boot/dts/mediatek/mt7988.dtsi
-@@ -945,6 +945,7 @@
+@@ -942,6 +942,7 @@
  		mediatek,infracfg = <&topmisc>;
  		mediatek,toprgu = <&watchdog>;
  		mediatek,hwver = <&hwver>;
@@ -24,7 +24,7 @@
  		#address-cells = <1>;
  		#size-cells = <0>;
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-index a3ed175..a761d95 100644
+index 291afdc..c0f4ade 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 @@ -2349,6 +2349,7 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
@@ -35,17 +35,20 @@
  
  	if (unlikely(!ring))
  		goto rx_done;
-@@ -2460,7 +2461,8 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
- #if defined(CONFIG_MEDIATEK_NETSYS_RX_V2) || defined(CONFIG_MEDIATEK_NETSYS_V3)
- 		reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON_V2, trxd.rxd5);
- 		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) {
--			mtk_ppe_check_skb(eth->ppe[0], skb,
-+			i = eth->mac[mac]->ppe_idx;
-+			mtk_ppe_check_skb(eth->ppe[i], skb,
- 					  trxd.rxd5 & MTK_RXD5_FOE_ENTRY_V2);
+@@ -2463,8 +2464,10 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
  		}
- #else
-@@ -4114,7 +4116,19 @@ static int mtk_open(struct net_device *dev)
+ #endif
+ 
+-		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
+-			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
++		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) {
++			i = eth->mac[mac]->ppe_idx;
++			mtk_ppe_check_skb(eth->ppe[i], skb, hash);
++		}
+ 
+ 		if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
+ 			if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_RX_V2)) {
+@@ -4113,7 +4116,19 @@ static int mtk_open(struct net_device *dev)
  			     SGMSYS_QPHY_PWR_STATE_CTRL, 0);
  
  	if (eth->soc->offload_version) {
@@ -66,7 +69,7 @@
  
  			for (i = 0; i < eth->ppe_num; i++)
  				mtk_ppe_start(eth->ppe[i]);
-@@ -5130,6 +5144,7 @@ static const struct net_device_ops mtk_netdev_ops = {
+@@ -5129,6 +5144,7 @@ static const struct net_device_ops mtk_netdev_ops = {
  	.ndo_poll_controller	= mtk_poll_controller,
  #endif
  	.ndo_setup_tc		= mtk_eth_setup_tc,
@@ -75,10 +78,10 @@
  
  static void mux_poll(struct work_struct *work)
 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-index 88d2f46..711a8e9 100644
+index 8454361..d958aec 100644
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -1973,6 +1973,7 @@ struct mtk_mac {
+@@ -1978,6 +1978,7 @@ struct mtk_mac {
  	phy_interface_t			interface;
  	unsigned int			mode;
  	unsigned int			type;
@@ -86,7 +89,7 @@
  	int				speed;
  	struct device_node		*of_node;
  	struct phylink			*phylink;
-@@ -2074,6 +2075,8 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
+@@ -2079,6 +2080,8 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
  		     void *type_data);
  int mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f,
  			   struct mtk_eth *eth);
@@ -96,10 +99,10 @@
  u32 mtk_rss_indr_table(struct mtk_rss_params *rss_params, int index);
  
 diff --git a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
-index 2d432f2..7f432be 100644
+index 402f1e3..3bfbec8 100644
 --- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
 +++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
-@@ -694,6 +694,16 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
+@@ -828,6 +828,16 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
  	}
  }