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