aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/patches-5.15/701-net-dsa-add-rtl838x-support-for-tag-trailer.patch
blob: 0cb784fcbfa43d0d6e41c08b51c1112b23546ad9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 2b88563ee5aafd9571d965b7f2093a0f58d98a31 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Thu, 26 Nov 2020 12:02:21 +0100
Subject: net: dsa: Add rtl838x support for tag trailer

* rename the target to realtek
* add refactored DSA driver
* add latest gpio driver
* lots of arch cleanups
* new irq driver
* additional boards

Submitted-by: Bert Vermeulen <bert@biot.com>
Submitted-by: Birger Koblitz <mail@birger-koblitz.de>
Submitted-by: Sander Vanheule <sander@svanheule.net>
Submitted-by: Bjørn Mork <bjorn@mork.no>
Submitted-by: John Crispin <john@phrozen.org>
---
 net/dsa/tag_trailer.c                         | 16 +++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

--- a/net/dsa/tag_trailer.c
+++ b/net/dsa/tag_trailer.c
@@ -17,7 +17,12 @@ static struct sk_buff *trailer_xmit(stru
 
 	trailer = skb_put(skb, 4);
 	trailer[0] = 0x80;
+
+#ifdef CONFIG_NET_DSA_RTL83XX
+	trailer[1] = dp->index;
+#else
 	trailer[1] = 1 << dp->index;
+#endif /* CONFIG_NET_DSA_RTL838X */
 	trailer[2] = 0x10;
 	trailer[3] = 0x00;
 
@@ -33,12 +38,23 @@ static struct sk_buff *trailer_rcv(struc
 		return NULL;
 
 	trailer = skb_tail_pointer(skb) - 4;
+
+#ifdef CONFIG_NET_DSA_RTL83XX
+	if (trailer[0] != 0x80 || (trailer[1] & 0x80) != 0x00 ||
+	    (trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
+		return NULL;
+
+	if (trailer[1] & 0x40)
+		skb->offload_fwd_mark = 1;
+
+	source_port = trailer[1] & 0x3f;
+#else
 	if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
 	    (trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
 		return NULL;
 
 	source_port = trailer[1] & 7;
-
+#endif
 	skb->dev = dsa_master_find_slave(dev, 0, source_port);
 	if (!skb->dev)
 		return NULL;