# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/dsa/dsa-port.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic DSA Switch Port

maintainers:
  - Andrew Lunn <andrew@lunn.ch>
  - Florian Fainelli <f.fainelli@gmail.com>
  - Vladimir Oltean <olteanv@gmail.com>

description:
  A DSA switch port is a component of a switch that manages one MAC, and can
  pass Ethernet frames. It can act as a stanadard Ethernet switch port, or have
  DSA-specific functionality.

$ref: /schemas/net/ethernet-switch-port.yaml#

properties:
  reg:
    items:
      - description: Port number

  label:
    description:
      Describes the label associated with this port, which will become
      the netdev name
    $ref: /schemas/types.yaml#/definitions/string

  link:
    description:
      Should be a list of phandles to other switch's DSA port. This
      port is used as the outgoing port towards the phandle ports. The
      full routing information must be given, not just the one hop
      routes to neighbouring switches
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
      maxItems: 1

  ethernet:
    description:
      Should be a phandle to a valid Ethernet device node.  This host
      device is what the switch port is connected to
    $ref: /schemas/types.yaml#/definitions/phandle

  dsa-tag-protocol:
    description:
      Instead of the default, the switch will use this tag protocol if
      possible. Useful when a device supports multiple protocols and
      the default is incompatible with the Ethernet device.
    enum:
      - dsa
      - edsa
      - ocelot
      - ocelot-8021q
      - rtl8_4
      - rtl8_4t
      - seville

# CPU and DSA ports must have phylink-compatible link descriptions
if:
  oneOf:
    - required: [ ethernet ]
    - required: [ link ]
then:
  allOf:
    - required:
        - phy-mode
    - oneOf:
        - required:
            - fixed-link
        - required:
            - phy-handle
        - required:
            - managed

additionalProperties: true

...
