forked from Openwrt/openwrt
2ad898e091
Removed upstreamed: generic/backport-6.1/789-STABLE-01-net-dsa-mt7530-prevent-possible-incorrect-XTAL-frequ.patch [1] generic/backport-6.1/789-STABLE-02-net-dsa-mt7530-fix-link-local-frames-that-ingress-vl.patch [2] generic/backport-6.1/789-STABLE-03-net-dsa-mt7530-fix-handling-of-all-link-local-frames.patch [3] generic/pending-6.1/735-net-mediatek-mtk_eth_soc-release-MAC_MCR_FORCE_LINK-.patch [4] generic/pending-6.1/736-net-ethernet-mtk_eth_soc-fix-PPE-hanging-issue.patch [5] Manual adjusted the following patches: mediatek/patches-6.1/100-dts-update-mt7622-rfb1.patch 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.83&id=be4512b9ac6fc53e1ca8daccbda84f643215c547 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.83&id=f1fa919ea59655f73cb3972264e157b8831ba546 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.83&id=86c0c154a759f2af9612a04bdf29110f02dce956 4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.83&id=6b62bad2da1b338f452a9380639fc9b093d75a25 5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.83&id=f78807362828ad01db2a9ed005bf79501b620f27 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
136 lines
4.3 KiB
Diff
136 lines
4.3 KiB
Diff
From 199e7d5a7f03dd377f3a7a458360dbedd71d50ba Mon Sep 17 00:00:00 2001
|
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Date: Thu, 27 Jul 2023 09:07:28 +0200
|
|
Subject: [PATCH 107/250] 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 <daniel@makrotopia.org>
|
|
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Link: https://lore.kernel.org/r/5e86341b0220a49620dadc02d77970de5ded9efc.1690441576.git.lorenzo@kernel.org
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 3 +++
|
|
drivers/net/ethernet/mediatek/mtk_ppe.c | 19 +++++++++++++++----
|
|
drivers/net/ethernet/mediatek/mtk_ppe.h | 19 ++++++++++++++++++-
|
|
3 files changed, 36 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
@@ -5027,6 +5027,9 @@ static const struct mtk_soc_data mt7988_
|
|
.required_clks = MT7988_CLKS_BITMAP,
|
|
.required_pctl = false,
|
|
.version = 3,
|
|
+ .offload_version = 2,
|
|
+ .hash_offset = 4,
|
|
+ .foe_entry_size = MTK_FOE_ENTRY_V3_SIZE,
|
|
.txrx = {
|
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
|
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
|
|
@@ -422,13 +422,22 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
|
struct mtk_foe_mac_info *l2 = mtk_foe_entry_l2(eth, entry);
|
|
u32 *ib2 = mtk_foe_entry_ib2(eth, entry);
|
|
|
|
- if (mtk_is_netsys_v2_or_greater(eth)) {
|
|
+ switch (eth->soc->version) {
|
|
+ case 3:
|
|
+ *ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
|
+ *ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
|
+ MTK_FOE_IB2_WDMA_WINFO_V2;
|
|
+ l2->w3info = FIELD_PREP(MTK_FOE_WINFO_WCID_V3, wcid) |
|
|
+ FIELD_PREP(MTK_FOE_WINFO_BSS_V3, bss);
|
|
+ break;
|
|
+ case 2:
|
|
*ib2 &= ~MTK_FOE_IB2_PORT_MG_V2;
|
|
*ib2 |= FIELD_PREP(MTK_FOE_IB2_RX_IDX, txq) |
|
|
MTK_FOE_IB2_WDMA_WINFO_V2;
|
|
l2->winfo = FIELD_PREP(MTK_FOE_WINFO_WCID, wcid) |
|
|
FIELD_PREP(MTK_FOE_WINFO_BSS, bss);
|
|
- } else {
|
|
+ break;
|
|
+ default:
|
|
*ib2 &= ~MTK_FOE_IB2_PORT_MG;
|
|
*ib2 |= MTK_FOE_IB2_WDMA_WINFO;
|
|
if (wdma_idx)
|
|
@@ -436,6 +445,7 @@ int mtk_foe_entry_set_wdma(struct mtk_et
|
|
l2->vlan2 = FIELD_PREP(MTK_FOE_VLAN2_WINFO_BSS, bss) |
|
|
FIELD_PREP(MTK_FOE_VLAN2_WINFO_WCID, wcid) |
|
|
FIELD_PREP(MTK_FOE_VLAN2_WINFO_RING, txq);
|
|
+ break;
|
|
}
|
|
|
|
return 0;
|
|
@@ -950,8 +960,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
|
mtk_ppe_init_foe_table(ppe);
|
|
ppe_w32(ppe, MTK_PPE_TB_BASE, ppe->foe_phys);
|
|
|
|
- val = MTK_PPE_TB_CFG_ENTRY_80B |
|
|
- MTK_PPE_TB_CFG_AGE_NON_L4 |
|
|
+ val = MTK_PPE_TB_CFG_AGE_NON_L4 |
|
|
MTK_PPE_TB_CFG_AGE_UNBIND |
|
|
MTK_PPE_TB_CFG_AGE_TCP |
|
|
MTK_PPE_TB_CFG_AGE_UDP |
|
|
@@ -967,6 +976,8 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
|
|
MTK_PPE_ENTRIES_SHIFT);
|
|
if (mtk_is_netsys_v2_or_greater(ppe->eth))
|
|
val |= MTK_PPE_TB_CFG_INFO_SEL;
|
|
+ if (!mtk_is_netsys_v3_or_greater(ppe->eth))
|
|
+ val |= MTK_PPE_TB_CFG_ENTRY_80B;
|
|
ppe_w32(ppe, MTK_PPE_TB_CFG, val);
|
|
|
|
ppe_w32(ppe, MTK_PPE_IP_PROTO_CHK,
|
|
--- a/drivers/net/ethernet/mediatek/mtk_ppe.h
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.h
|
|
@@ -85,6 +85,17 @@ enum {
|
|
#define MTK_FOE_WINFO_BSS GENMASK(5, 0)
|
|
#define MTK_FOE_WINFO_WCID GENMASK(15, 6)
|
|
|
|
+#define MTK_FOE_WINFO_BSS_V3 GENMASK(23, 16)
|
|
+#define MTK_FOE_WINFO_WCID_V3 GENMASK(15, 0)
|
|
+
|
|
+#define MTK_FOE_WINFO_PAO_USR_INFO GENMASK(15, 0)
|
|
+#define MTK_FOE_WINFO_PAO_TID GENMASK(19, 16)
|
|
+#define MTK_FOE_WINFO_PAO_IS_FIXEDRATE BIT(20)
|
|
+#define MTK_FOE_WINFO_PAO_IS_PRIOR BIT(21)
|
|
+#define MTK_FOE_WINFO_PAO_IS_SP BIT(22)
|
|
+#define MTK_FOE_WINFO_PAO_HF BIT(23)
|
|
+#define MTK_FOE_WINFO_PAO_AMSDU_EN BIT(24)
|
|
+
|
|
enum {
|
|
MTK_FOE_STATE_INVALID,
|
|
MTK_FOE_STATE_UNBIND,
|
|
@@ -106,8 +117,13 @@ struct mtk_foe_mac_info {
|
|
u16 pppoe_id;
|
|
u16 src_mac_lo;
|
|
|
|
+ /* netsys_v2 */
|
|
u16 minfo;
|
|
u16 winfo;
|
|
+
|
|
+ /* netsys_v3 */
|
|
+ u32 w3info;
|
|
+ u32 wpao;
|
|
};
|
|
|
|
/* software-only entry type */
|
|
@@ -218,6 +234,7 @@ struct mtk_foe_ipv6_6rd {
|
|
|
|
#define MTK_FOE_ENTRY_V1_SIZE 80
|
|
#define MTK_FOE_ENTRY_V2_SIZE 96
|
|
+#define MTK_FOE_ENTRY_V3_SIZE 128
|
|
|
|
struct mtk_foe_entry {
|
|
u32 ib1;
|
|
@@ -228,7 +245,7 @@ struct mtk_foe_entry {
|
|
struct mtk_foe_ipv4_dslite dslite;
|
|
struct mtk_foe_ipv6 ipv6;
|
|
struct mtk_foe_ipv6_6rd ipv6_6rd;
|
|
- u32 data[23];
|
|
+ u32 data[31];
|
|
};
|
|
};
|
|
|