Import some accepted and pending upstream patches for mtk_eth_soc, replacing some semantically equivalent local patches and fixing issues when operating the PCS in 1G SGMII mode. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Felix Fietkau <nbd@nbd.name>
 | 
						|
Date: Tue, 27 Dec 2022 15:02:51 +0100
 | 
						|
Subject: [PATCH] net: ethernet: mtk_eth_soc: ppe: fix L2 offloading with DSA
 | 
						|
 untagging offload enabled
 | 
						|
 | 
						|
Check for skb metadata in order to detect the case where the DSA header is not
 | 
						|
present.
 | 
						|
 | 
						|
Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging")
 | 
						|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
						|
---
 | 
						|
 | 
						|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 | 
						|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
 | 
						|
@@ -1998,9 +1998,6 @@ static int mtk_poll_rx(struct napi_struc
 | 
						|
 			skb_checksum_none_assert(skb);
 | 
						|
 		skb->protocol = eth_type_trans(skb, netdev);
 | 
						|
 
 | 
						|
-		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
 | 
						|
-			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
 | 
						|
-
 | 
						|
 		/* When using VLAN untagging in combination with DSA, the
 | 
						|
 		 * hardware treats the MTK special tag as a VLAN and untags it.
 | 
						|
 		 */
 | 
						|
@@ -2013,6 +2010,9 @@ static int mtk_poll_rx(struct napi_struc
 | 
						|
 				skb_dst_set_noref(skb, ð->dsa_meta[port]->dst);
 | 
						|
 		}
 | 
						|
 
 | 
						|
+		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
 | 
						|
+			mtk_ppe_check_skb(eth->ppe[0], skb, hash);
 | 
						|
+
 | 
						|
 		skb_record_rx_queue(skb, 0);
 | 
						|
 		napi_gro_receive(napi, skb);
 | 
						|
 
 | 
						|
--- a/drivers/net/ethernet/mediatek/mtk_ppe.c
 | 
						|
+++ b/drivers/net/ethernet/mediatek/mtk_ppe.c
 | 
						|
@@ -8,6 +8,7 @@
 | 
						|
 #include <linux/platform_device.h>
 | 
						|
 #include <linux/if_ether.h>
 | 
						|
 #include <linux/if_vlan.h>
 | 
						|
+#include <net/dst_metadata.h>
 | 
						|
 #include <net/dsa.h>
 | 
						|
 #include "mtk_eth_soc.h"
 | 
						|
 #include "mtk_ppe.h"
 | 
						|
@@ -755,7 +756,9 @@ void __mtk_ppe_check_skb(struct mtk_ppe
 | 
						|
 		    skb->dev->dsa_ptr->tag_ops->proto != DSA_TAG_PROTO_MTK)
 | 
						|
 			goto out;
 | 
						|
 
 | 
						|
-		tag += 4;
 | 
						|
+		if (!skb_metadata_dst(skb))
 | 
						|
+			tag += 4;
 | 
						|
+
 | 
						|
 		if (get_unaligned_be16(tag) != ETH_P_8021Q)
 | 
						|
 			break;
 | 
						|
 
 |