forked from Minki/linux
dt-bindings: net: dsa: convert ocelot.txt to dt-schema
Replace the free-form description of device tree bindings for VSC9959 and VSC9953 with a YAML formatted dt-schema description. This contains more or less the same information, but reworded to be a bit more succint. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Maxim Kochetkov <fido_max@inbox.ru> Reviewed-by: Rob Herring <robh@kernel.org> Link: https://lore.kernel.org/r/20220913125806.524314-1-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
93ece9a6de
commit
7f32974bdc
260
Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
Normal file
260
Documentation/devicetree/bindings/net/dsa/mscc,ocelot.yaml
Normal file
@ -0,0 +1,260 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/net/dsa/mscc,ocelot.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Microchip Ocelot Switch Family Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Vladimir Oltean <vladimir.oltean@nxp.com>
|
||||
- Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||
- Alexandre Belloni <alexandre.belloni@bootlin.com>
|
||||
- UNGLinuxDriver@microchip.com
|
||||
|
||||
description: |
|
||||
There are multiple switches which are either part of the Ocelot-1 family, or
|
||||
derivatives of this architecture. These switches can be found embedded in
|
||||
various SoCs and accessed using MMIO, or as discrete chips and accessed over
|
||||
SPI or PCIe. The present DSA binding shall be used when the host controlling
|
||||
them performs packet I/O primarily through an Ethernet port of the switch
|
||||
(which is attached to an Ethernet port of the host), rather than through
|
||||
Frame DMA or register-based I/O.
|
||||
|
||||
VSC9953 (Seville):
|
||||
|
||||
This is found in the NXP T1040, where it is a memory-mapped platform
|
||||
device.
|
||||
|
||||
The following PHY interface types are supported:
|
||||
|
||||
- phy-mode = "internal": on ports 8 and 9
|
||||
- phy-mode = "sgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
|
||||
- phy-mode = "qsgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
|
||||
- phy-mode = "1000base-x": on ports 0, 1, 2, 3, 4, 5, 6, 7
|
||||
|
||||
VSC9959 (Felix):
|
||||
|
||||
This is found in the NXP LS1028A. It is a PCI device, part of the larger
|
||||
enetc root complex. As a result, the ethernet-switch node is a sub-node of
|
||||
the PCIe root complex node and its "reg" property conforms to the parent
|
||||
node bindings, describing it as PF 5 of device 0, bus 0.
|
||||
|
||||
If any external switch port is enabled, the enetc PF2 (enetc_port2) should
|
||||
be enabled as well. This is because the internal MDIO bus (exposed through
|
||||
EA BAR 0) used to access the MAC PCS registers truly belongs to the enetc
|
||||
port 2 and not to Felix.
|
||||
|
||||
The following PHY interface types are supported:
|
||||
|
||||
- phy-mode = "internal": on ports 4 and 5
|
||||
- phy-mode = "sgmii": on ports 0, 1, 2, 3
|
||||
- phy-mode = "qsgmii": on ports 0, 1, 2, 3
|
||||
- phy-mode = "usxgmii": on ports 0, 1, 2, 3
|
||||
- phy-mode = "1000base-x": on ports 0, 1, 2, 3
|
||||
- phy-mode = "2500base-x": on ports 0, 1, 2, 3
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- mscc,vsc9953-switch
|
||||
- pci1957,eef0
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
description:
|
||||
Used to signal availability of PTP TX timestamps, and state changes of
|
||||
the MAC merge layer of ports that support Frame Preemption.
|
||||
|
||||
little-endian: true
|
||||
big-endian: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
allOf:
|
||||
- $ref: dsa.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
const: pci1957,eef0
|
||||
then:
|
||||
required:
|
||||
- interrupts
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
# Felix VSC9959 (NXP LS1028A)
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
pcie { /* Integrated Endpoint Root Complex */
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
ethernet-switch@0,5 {
|
||||
compatible = "pci1957,eef0";
|
||||
reg = <0x000500 0 0 0 0>;
|
||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
ethernet-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy0>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy1>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy2>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy3>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
ethernet = <&enetc_port2>;
|
||||
phy-mode = "internal";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
ethernet = <&enetc_port3>;
|
||||
phy-mode = "internal";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
# Seville VSC9953 (NXP T1040)
|
||||
- |
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
ethernet-switch@800000 {
|
||||
compatible = "mscc,vsc9953-switch";
|
||||
reg = <0x800000 0x290000>;
|
||||
little-endian;
|
||||
|
||||
ethernet-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy0>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy1>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy2>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy3>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy4>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy5>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <6>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy6>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@7 {
|
||||
reg = <7>;
|
||||
phy-mode = "qsgmii";
|
||||
phy-handle = <&phy7>;
|
||||
managed = "in-band-status";
|
||||
};
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
phy-mode = "internal";
|
||||
ethernet = <&enet0>;
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
|
||||
port@9 {
|
||||
reg = <9>;
|
||||
phy-mode = "internal";
|
||||
ethernet = <&enet1>;
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,213 +0,0 @@
|
||||
Microchip Ocelot switch driver family
|
||||
=====================================
|
||||
|
||||
Felix
|
||||
-----
|
||||
|
||||
Currently the switches supported by the felix driver are:
|
||||
|
||||
- VSC9959 (Felix)
|
||||
- VSC9953 (Seville)
|
||||
|
||||
The VSC9959 switch is found in the NXP LS1028A. It is a PCI device, part of the
|
||||
larger ENETC root complex. As a result, the ethernet-switch node is a sub-node
|
||||
of the PCIe root complex node and its "reg" property conforms to the parent
|
||||
node bindings:
|
||||
|
||||
* reg: Specifies PCIe Device Number and Function Number of the endpoint device,
|
||||
in this case for the Ethernet L2Switch it is PF5 (of device 0, bus 0).
|
||||
|
||||
It does not require a "compatible" string.
|
||||
|
||||
The interrupt line is used to signal availability of PTP TX timestamps and for
|
||||
TSN frame preemption.
|
||||
|
||||
For the external switch ports, depending on board configuration, "phy-mode" and
|
||||
"phy-handle" are populated by board specific device tree instances. Ports 4 and
|
||||
5 are fixed as internal ports in the NXP LS1028A instantiation.
|
||||
|
||||
The CPU port property ("ethernet") configures the feature called "NPI port" in
|
||||
the Ocelot hardware core. The CPU port in Ocelot is a set of queues, which are
|
||||
connected, in the Node Processor Interface (NPI) mode, to an Ethernet port.
|
||||
By default, in fsl-ls1028a.dtsi, the NPI port is assigned to the internal
|
||||
2.5Gbps port@4, but can be moved to the 1Gbps port@5, depending on the specific
|
||||
use case. Moving the NPI port to an external switch port is hardware possible,
|
||||
but there is no platform support for the Linux system on the LS1028A chip to
|
||||
operate as an entire slave DSA chip. NPI functionality (and therefore DSA
|
||||
tagging) is supported on a single port at a time.
|
||||
|
||||
Any port can be disabled (and in fsl-ls1028a.dtsi, they are indeed all disabled
|
||||
by default, and should be enabled on a per-board basis). But if any external
|
||||
switch port is enabled at all, the ENETC PF2 (enetc_port2) should be enabled as
|
||||
well, regardless of whether it is configured as the DSA master or not. This is
|
||||
because the Felix PHYLINK implementation accesses the MAC PCS registers, which
|
||||
in hardware truly belong to the ENETC port #2 and not to Felix.
|
||||
|
||||
Supported PHY interface types (appropriate SerDes protocol setting changes are
|
||||
needed in the RCW binary):
|
||||
|
||||
* phy_mode = "internal": on ports 4 and 5
|
||||
* phy_mode = "sgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "qsgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "usxgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "2500base-x": on ports 0, 1, 2, 3
|
||||
|
||||
For the rest of the device tree binding definitions, which are standard DSA and
|
||||
PCI, refer to the following documents:
|
||||
|
||||
Documentation/devicetree/bindings/net/dsa/dsa.txt
|
||||
Documentation/devicetree/bindings/pci/pci.txt
|
||||
|
||||
Example:
|
||||
|
||||
&soc {
|
||||
pcie@1f0000000 { /* Integrated Endpoint Root Complex */
|
||||
ethernet-switch@0,5 {
|
||||
reg = <0x000500 0 0 0 0>;
|
||||
/* IEP INT_B */
|
||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* External ports */
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
label = "swp0";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "swp1";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "swp2";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
label = "swp3";
|
||||
};
|
||||
|
||||
/* Tagging CPU port */
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
ethernet = <&enetc_port2>;
|
||||
phy-mode = "internal";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
/* Non-tagging CPU port */
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
phy-mode = "internal";
|
||||
status = "disabled";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
The VSC9953 switch is found inside NXP T1040. It is a platform device with the
|
||||
following required properties:
|
||||
|
||||
- compatible:
|
||||
Must be "mscc,vsc9953-switch".
|
||||
|
||||
Supported PHY interface types (appropriate SerDes protocol setting changes are
|
||||
needed in the RCW binary):
|
||||
|
||||
* phy_mode = "internal": on ports 8 and 9
|
||||
* phy_mode = "sgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
|
||||
* phy_mode = "qsgmii": on ports 0, 1, 2, 3, 4, 5, 6, 7
|
||||
|
||||
Example:
|
||||
|
||||
&soc {
|
||||
ethernet-switch@800000 {
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x0>;
|
||||
compatible = "mscc,vsc9953-switch";
|
||||
little-endian;
|
||||
reg = <0x800000 0x290000>;
|
||||
|
||||
ports {
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0x0>;
|
||||
label = "swp0";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <0x1>;
|
||||
label = "swp1";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <0x2>;
|
||||
label = "swp2";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <0x3>;
|
||||
label = "swp3";
|
||||
};
|
||||
|
||||
port@4 {
|
||||
reg = <0x4>;
|
||||
label = "swp4";
|
||||
};
|
||||
|
||||
port@5 {
|
||||
reg = <0x5>;
|
||||
label = "swp5";
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <0x6>;
|
||||
label = "swp6";
|
||||
};
|
||||
|
||||
port@7 {
|
||||
reg = <0x7>;
|
||||
label = "swp7";
|
||||
};
|
||||
|
||||
port@8 {
|
||||
reg = <0x8>;
|
||||
phy-mode = "internal";
|
||||
ethernet = <&enet0>;
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
port@9 {
|
||||
reg = <0x9>;
|
||||
phy-mode = "internal";
|
||||
status = "disabled";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user