Skip to content

Commit 0cf731f

Browse files
LorenzoBianconiPaolo Abeni
authored andcommitted
net: ethernet: mtk_eth_soc: fix hw hash reporting for MTK_NETSYS_V2
Properly report hw rx hash for mt7986 chipset accroding to the new dma descriptor layout. Fixes: 197c9e9 ("net: ethernet: mtk_eth_soc: introduce support for mt7986 chipset") Signed-off-by: Lorenzo Bianconi <[email protected]> Link: https://lore.kernel.org/r/091394ea4e705fbb35f828011d98d0ba33808f69.1661257293.git.lorenzo@kernel.org Signed-off-by: Paolo Abeni <[email protected]>
1 parent 24c7a64 commit 0cf731f

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

drivers/net/ethernet/mediatek/mtk_eth_soc.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,27 +1891,29 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
18911891
skb->dev = netdev;
18921892
bytes += skb->len;
18931893

1894-
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
1894+
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
1895+
hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
1896+
if (hash != MTK_RXD5_FOE_ENTRY)
1897+
skb_set_hash(skb, jhash_1word(hash, 0),
1898+
PKT_HASH_TYPE_L4);
18951899
rxdcsum = &trxd.rxd3;
1896-
else
1900+
} else {
1901+
hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
1902+
if (hash != MTK_RXD4_FOE_ENTRY)
1903+
skb_set_hash(skb, jhash_1word(hash, 0),
1904+
PKT_HASH_TYPE_L4);
18971905
rxdcsum = &trxd.rxd4;
1906+
}
18981907

18991908
if (*rxdcsum & eth->soc->txrx.rx_dma_l4_valid)
19001909
skb->ip_summed = CHECKSUM_UNNECESSARY;
19011910
else
19021911
skb_checksum_none_assert(skb);
19031912
skb->protocol = eth_type_trans(skb, netdev);
19041913

1905-
hash = trxd.rxd4 & MTK_RXD4_FOE_ENTRY;
1906-
if (hash != MTK_RXD4_FOE_ENTRY) {
1907-
hash = jhash_1word(hash, 0);
1908-
skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
1909-
}
1910-
19111914
reason = FIELD_GET(MTK_RXD4_PPE_CPU_REASON, trxd.rxd4);
19121915
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
1913-
mtk_ppe_check_skb(eth->ppe, skb,
1914-
trxd.rxd4 & MTK_RXD4_FOE_ENTRY);
1916+
mtk_ppe_check_skb(eth->ppe, skb, hash);
19151917

19161918
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
19171919
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {

drivers/net/ethernet/mediatek/mtk_eth_soc.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,11 @@
314314
#define RX_DMA_L4_VALID_PDMA BIT(30) /* when PDMA is used */
315315
#define RX_DMA_SPECIAL_TAG BIT(22)
316316

317+
/* PDMA descriptor rxd5 */
318+
#define MTK_RXD5_FOE_ENTRY GENMASK(14, 0)
319+
#define MTK_RXD5_PPE_CPU_REASON GENMASK(22, 18)
320+
#define MTK_RXD5_SRC_PORT GENMASK(29, 26)
321+
317322
#define RX_DMA_GET_SPORT(x) (((x) >> 19) & 0xf)
318323
#define RX_DMA_GET_SPORT_V2(x) (((x) >> 26) & 0x7)
319324

0 commit comments

Comments
 (0)