Skip to content

Commit 88efedf

Browse files
LorenzoBianconikuba-moo
authored andcommitted
net: ethernet: mtk_eth_soc: enable nft hw flowtable_offload for MT7988 SoC
Enable hw Packet Process Engine (PPE) for MT7988 SoC. Tested-by: Daniel Golle <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Link: https://lore.kernel.org/r/5e86341b0220a49620dadc02d77970de5ded9efc.1690441576.git.lorenzo@kernel.org Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 58ea461 commit 88efedf

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

drivers/net/ethernet/mediatek/mtk_eth_soc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5062,6 +5062,9 @@ static const struct mtk_soc_data mt7988_data = {
50625062
.required_clks = MT7988_CLKS_BITMAP,
50635063
.required_pctl = false,
50645064
.version = 3,
5065+
.offload_version = 2,
5066+
.hash_offset = 4,
5067+
.foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
50655068
.txrx = {
50665069
.txd_size = sizeof(struct mtk_tx_dma_v2),
50675070
.rxd_size = sizeof(struct mtk_rx_dma_v2),

drivers/net/ethernet/mediatek/mtk_ppe.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,20 +423,30 @@ int mtk_foe_entry_set_wdma(struct mtk_eth *eth, struct mtk_foe_entry *entry,
423423
struct mtk_foe_mac_info *l2 = mtk_foe_entry_l2(eth, entry);
424424
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
425425

426-
if (mtk_is_netsys_v2_or_greater(eth)) {
426+
switch (eth->soc->version) {
427+
case 3:
428+
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
429+
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
430+
MTK_FOE_IB2_WDMA_WINFO_V2;
431+
l2->w3info = FIELD_PREP(MTK_FOE_WINFO_WCID_V3, wcid) |
432+
FIELD_PREP(MTK_FOE_WINFO_BSS_V3, bss);
433+
break;
434+
case 2:
427435
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
428436
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
429437
MTK_FOE_IB2_WDMA_WINFO_V2;
430438
l2->winfo = FIELD_PREP(MTK_FOE_WINFO_WCID, wcid) |
431439
FIELD_PREP(MTK_FOE_WINFO_BSS, bss);
432-
} else {
440+
break;
441+
default:
433442
*ib2 &= ~MTK_FOE_IB2_PORT_MG;
434443
*ib2 |= MTK_FOE_IB2_WDMA_WINFO;
435444
if (wdma_idx)
436445
*ib2 |= MTK_FOE_IB2_WDMA_DEVIDX;
437446
l2->vlan2 = FIELD_PREP(MTK_FOE_VLAN2_WINFO_BSS, bss) |
438447
FIELD_PREP(MTK_FOE_VLAN2_WINFO_WCID, wcid) |
439448
FIELD_PREP(MTK_FOE_VLAN2_WINFO_RING, txq);
449+
break;
440450
}
441451

442452
return 0;
@@ -964,8 +974,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
964974
mtk_ppe_init_foe_table(ppe);
965975
ppe_w32(ppe, MTK_PPE_TB_BASE, ppe->foe_phys);
966976

967-
val = MTK_PPE_TB_CFG_ENTRY_80B |
968-
MTK_PPE_TB_CFG_AGE_NON_L4 |
977+
val = MTK_PPE_TB_CFG_AGE_NON_L4 |
969978
MTK_PPE_TB_CFG_AGE_UNBIND |
970979
MTK_PPE_TB_CFG_AGE_TCP |
971980
MTK_PPE_TB_CFG_AGE_UDP |
@@ -981,6 +990,8 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
981990
MTK_PPE_ENTRIES_SHIFT);
982991
if (mtk_is_netsys_v2_or_greater(ppe->eth))
983992
val |= MTK_PPE_TB_CFG_INFO_SEL;
993+
if (!mtk_is_netsys_v3_or_greater(ppe->eth))
994+
val |= MTK_PPE_TB_CFG_ENTRY_80B;
984995
ppe_w32(ppe, MTK_PPE_TB_CFG, val);
985996

986997
ppe_w32(ppe, MTK_PPE_IP_PROTO_CHK,

drivers/net/ethernet/mediatek/mtk_ppe.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,17 @@ enum {
8585
#define MTK_FOE_WINFO_BSS GENMASK(5, 0)
8686
#define MTK_FOE_WINFO_WCID GENMASK(15, 6)
8787

88+
#define MTK_FOE_WINFO_BSS_V3 GENMASK(23, 16)
89+
#define MTK_FOE_WINFO_WCID_V3 GENMASK(15, 0)
90+
91+
#define MTK_FOE_WINFO_PAO_USR_INFO GENMASK(15, 0)
92+
#define MTK_FOE_WINFO_PAO_TID GENMASK(19, 16)
93+
#define MTK_FOE_WINFO_PAO_IS_FIXEDRATE BIT(20)
94+
#define MTK_FOE_WINFO_PAO_IS_PRIOR BIT(21)
95+
#define MTK_FOE_WINFO_PAO_IS_SP BIT(22)
96+
#define MTK_FOE_WINFO_PAO_HF BIT(23)
97+
#define MTK_FOE_WINFO_PAO_AMSDU_EN BIT(24)
98+
8899
enum {
89100
MTK_FOE_STATE_INVALID,
90101
MTK_FOE_STATE_UNBIND,
@@ -106,8 +117,13 @@ struct mtk_foe_mac_info {
106117
u16 pppoe_id;
107118
u16 src_mac_lo;
108119

120+
/* netsys_v2 */
109121
u16 minfo;
110122
u16 winfo;
123+
124+
/* netsys_v3 */
125+
u32 w3info;
126+
u32 wpao;
111127
};
112128

113129
/* software-only entry type */
@@ -218,6 +234,7 @@ struct mtk_foe_ipv6_6rd {
218234

219235
#define MTK_FOE_ENTRY_V1_SIZE 80
220236
#define MTK_FOE_ENTRY_V2_SIZE 96
237+
#define MTK_FOE_ENTRY_V3_SIZE 128
221238

222239
struct mtk_foe_entry {
223240
u32 ib1;
@@ -228,7 +245,7 @@ struct mtk_foe_entry {
228245
struct mtk_foe_ipv4_dslite dslite;
229246
struct mtk_foe_ipv6 ipv6;
230247
struct mtk_foe_ipv6_6rd ipv6_6rd;
231-
u32 data[23];
248+
u32 data[31];
232249
};
233250
};
234251

0 commit comments

Comments
 (0)