xref: /openbmc/linux/Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
17f32974bSVladimir Oltean# SPDX-License-Identifier: (GPL-2.0 OR MIT)
27f32974bSVladimir Oltean%YAML 1.2
37f32974bSVladimir Oltean---
47f32974bSVladimir Oltean$id: http://devicetree.org/schemas/net/dsa/mscc,ocelot.yaml#
57f32974bSVladimir Oltean$schema: http://devicetree.org/meta-schemas/core.yaml#
67f32974bSVladimir Oltean
7a612130cSKrzysztof Kozlowskititle: Microchip Ocelot Switch Family
87f32974bSVladimir Oltean
97f32974bSVladimir Olteanmaintainers:
107f32974bSVladimir Oltean  - Vladimir Oltean <vladimir.oltean@nxp.com>
117f32974bSVladimir Oltean  - Claudiu Manoil <claudiu.manoil@nxp.com>
127f32974bSVladimir Oltean  - Alexandre Belloni <alexandre.belloni@bootlin.com>
137f32974bSVladimir Oltean  - UNGLinuxDriver@microchip.com
147f32974bSVladimir Oltean
157f32974bSVladimir Olteandescription: |
167f32974bSVladimir Oltean  There are multiple switches which are either part of the Ocelot-1 family, or
177f32974bSVladimir Oltean  derivatives of this architecture. These switches can be found embedded in
187f32974bSVladimir Oltean  various SoCs and accessed using MMIO, or as discrete chips and accessed over
197f32974bSVladimir Oltean  SPI or PCIe. The present DSA binding shall be used when the host controlling
207f32974bSVladimir Oltean  them performs packet I/O primarily through an Ethernet port of the switch
217f32974bSVladimir Oltean  (which is attached to an Ethernet port of the host), rather than through
227f32974bSVladimir Oltean  Frame DMA or register-based I/O.
237f32974bSVladimir Oltean
247f32974bSVladimir Oltean  VSC9953 (Seville):
257f32974bSVladimir Oltean
267f32974bSVladimir Oltean    This is found in the NXP T1040, where it is a memory-mapped platform
277f32974bSVladimir Oltean    device.
287f32974bSVladimir Oltean
297f32974bSVladimir Oltean    The following PHY interface types are supported:
307f32974bSVladimir Oltean
317f32974bSVladimir Oltean      - phy-mode = "internal": on ports 8 and 9
327f32974bSVladimir Oltean      - phy-mode = "sgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
337f32974bSVladimir Oltean      - phy-mode = "qsgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
347f32974bSVladimir Oltean      - phy-mode = "1000base-x": on ports 0, 1, 2, 3, 4, 5, 6, 7
357f32974bSVladimir Oltean
367f32974bSVladimir Oltean  VSC9959 (Felix):
377f32974bSVladimir Oltean
387f32974bSVladimir Oltean    This is found in the NXP LS1028A. It is a PCI device, part of the larger
397f32974bSVladimir Oltean    enetc root complex. As a result, the ethernet-switch node is a sub-node of
407f32974bSVladimir Oltean    the PCIe root complex node and its "reg" property conforms to the parent
417f32974bSVladimir Oltean    node bindings, describing it as PF 5 of device 0, bus 0.
427f32974bSVladimir Oltean
437f32974bSVladimir Oltean    If any external switch port is enabled, the enetc PF2 (enetc_port2) should
447f32974bSVladimir Oltean    be enabled as well. This is because the internal MDIO bus (exposed through
457f32974bSVladimir Oltean    EA BAR 0) used to access the MAC PCS registers truly belongs to the enetc
467f32974bSVladimir Oltean    port 2 and not to Felix.
477f32974bSVladimir Oltean
487f32974bSVladimir Oltean    The following PHY interface types are supported:
497f32974bSVladimir Oltean
507f32974bSVladimir Oltean      - phy-mode = "internal": on ports 4 and 5
517f32974bSVladimir Oltean      - phy-mode = "sgmii": on ports 0, 1, 2, 3
527f32974bSVladimir Oltean      - phy-mode = "qsgmii": on ports 0, 1, 2, 3
537f32974bSVladimir Oltean      - phy-mode = "usxgmii": on ports 0, 1, 2, 3
547f32974bSVladimir Oltean      - phy-mode = "1000base-x": on ports 0, 1, 2, 3
557f32974bSVladimir Oltean      - phy-mode = "2500base-x": on ports 0, 1, 2, 3
567f32974bSVladimir Oltean
577f32974bSVladimir Olteanproperties:
587f32974bSVladimir Oltean  compatible:
597f32974bSVladimir Oltean    enum:
607f32974bSVladimir Oltean      - mscc,vsc9953-switch
617f32974bSVladimir Oltean      - pci1957,eef0
627f32974bSVladimir Oltean
637f32974bSVladimir Oltean  reg:
647f32974bSVladimir Oltean    maxItems: 1
657f32974bSVladimir Oltean
667f32974bSVladimir Oltean  interrupts:
677f32974bSVladimir Oltean    maxItems: 1
687f32974bSVladimir Oltean
697f32974bSVladimir Oltean    description:
707f32974bSVladimir Oltean      Used to signal availability of PTP TX timestamps, and state changes of
717f32974bSVladimir Oltean      the MAC merge layer of ports that support Frame Preemption.
727f32974bSVladimir Oltean
737f32974bSVladimir Oltean  little-endian: true
747f32974bSVladimir Oltean  big-endian: true
757f32974bSVladimir Oltean
767f32974bSVladimir Olteanrequired:
777f32974bSVladimir Oltean  - compatible
787f32974bSVladimir Oltean  - reg
797f32974bSVladimir Oltean
807f32974bSVladimir OlteanallOf:
81*3cec368aSColin Foster  - $ref: dsa.yaml#/$defs/ethernet-ports
827f32974bSVladimir Oltean  - if:
837f32974bSVladimir Oltean      properties:
847f32974bSVladimir Oltean        compatible:
857f32974bSVladimir Oltean          const: pci1957,eef0
867f32974bSVladimir Oltean    then:
877f32974bSVladimir Oltean      required:
887f32974bSVladimir Oltean        - interrupts
897f32974bSVladimir Oltean
907f32974bSVladimir OlteanunevaluatedProperties: false
917f32974bSVladimir Oltean
927f32974bSVladimir Olteanexamples:
937f32974bSVladimir Oltean  # Felix VSC9959 (NXP LS1028A)
947f32974bSVladimir Oltean  - |
957f32974bSVladimir Oltean    #include <dt-bindings/interrupt-controller/arm-gic.h>
967f32974bSVladimir Oltean
977f32974bSVladimir Oltean    pcie { /* Integrated Endpoint Root Complex */
987f32974bSVladimir Oltean        #address-cells = <3>;
997f32974bSVladimir Oltean        #size-cells = <2>;
1007f32974bSVladimir Oltean
1017f32974bSVladimir Oltean        ethernet-switch@0,5 {
1027f32974bSVladimir Oltean            compatible = "pci1957,eef0";
1037f32974bSVladimir Oltean            reg = <0x000500 0 0 0 0>;
1047f32974bSVladimir Oltean            interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
1057f32974bSVladimir Oltean
1067f32974bSVladimir Oltean            ethernet-ports {
1077f32974bSVladimir Oltean                #address-cells = <1>;
1087f32974bSVladimir Oltean                #size-cells = <0>;
1097f32974bSVladimir Oltean
1107f32974bSVladimir Oltean                port@0 {
1117f32974bSVladimir Oltean                    reg = <0>;
1127f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1137f32974bSVladimir Oltean                    phy-handle = <&phy0>;
1147f32974bSVladimir Oltean                    managed = "in-band-status";
1157f32974bSVladimir Oltean                };
1167f32974bSVladimir Oltean
1177f32974bSVladimir Oltean                port@1 {
1187f32974bSVladimir Oltean                    reg = <1>;
1197f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1207f32974bSVladimir Oltean                    phy-handle = <&phy1>;
1217f32974bSVladimir Oltean                    managed = "in-band-status";
1227f32974bSVladimir Oltean                };
1237f32974bSVladimir Oltean
1247f32974bSVladimir Oltean                port@2 {
1257f32974bSVladimir Oltean                    reg = <2>;
1267f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1277f32974bSVladimir Oltean                    phy-handle = <&phy2>;
1287f32974bSVladimir Oltean                    managed = "in-band-status";
1297f32974bSVladimir Oltean                };
1307f32974bSVladimir Oltean
1317f32974bSVladimir Oltean                port@3 {
1327f32974bSVladimir Oltean                    reg = <3>;
1337f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1347f32974bSVladimir Oltean                    phy-handle = <&phy3>;
1357f32974bSVladimir Oltean                    managed = "in-band-status";
1367f32974bSVladimir Oltean                };
1377f32974bSVladimir Oltean
1387f32974bSVladimir Oltean                port@4 {
1397f32974bSVladimir Oltean                    reg = <4>;
1407f32974bSVladimir Oltean                    ethernet = <&enetc_port2>;
1417f32974bSVladimir Oltean                    phy-mode = "internal";
1427f32974bSVladimir Oltean
1437f32974bSVladimir Oltean                    fixed-link {
1447f32974bSVladimir Oltean                        speed = <2500>;
1457f32974bSVladimir Oltean                        full-duplex;
1467f32974bSVladimir Oltean                        pause;
1477f32974bSVladimir Oltean                    };
1487f32974bSVladimir Oltean                };
1497f32974bSVladimir Oltean
1507f32974bSVladimir Oltean                port@5 {
1517f32974bSVladimir Oltean                    reg = <5>;
1527f32974bSVladimir Oltean                    ethernet = <&enetc_port3>;
1537f32974bSVladimir Oltean                    phy-mode = "internal";
1547f32974bSVladimir Oltean
1557f32974bSVladimir Oltean                    fixed-link {
1567f32974bSVladimir Oltean                        speed = <1000>;
1577f32974bSVladimir Oltean                        full-duplex;
1587f32974bSVladimir Oltean                        pause;
1597f32974bSVladimir Oltean                    };
1607f32974bSVladimir Oltean                };
1617f32974bSVladimir Oltean            };
1627f32974bSVladimir Oltean        };
1637f32974bSVladimir Oltean    };
1647f32974bSVladimir Oltean  # Seville VSC9953 (NXP T1040)
1657f32974bSVladimir Oltean  - |
1667f32974bSVladimir Oltean    soc {
1677f32974bSVladimir Oltean        #address-cells = <1>;
1687f32974bSVladimir Oltean        #size-cells = <1>;
1697f32974bSVladimir Oltean
1707f32974bSVladimir Oltean        ethernet-switch@800000 {
1717f32974bSVladimir Oltean            compatible = "mscc,vsc9953-switch";
1727f32974bSVladimir Oltean            reg = <0x800000 0x290000>;
1737f32974bSVladimir Oltean            little-endian;
1747f32974bSVladimir Oltean
1757f32974bSVladimir Oltean            ethernet-ports {
1767f32974bSVladimir Oltean                #address-cells = <1>;
1777f32974bSVladimir Oltean                #size-cells = <0>;
1787f32974bSVladimir Oltean
1797f32974bSVladimir Oltean                port@0 {
1807f32974bSVladimir Oltean                    reg = <0>;
1817f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1827f32974bSVladimir Oltean                    phy-handle = <&phy0>;
1837f32974bSVladimir Oltean                    managed = "in-band-status";
1847f32974bSVladimir Oltean                };
1857f32974bSVladimir Oltean
1867f32974bSVladimir Oltean                port@1 {
1877f32974bSVladimir Oltean                    reg = <1>;
1887f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1897f32974bSVladimir Oltean                    phy-handle = <&phy1>;
1907f32974bSVladimir Oltean                    managed = "in-band-status";
1917f32974bSVladimir Oltean                };
1927f32974bSVladimir Oltean
1937f32974bSVladimir Oltean                port@2 {
1947f32974bSVladimir Oltean                    reg = <2>;
1957f32974bSVladimir Oltean                    phy-mode = "qsgmii";
1967f32974bSVladimir Oltean                    phy-handle = <&phy2>;
1977f32974bSVladimir Oltean                    managed = "in-band-status";
1987f32974bSVladimir Oltean                };
1997f32974bSVladimir Oltean
2007f32974bSVladimir Oltean                port@3 {
2017f32974bSVladimir Oltean                    reg = <3>;
2027f32974bSVladimir Oltean                    phy-mode = "qsgmii";
2037f32974bSVladimir Oltean                    phy-handle = <&phy3>;
2047f32974bSVladimir Oltean                    managed = "in-band-status";
2057f32974bSVladimir Oltean                };
2067f32974bSVladimir Oltean
2077f32974bSVladimir Oltean                port@4 {
2087f32974bSVladimir Oltean                    reg = <4>;
2097f32974bSVladimir Oltean                    phy-mode = "qsgmii";
2107f32974bSVladimir Oltean                    phy-handle = <&phy4>;
2117f32974bSVladimir Oltean                    managed = "in-band-status";
2127f32974bSVladimir Oltean                };
2137f32974bSVladimir Oltean
2147f32974bSVladimir Oltean                port@5 {
2157f32974bSVladimir Oltean                    reg = <5>;
2167f32974bSVladimir Oltean                    phy-mode = "qsgmii";
2177f32974bSVladimir Oltean                    phy-handle = <&phy5>;
2187f32974bSVladimir Oltean                    managed = "in-band-status";
2197f32974bSVladimir Oltean                };
2207f32974bSVladimir Oltean
2217f32974bSVladimir Oltean                port@6 {
2227f32974bSVladimir Oltean                    reg = <6>;
2237f32974bSVladimir Oltean                    phy-mode = "qsgmii";
2247f32974bSVladimir Oltean                    phy-handle = <&phy6>;
2257f32974bSVladimir Oltean                    managed = "in-band-status";
2267f32974bSVladimir Oltean                };
2277f32974bSVladimir Oltean
2287f32974bSVladimir Oltean                port@7 {
2297f32974bSVladimir Oltean                    reg = <7>;
2307f32974bSVladimir Oltean                    phy-mode = "qsgmii";
2317f32974bSVladimir Oltean                    phy-handle = <&phy7>;
2327f32974bSVladimir Oltean                    managed = "in-band-status";
2337f32974bSVladimir Oltean                };
2347f32974bSVladimir Oltean
2357f32974bSVladimir Oltean                port@8 {
2367f32974bSVladimir Oltean                    reg = <8>;
2377f32974bSVladimir Oltean                    phy-mode = "internal";
2387f32974bSVladimir Oltean                    ethernet = <&enet0>;
2397f32974bSVladimir Oltean
2407f32974bSVladimir Oltean                    fixed-link {
2417f32974bSVladimir Oltean                        speed = <2500>;
2427f32974bSVladimir Oltean                        full-duplex;
2437f32974bSVladimir Oltean                        pause;
2447f32974bSVladimir Oltean                    };
2457f32974bSVladimir Oltean                };
2467f32974bSVladimir Oltean
2477f32974bSVladimir Oltean                port@9 {
2487f32974bSVladimir Oltean                    reg = <9>;
2497f32974bSVladimir Oltean                    phy-mode = "internal";
2507f32974bSVladimir Oltean                    ethernet = <&enet1>;
2517f32974bSVladimir Oltean
2527f32974bSVladimir Oltean                    fixed-link {
2537f32974bSVladimir Oltean                        speed = <2500>;
2547f32974bSVladimir Oltean                        full-duplex;
2557f32974bSVladimir Oltean                        pause;
2567f32974bSVladimir Oltean                    };
2577f32974bSVladimir Oltean                };
2587f32974bSVladimir Oltean            };
2597f32974bSVladimir Oltean        };
2607f32974bSVladimir Oltean    };
261