Skip to content

Commit 43915b2

Browse files
linuswkuba-moo
authored andcommitted
dt-bindings: marvell: Rewrite MV88E6xxx in schema
This is an attempt to rewrite the Marvell MV88E6xxx switch bindings in YAML schema. The current text binding says: WARNING: This binding is currently unstable. Do not program it into a FLASH never to be changed again. Once this binding is stable, this warning will be removed. Well that never happened before we switched to YAML markup, we can't have it like this, what about fixing the mess? Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Rob Herring <robh@kernel.org> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://lore.kernel.org/r/20231127-marvell-88e6152-wan-led-v9-4-272934e04681@linaro.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent f45c197 commit 43915b2

File tree

3 files changed

+338
-110
lines changed

3 files changed

+338
-110
lines changed
Lines changed: 337 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,337 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/net/dsa/marvell,mv88e6xxx.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Marvell MV88E6xxx DSA switch family
8+
9+
maintainers:
10+
- Andrew Lunn <andrew@lunn.ch>
11+
12+
description:
13+
The Marvell MV88E6xxx switch series has been produced and sold
14+
by Marvell since at least 2008. The switch has a few compatibles which
15+
just indicate the base address of the switch, then operating systems
16+
can investigate switch ID registers to find out which actual version
17+
of the switch it is dealing with.
18+
19+
properties:
20+
compatible:
21+
oneOf:
22+
- enum:
23+
- marvell,mv88e6085
24+
- marvell,mv88e6190
25+
- marvell,mv88e6250
26+
description: |
27+
marvell,mv88e6085: This switch uses base address 0x10.
28+
This switch and its siblings will be autodetected from
29+
ID registers found in the switch, so only "marvell,mv88e6085" should be
30+
specified. This includes the following list of MV88Exxxx switches:
31+
6085, 6095, 6097, 6123, 6131, 6141, 6161, 6165, 6171, 6172, 6175, 6176,
32+
6185, 6240, 6320, 6321, 6341, 6350, 6351, 6352
33+
marvell,mv88e6190: This switch uses base address 0x00.
34+
This switch and its siblings will be autodetected from
35+
ID registers found in the switch, so only "marvell,mv88e6190" should be
36+
specified. This includes the following list of MV88Exxxx switches:
37+
6190, 6190X, 6191, 6290, 6361, 6390, 6390X
38+
marvell,mv88e6250: This switch uses base address 0x08 or 0x18.
39+
This switch and its siblings will be autodetected from
40+
ID registers found in the switch, so only "marvell,mv88e6250" should be
41+
specified. This includes the following list of MV88Exxxx switches:
42+
6220, 6250
43+
- items:
44+
- const: marvell,turris-mox-mv88e6085
45+
- const: marvell,mv88e6085
46+
- items:
47+
- const: marvell,turris-mox-mv88e6190
48+
- const: marvell,mv88e6190
49+
50+
reg:
51+
maxItems: 1
52+
53+
eeprom-length:
54+
$ref: /schemas/types.yaml#/definitions/uint32
55+
description: Set to the length of an EEPROM connected to the switch. Must be
56+
set if the switch can not detect the presence and/or size of a connected
57+
EEPROM, otherwise optional.
58+
59+
reset-gpios:
60+
description:
61+
GPIO to be used to reset the whole device
62+
maxItems: 1
63+
64+
interrupts:
65+
description: The switch provides an external interrupt line, but it is
66+
not always used by target systems.
67+
maxItems: 1
68+
69+
interrupt-controller:
70+
description: The switch has an internal interrupt controller used by
71+
the different sub-blocks.
72+
73+
'#interrupt-cells':
74+
description: The internal interrupt controller only supports triggering
75+
on active high level interrupts so the second cell must alway be set to
76+
IRQ_TYPE_LEVEL_HIGH.
77+
const: 2
78+
79+
mdio:
80+
$ref: /schemas/net/mdio.yaml#
81+
unevaluatedProperties: false
82+
description: Marvell MV88E6xxx switches have an varying combination of
83+
internal and external MDIO buses, in some cases a combined bus that
84+
can be used both internally and externally. This node is for the
85+
primary bus, used internally and sometimes also externally.
86+
87+
mdio-external:
88+
$ref: /schemas/net/mdio.yaml#
89+
unevaluatedProperties: false
90+
description: Marvell MV88E6xxx switches that have a separate external
91+
MDIO bus use this port to access external components on the MDIO bus.
92+
93+
properties:
94+
compatible:
95+
const: marvell,mv88e6xxx-mdio-external
96+
97+
required:
98+
- compatible
99+
100+
allOf:
101+
- $ref: dsa.yaml#/$defs/ethernet-ports
102+
103+
required:
104+
- compatible
105+
- reg
106+
107+
unevaluatedProperties: false
108+
109+
examples:
110+
- |
111+
#include <dt-bindings/gpio/gpio.h>
112+
mdio {
113+
#address-cells = <1>;
114+
#size-cells = <0>;
115+
116+
ethernet-switch@0 {
117+
compatible = "marvell,mv88e6085";
118+
reg = <0>;
119+
reset-gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
120+
121+
mdio {
122+
#address-cells = <1>;
123+
#size-cells = <0>;
124+
125+
sw_phy0: ethernet-phy@0 {
126+
reg = <0x0>;
127+
};
128+
129+
sw_phy1: ethernet-phy@1 {
130+
reg = <0x1>;
131+
};
132+
133+
sw_phy2: ethernet-phy@2 {
134+
reg = <0x2>;
135+
};
136+
137+
sw_phy3: ethernet-phy@3 {
138+
reg = <0x3>;
139+
};
140+
};
141+
142+
ethernet-ports {
143+
#address-cells = <1>;
144+
#size-cells = <0>;
145+
146+
ethernet-port@0 {
147+
reg = <0>;
148+
label = "lan4";
149+
phy-handle = <&sw_phy0>;
150+
phy-mode = "internal";
151+
};
152+
153+
ethernet-port@1 {
154+
reg = <1>;
155+
label = "lan3";
156+
phy-handle = <&sw_phy1>;
157+
phy-mode = "internal";
158+
};
159+
160+
ethernet-port@2 {
161+
reg = <2>;
162+
label = "lan2";
163+
phy-handle = <&sw_phy2>;
164+
phy-mode = "internal";
165+
};
166+
167+
ethernet-port@3 {
168+
reg = <3>;
169+
label = "lan1";
170+
phy-handle = <&sw_phy3>;
171+
phy-mode = "internal";
172+
};
173+
174+
ethernet-port@5 {
175+
reg = <5>;
176+
ethernet = <&fec>;
177+
phy-mode = "rgmii-id";
178+
179+
fixed-link {
180+
speed = <1000>;
181+
full-duplex;
182+
};
183+
};
184+
};
185+
};
186+
};
187+
- |
188+
#include <dt-bindings/interrupt-controller/irq.h>
189+
mdio {
190+
#address-cells = <1>;
191+
#size-cells = <0>;
192+
193+
ethernet-switch@0 {
194+
compatible = "marvell,mv88e6190";
195+
#interrupt-cells = <2>;
196+
interrupt-controller;
197+
interrupt-parent = <&gpio1>;
198+
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
199+
pinctrl-0 = <&switch_interrupt_pins>;
200+
pinctrl-names = "default";
201+
reg = <0>;
202+
203+
mdio {
204+
#address-cells = <1>;
205+
#size-cells = <0>;
206+
207+
switch0phy1: ethernet-phy@1 {
208+
reg = <0x1>;
209+
};
210+
211+
switch0phy2: ethernet-phy@2 {
212+
reg = <0x2>;
213+
};
214+
215+
switch0phy3: ethernet-phy@3 {
216+
reg = <0x3>;
217+
};
218+
219+
switch0phy4: ethernet-phy@4 {
220+
reg = <0x4>;
221+
};
222+
223+
switch0phy5: ethernet-phy@5 {
224+
reg = <0x5>;
225+
};
226+
227+
switch0phy6: ethernet-phy@6 {
228+
reg = <0x6>;
229+
};
230+
231+
switch0phy7: ethernet-phy@7 {
232+
reg = <0x7>;
233+
};
234+
235+
switch0phy8: ethernet-phy@8 {
236+
reg = <0x8>;
237+
};
238+
};
239+
240+
mdio-external {
241+
compatible = "marvell,mv88e6xxx-mdio-external";
242+
#address-cells = <1>;
243+
#size-cells = <0>;
244+
245+
phy1: ethernet-phy@b {
246+
reg = <0xb>;
247+
compatible = "ethernet-phy-ieee802.3-c45";
248+
};
249+
250+
phy2: ethernet-phy@c {
251+
reg = <0xc>;
252+
compatible = "ethernet-phy-ieee802.3-c45";
253+
};
254+
};
255+
256+
ethernet-ports {
257+
#address-cells = <1>;
258+
#size-cells = <0>;
259+
260+
ethernet-port@0 {
261+
ethernet = <&eth0>;
262+
phy-mode = "rgmii";
263+
reg = <0>;
264+
265+
fixed-link {
266+
full-duplex;
267+
pause;
268+
speed = <1000>;
269+
};
270+
};
271+
272+
ethernet-port@1 {
273+
label = "lan1";
274+
phy-handle = <&switch0phy1>;
275+
reg = <1>;
276+
};
277+
278+
ethernet-port@2 {
279+
label = "lan2";
280+
phy-handle = <&switch0phy2>;
281+
reg = <2>;
282+
};
283+
284+
ethernet-port@3 {
285+
label = "lan3";
286+
phy-handle = <&switch0phy3>;
287+
reg = <3>;
288+
};
289+
290+
ethernet-port@4 {
291+
label = "lan4";
292+
phy-handle = <&switch0phy4>;
293+
reg = <4>;
294+
};
295+
296+
ethernet-port@5 {
297+
label = "lan5";
298+
phy-handle = <&switch0phy5>;
299+
reg = <5>;
300+
};
301+
302+
ethernet-port@6 {
303+
label = "lan6";
304+
phy-handle = <&switch0phy6>;
305+
reg = <6>;
306+
};
307+
308+
ethernet-port@7 {
309+
label = "lan7";
310+
phy-handle = <&switch0phy7>;
311+
reg = <7>;
312+
};
313+
314+
ethernet-port@8 {
315+
label = "lan8";
316+
phy-handle = <&switch0phy8>;
317+
reg = <8>;
318+
};
319+
320+
ethernet-port@9 {
321+
/* 88X3310P external phy */
322+
label = "lan9";
323+
phy-handle = <&phy1>;
324+
phy-mode = "xaui";
325+
reg = <9>;
326+
};
327+
328+
ethernet-port@a {
329+
/* 88X3310P external phy */
330+
label = "lan10";
331+
phy-handle = <&phy2>;
332+
phy-mode = "xaui";
333+
reg = <0xa>;
334+
};
335+
};
336+
};
337+
};

0 commit comments

Comments
 (0)