]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/5.0.3/net-dsa-mv88e6xxx-set-correct-interface-mode-for-cpu-dsa-ports.patch
Fix up backported ptrace patch
[thirdparty/kernel/stable-queue.git] / releases / 5.0.3 / net-dsa-mv88e6xxx-set-correct-interface-mode-for-cpu-dsa-ports.patch
CommitLineData
3fefb5f6
GKH
1From foo@baz Thu Mar 14 23:19:55 PDT 2019
2From: Andrew Lunn <andrew@lunn.ch>
3Date: Fri, 8 Mar 2019 01:21:27 +0100
4Subject: net: dsa: mv88e6xxx: Set correct interface mode for CPU/DSA ports
5
6From: Andrew Lunn <andrew@lunn.ch>
7
8[ Upstream commit 7cbbee050c959f41b512599bafd99685f419ce26 ]
9
10By default, the switch driver is expected to configure CPU and DSA
11ports to their maximum speed. For the 6341 and 6390 families, the
12ports interface mode has to be configured as well. The 6390X range
13support 10G ports using XAUI, while the 6341 and 6390 supports
142500BaseX, as their maximum speed.
15
16Fixes: 787799a9d555 ("net: dsa: mv88e6xxx: Default ports 9/10 6390X CMODE to 1000BaseX")
17Signed-off-by: Andrew Lunn <andrew@lunn.ch>
18Signed-off-by: David S. Miller <davem@davemloft.net>
19Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
20---
21 drivers/net/dsa/mv88e6xxx/chip.c | 11 +++++++++++
22 drivers/net/dsa/mv88e6xxx/chip.h | 3 +++
23 drivers/net/dsa/mv88e6xxx/port.c | 24 ++++++++++++++++++++++++
24 drivers/net/dsa/mv88e6xxx/port.h | 4 ++++
25 4 files changed, 42 insertions(+)
26
27--- a/drivers/net/dsa/mv88e6xxx/chip.c
28+++ b/drivers/net/dsa/mv88e6xxx/chip.c
29@@ -559,6 +559,9 @@ static int mv88e6xxx_port_setup_mac(stru
30 goto restore_link;
31 }
32
33+ if (speed == SPEED_MAX && chip->info->ops->port_max_speed_mode)
34+ mode = chip->info->ops->port_max_speed_mode(port);
35+
36 if (chip->info->ops->port_set_pause) {
37 err = chip->info->ops->port_set_pause(chip, port, pause);
38 if (err)
39@@ -3042,6 +3045,7 @@ static const struct mv88e6xxx_ops mv88e6
40 .port_set_duplex = mv88e6xxx_port_set_duplex,
41 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
42 .port_set_speed = mv88e6341_port_set_speed,
43+ .port_max_speed_mode = mv88e6341_port_max_speed_mode,
44 .port_tag_remap = mv88e6095_port_tag_remap,
45 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
46 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
47@@ -3360,6 +3364,7 @@ static const struct mv88e6xxx_ops mv88e6
48 .port_set_duplex = mv88e6xxx_port_set_duplex,
49 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
50 .port_set_speed = mv88e6390_port_set_speed,
51+ .port_max_speed_mode = mv88e6390_port_max_speed_mode,
52 .port_tag_remap = mv88e6390_port_tag_remap,
53 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
54 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
55@@ -3404,6 +3409,7 @@ static const struct mv88e6xxx_ops mv88e6
56 .port_set_duplex = mv88e6xxx_port_set_duplex,
57 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
58 .port_set_speed = mv88e6390x_port_set_speed,
59+ .port_max_speed_mode = mv88e6390x_port_max_speed_mode,
60 .port_tag_remap = mv88e6390_port_tag_remap,
61 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
62 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
63@@ -3448,6 +3454,7 @@ static const struct mv88e6xxx_ops mv88e6
64 .port_set_duplex = mv88e6xxx_port_set_duplex,
65 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
66 .port_set_speed = mv88e6390_port_set_speed,
67+ .port_max_speed_mode = mv88e6390_port_max_speed_mode,
68 .port_tag_remap = mv88e6390_port_tag_remap,
69 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
70 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
71@@ -3541,6 +3548,7 @@ static const struct mv88e6xxx_ops mv88e6
72 .port_set_duplex = mv88e6xxx_port_set_duplex,
73 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
74 .port_set_speed = mv88e6390_port_set_speed,
75+ .port_max_speed_mode = mv88e6390_port_max_speed_mode,
76 .port_tag_remap = mv88e6390_port_tag_remap,
77 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
78 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
79@@ -3672,6 +3680,7 @@ static const struct mv88e6xxx_ops mv88e6
80 .port_set_duplex = mv88e6xxx_port_set_duplex,
81 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
82 .port_set_speed = mv88e6341_port_set_speed,
83+ .port_max_speed_mode = mv88e6341_port_max_speed_mode,
84 .port_tag_remap = mv88e6095_port_tag_remap,
85 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
86 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
87@@ -3847,6 +3856,7 @@ static const struct mv88e6xxx_ops mv88e6
88 .port_set_duplex = mv88e6xxx_port_set_duplex,
89 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
90 .port_set_speed = mv88e6390_port_set_speed,
91+ .port_max_speed_mode = mv88e6390_port_max_speed_mode,
92 .port_tag_remap = mv88e6390_port_tag_remap,
93 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
94 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
95@@ -3895,6 +3905,7 @@ static const struct mv88e6xxx_ops mv88e6
96 .port_set_duplex = mv88e6xxx_port_set_duplex,
97 .port_set_rgmii_delay = mv88e6390_port_set_rgmii_delay,
98 .port_set_speed = mv88e6390x_port_set_speed,
99+ .port_max_speed_mode = mv88e6390x_port_max_speed_mode,
100 .port_tag_remap = mv88e6390_port_tag_remap,
101 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
102 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
103--- a/drivers/net/dsa/mv88e6xxx/chip.h
104+++ b/drivers/net/dsa/mv88e6xxx/chip.h
105@@ -377,6 +377,9 @@ struct mv88e6xxx_ops {
106 */
107 int (*port_set_speed)(struct mv88e6xxx_chip *chip, int port, int speed);
108
109+ /* What interface mode should be used for maximum speed? */
110+ phy_interface_t (*port_max_speed_mode)(int port);
111+
112 int (*port_tag_remap)(struct mv88e6xxx_chip *chip, int port);
113
114 int (*port_set_frame_mode)(struct mv88e6xxx_chip *chip, int port,
115--- a/drivers/net/dsa/mv88e6xxx/port.c
116+++ b/drivers/net/dsa/mv88e6xxx/port.c
117@@ -312,6 +312,14 @@ int mv88e6341_port_set_speed(struct mv88
118 return mv88e6xxx_port_set_speed(chip, port, speed, !port, true);
119 }
120
121+phy_interface_t mv88e6341_port_max_speed_mode(int port)
122+{
123+ if (port == 5)
124+ return PHY_INTERFACE_MODE_2500BASEX;
125+
126+ return PHY_INTERFACE_MODE_NA;
127+}
128+
129 /* Support 10, 100, 200, 1000 Mbps (e.g. 88E6352 family) */
130 int mv88e6352_port_set_speed(struct mv88e6xxx_chip *chip, int port, int speed)
131 {
132@@ -345,6 +353,14 @@ int mv88e6390_port_set_speed(struct mv88
133 return mv88e6xxx_port_set_speed(chip, port, speed, true, true);
134 }
135
136+phy_interface_t mv88e6390_port_max_speed_mode(int port)
137+{
138+ if (port == 9 || port == 10)
139+ return PHY_INTERFACE_MODE_2500BASEX;
140+
141+ return PHY_INTERFACE_MODE_NA;
142+}
143+
144 /* Support 10, 100, 200, 1000, 2500, 10000 Mbps (e.g. 88E6190X) */
145 int mv88e6390x_port_set_speed(struct mv88e6xxx_chip *chip, int port, int speed)
146 {
147@@ -360,6 +376,14 @@ int mv88e6390x_port_set_speed(struct mv8
148 return mv88e6xxx_port_set_speed(chip, port, speed, true, true);
149 }
150
151+phy_interface_t mv88e6390x_port_max_speed_mode(int port)
152+{
153+ if (port == 9 || port == 10)
154+ return PHY_INTERFACE_MODE_XAUI;
155+
156+ return PHY_INTERFACE_MODE_NA;
157+}
158+
159 int mv88e6390x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
160 phy_interface_t mode)
161 {
162--- a/drivers/net/dsa/mv88e6xxx/port.h
163+++ b/drivers/net/dsa/mv88e6xxx/port.h
164@@ -285,6 +285,10 @@ int mv88e6352_port_set_speed(struct mv88
165 int mv88e6390_port_set_speed(struct mv88e6xxx_chip *chip, int port, int speed);
166 int mv88e6390x_port_set_speed(struct mv88e6xxx_chip *chip, int port, int speed);
167
168+phy_interface_t mv88e6341_port_max_speed_mode(int port);
169+phy_interface_t mv88e6390_port_max_speed_mode(int port);
170+phy_interface_t mv88e6390x_port_max_speed_mode(int port);
171+
172 int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state);
173
174 int mv88e6xxx_port_set_vlan_map(struct mv88e6xxx_chip *chip, int port, u16 map);