[][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,
}
}