--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -4090,7 +4090,9 @@ static int mtk_probe(struct platform_dev
+@@ -4320,7 +4320,9 @@ static int mtk_probe(struct platform_dev
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
eth->ppe[i] = mtk_ppe_init(eth, eth->base + ppe_addr,
if (!eth->ppe[i]) {
err = -ENOMEM;
goto err_free_dev;
-@@ -4213,6 +4215,7 @@ static const struct mtk_soc_data mt7622_
+@@ -4445,6 +4447,7 @@ static const struct mtk_soc_data mt7622_
.required_pctl = false,
.offload_version = 2,
.hash_offset = 2,
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
-@@ -4250,6 +4253,7 @@ static const struct mtk_soc_data mt7629_
+@@ -4482,6 +4485,7 @@ static const struct mtk_soc_data mt7629_
.hw_features = MTK_HW_FEATURES,
.required_clks = MT7629_CLKS_BITMAP,
.required_pctl = false,
.txrx = {
.txd_size = sizeof(struct mtk_tx_dma),
.rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4270,6 +4274,7 @@ static const struct mtk_soc_data mt7986_
+@@ -4502,6 +4506,7 @@ static const struct mtk_soc_data mt7986_
.offload_version = 2,
.hash_offset = 4,
.foe_entry_size = sizeof(struct mtk_foe_entry),
.rxd_size = sizeof(struct mtk_rx_dma_v2),
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -983,6 +983,7 @@ struct mtk_soc_data {
+@@ -1007,6 +1007,7 @@ struct mtk_soc_data {
u8 hash_offset;
u16 foe_entry_size;
netdev_features_t hw_features;
dma_wmb();
mtk_ppe_cache_clear(ppe);
-@@ -716,14 +766,42 @@ int mtk_foe_entry_idle_time(struct mtk_p
- return __mtk_foe_entry_idle_time(ppe, entry->data.ib1);
+@@ -743,14 +793,42 @@ int mtk_ppe_prepare_reset(struct mtk_ppe
+ return mtk_ppe_wait_busy(ppe);
}
+struct mtk_foe_accounting *mtk_foe_entry_get_mib(struct mtk_ppe *ppe, u32 index,
ppe = devm_kzalloc(dev, sizeof(*ppe), GFP_KERNEL);
if (!ppe)
-@@ -738,6 +816,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
+@@ -765,6 +843,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
ppe->eth = eth;
ppe->dev = dev;
ppe->version = version;
foe = dmam_alloc_coherent(ppe->dev,
MTK_PPE_ENTRIES * soc->foe_entry_size,
-@@ -753,6 +832,25 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
+@@ -780,6 +859,25 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_
if (!ppe->foe_flow)
return NULL;
mtk_ppe_debugfs_init(ppe, index);
return ppe;
-@@ -867,6 +965,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
+@@ -894,6 +992,16 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
ppe_w32(ppe, MTK_PPE_DEFAULT_CPU_PORT1, 0xcb777);
ppe_w32(ppe, MTK_PPE_SBW_CTRL, 0x7f);
}
+ int version, int index, bool accounting);
void mtk_ppe_start(struct mtk_ppe *ppe);
int mtk_ppe_stop(struct mtk_ppe *ppe);
-
-@@ -354,5 +373,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
+ int mtk_ppe_prepare_reset(struct mtk_ppe *ppe);
+@@ -355,5 +374,7 @@ int mtk_foe_entry_commit(struct mtk_ppe
void mtk_foe_entry_clear(struct mtk_ppe *ppe, struct mtk_flow_entry *entry);
int mtk_foe_entry_idle_time(struct mtk_ppe *ppe, struct mtk_flow_entry *entry);
int mtk_ppe_debugfs_init(struct mtk_ppe *ppe, int index);
--- a/drivers/net/ethernet/mediatek/mtk_ppe_regs.h
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_regs.h
-@@ -143,6 +143,20 @@ enum {
+@@ -149,6 +149,20 @@ enum {
#define MTK_PPE_MIB_TB_BASE 0x338