developer | 47b4f91 | 2023-11-16 11:44:30 +0800 | [diff] [blame] | 1 | From 9c849a6e5a246489c5c91565d4c89a32958cad29 Mon Sep 17 00:00:00 2001 |
| 2 | From: Bo-Cun Chen <bc-bocun.chen@mediatek.com> |
| 3 | Date: Thu, 16 Nov 2023 11:21:53 +0800 |
| 4 | Subject: [PATCH] 999-3022-mediatek-ethernet-add-multiple-ppe-allocation |
| 5 | |
| 6 | --- |
| 7 | arch/arm64/boot/dts/mediatek/mt7988.dtsi | 1 + |
| 8 | drivers/net/ethernet/mediatek/mtk_eth_soc.c | 10 +++++++++- |
| 9 | drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 ++ |
| 10 | drivers/net/ethernet/mediatek/mtk_ppe_offload.c | 10 ++++++++++ |
| 11 | 4 files changed, 22 insertions(+), 1 deletion(-) |
| 12 | |
| 13 | diff --git a/arch/arm64/boot/dts/mediatek/mt7988.dtsi b/arch/arm64/boot/dts/mediatek/mt7988.dtsi |
| 14 | index 8d83f6b..d378a65 100644 |
| 15 | --- a/arch/arm64/boot/dts/mediatek/mt7988.dtsi |
| 16 | +++ b/arch/arm64/boot/dts/mediatek/mt7988.dtsi |
| 17 | @@ -950,6 +950,7 @@ |
| 18 | mediatek,infracfg = <&topmisc>; |
| 19 | mediatek,toprgu = <&watchdog>; |
| 20 | mediatek,hwver = <&hwver>; |
| 21 | + mtketh-ppe-num = <3>; |
| 22 | #reset-cells = <1>; |
| 23 | #address-cells = <1>; |
| 24 | #size-cells = <0>; |
| 25 | diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c |
| 26 | index de2eac4..55d05fd 100644 |
| 27 | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c |
| 28 | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c |
| 29 | @@ -3669,7 +3669,14 @@ static int mtk_open(struct net_device *dev) |
| 30 | SGMSYS_QPHY_PWR_STATE_CTRL, 0); |
| 31 | |
| 32 | if (eth->soc->offload_version) { |
| 33 | - gdm_config = MTK_GDMA_TO_PPE0; |
| 34 | +#if defined(CONFIG_MEDIATEK_NETSYS_V2) || defined(CONFIG_MEDIATEK_NETSYS_V3) |
| 35 | + if (eth->ppe_num >= 3 && mac->id == 2) |
| 36 | + gdm_config = MTK_GDMA_TO_PPE2; |
| 37 | + else if (eth->ppe_num >=2 && mac->id == 1) |
| 38 | + gdm_config = MTK_GDMA_TO_PPE1; |
| 39 | + else |
| 40 | +#endif |
| 41 | + gdm_config = MTK_GDMA_TO_PPE0; |
| 42 | |
| 43 | for (i = 0; i < eth->ppe_num; i++) |
| 44 | mtk_ppe_start(eth->ppe[i]); |
| 45 | @@ -4635,6 +4642,7 @@ static const struct net_device_ops mtk_netdev_ops = { |
| 46 | .ndo_poll_controller = mtk_poll_controller, |
| 47 | #endif |
| 48 | .ndo_setup_tc = mtk_eth_setup_tc, |
| 49 | + .ndo_fill_receive_path = mtk_eth_fill_receive_path, |
| 50 | }; |
| 51 | |
| 52 | static void mux_poll(struct work_struct *work) |
| 53 | diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/drivers/net/ethernet/mediatek/mtk_eth_soc.h |
| 54 | index 50024a2..e0dfc9d 100644 |
| 55 | --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h |
| 56 | +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h |
| 57 | @@ -2041,6 +2041,8 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type, |
| 58 | void *type_data); |
| 59 | int mtk_eth_setup_tc_block(struct net_device *dev, struct flow_block_offload *f, |
| 60 | struct mtk_eth *eth); |
| 61 | +int mtk_eth_fill_receive_path(struct net_device_path_ctx *ctx, |
| 62 | + struct net_device_path *path); |
| 63 | void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev); |
| 64 | u32 mtk_rss_indr_table(struct mtk_rss_params *rss_params, int index); |
| 65 | |
| 66 | diff --git a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c |
| 67 | index eab9e9d..e5ff575 100644 |
| 68 | --- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c |
| 69 | +++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c |
| 70 | @@ -694,6 +694,16 @@ int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type, |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | +int mtk_eth_fill_receive_path(struct net_device_path_ctx *ctx, |
| 75 | + struct net_device_path *path) |
| 76 | +{ |
| 77 | + struct mtk_mac *mac = netdev_priv(ctx->dev); |
| 78 | + |
| 79 | + path->mtk_wdma.wdma_idx = mac->id; |
| 80 | + |
| 81 | + return 0; |
| 82 | +} |
| 83 | + |
| 84 | int mtk_eth_offload_init(struct mtk_eth *eth, int id) |
| 85 | { |
| 86 | if (!eth->ppe[id] || !eth->ppe[id]->foe_table) |
| 87 | -- |
| 88 | 2.18.0 |
| 89 | |