| # SPDX-License-Identifier: GPL-2.0 |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/net/ethernet-controller.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Ethernet Controller Common Properties |
| |
| maintainers: |
| - David S. Miller <davem@davemloft.net> |
| |
| properties: |
| $nodename: |
| pattern: "^ethernet(@.*)?$" |
| |
| label: |
| description: Human readable label on a port of a box. |
| |
| max-speed: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| Specifies maximum speed in Mbit/s supported by the device. |
| |
| nvmem-cells: |
| maxItems: 1 |
| description: |
| Reference to an nvmem node for the MAC address |
| |
| nvmem-cell-names: |
| const: mac-address |
| |
| phy-connection-type: |
| description: |
| Specifies interface type between the Ethernet device and a physical |
| layer (PHY) device. |
| enum: |
| # There is not a standard bus between the MAC and the PHY, |
| # something proprietary is being used to embed the PHY in the |
| # MAC. |
| - internal |
| - mii |
| - mii-lite |
| - gmii |
| - sgmii |
| - psgmii |
| - qsgmii |
| - qusgmii |
| - tbi |
| - rev-mii |
| - rmii |
| - rev-rmii |
| - moca |
| |
| # RX and TX delays are provided by the PCB. See below |
| - rgmii |
| |
| # RX and TX delays are not provided by the PCB. This is the most |
| # frequent case. See below |
| - rgmii-id |
| |
| # TX delay is provided by the PCB. See below |
| - rgmii-rxid |
| |
| # RX delay is provided by the PCB. See below |
| - rgmii-txid |
| - rtbi |
| - smii |
| - xgmii |
| - trgmii |
| - 1000base-x |
| - 2500base-x |
| - 5gbase-r |
| - rxaui |
| - xaui |
| |
| # 10GBASE-KR, XFI, SFI |
| - 10gbase-kr |
| - usxgmii |
| - 10gbase-r |
| - 25gbase-r |
| - 10g-qxgmii |
| |
| phy-mode: |
| $ref: "#/properties/phy-connection-type" |
| |
| pcs-handle: |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| items: |
| maxItems: 1 |
| description: |
| Specifies a reference to a node representing a PCS PHY device on a MDIO |
| bus to link with an external PHY (phy-handle) if exists. |
| |
| pcs-handle-names: |
| description: |
| The name of each PCS in pcs-handle. |
| |
| phy-handle: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| Specifies a reference to a node representing a PHY device. |
| |
| phy: |
| $ref: "#/properties/phy-handle" |
| deprecated: true |
| |
| phy-device: |
| $ref: "#/properties/phy-handle" |
| deprecated: true |
| |
| ptp-timer: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| Specifies a reference to a node representing an IEEE 1588 PTP device. |
| |
| rx-fifo-depth: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| The size of the controller\'s receive fifo in bytes. This is used |
| for components that can have configurable receive fifo sizes, |
| and is useful for determining certain configuration settings |
| such as flow control thresholds. |
| |
| sfp: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| Specifies a reference to a node representing a SFP cage. |
| |
| tx-fifo-depth: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| The size of the controller\'s transmit fifo in bytes. This |
| is used for components that can have configurable fifo sizes. |
| |
| managed: |
| description: |
| Specifies the PHY management type. If auto is set and fixed-link |
| is not specified, it uses MDIO for management. |
| $ref: /schemas/types.yaml#/definitions/string |
| default: auto |
| enum: |
| - auto |
| - in-band-status |
| |
| fixed-link: |
| oneOf: |
| - $ref: /schemas/types.yaml#/definitions/uint32-array |
| deprecated: true |
| items: |
| - minimum: 0 |
| maximum: 31 |
| description: |
| Emulated PHY ID, choose any but unique to the all |
| specified fixed-links |
| |
| - enum: [0, 1] |
| description: |
| Duplex configuration. 0 for half duplex or 1 for |
| full duplex |
| |
| - enum: [10, 100, 1000, 2500, 10000] |
| description: |
| Link speed in Mbits/sec. |
| |
| - enum: [0, 1] |
| description: |
| Pause configuration. 0 for no pause, 1 for pause |
| |
| - enum: [0, 1] |
| description: |
| Asymmetric pause configuration. 0 for no asymmetric |
| pause, 1 for asymmetric pause |
| - type: object |
| additionalProperties: false |
| properties: |
| speed: |
| description: |
| Link speed. |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [10, 100, 1000, 2500, 5000, 10000] |
| |
| full-duplex: |
| $ref: /schemas/types.yaml#/definitions/flag |
| description: |
| Indicates that full-duplex is used. When absent, half |
| duplex is assumed. |
| |
| pause: |
| $ref: /schemas/types.yaml#/definitions/flag |
| description: |
| Indicates that pause should be enabled. |
| |
| asym-pause: |
| $ref: /schemas/types.yaml#/definitions/flag |
| description: |
| Indicates that asym_pause should be enabled. |
| |
| link-gpios: |
| maxItems: 1 |
| description: |
| GPIO to determine if the link is up |
| |
| required: |
| - speed |
| |
| leds: |
| description: |
| Describes the LEDs associated by Ethernet Controller. |
| These LEDs are not integrated in the PHY and PHY doesn't have any |
| control on them. Ethernet Controller regs are used to control |
| these defined LEDs. |
| |
| type: object |
| |
| properties: |
| '#address-cells': |
| const: 1 |
| |
| '#size-cells': |
| const: 0 |
| |
| patternProperties: |
| '^led@[a-f0-9]+$': |
| $ref: /schemas/leds/common.yaml# |
| |
| properties: |
| reg: |
| maxItems: 1 |
| description: |
| This defines the LED index in the PHY or the MAC. It's really |
| driver dependent and required for ports that define multiple |
| LED for the same port. |
| |
| required: |
| - reg |
| |
| unevaluatedProperties: false |
| |
| additionalProperties: false |
| |
| dependencies: |
| pcs-handle-names: [pcs-handle] |
| |
| allOf: |
| - $ref: /schemas/net/network-class.yaml# |
| - if: |
| properties: |
| phy-mode: |
| contains: |
| enum: |
| - rgmii |
| - rgmii-rxid |
| - rgmii-txid |
| - rgmii-id |
| then: |
| properties: |
| rx-internal-delay-ps: |
| description: |
| RGMII Receive Clock Delay defined in pico seconds. This is used for |
| controllers that have configurable RX internal delays. If this |
| property is present then the MAC applies the RX delay. |
| tx-internal-delay-ps: |
| description: |
| RGMII Transmit Clock Delay defined in pico seconds. This is used for |
| controllers that have configurable TX internal delays. If this |
| property is present then the MAC applies the TX delay. |
| |
| additionalProperties: true |
| |
| # Informative |
| # =========== |
| # |
| # 'phy-modes' & 'phy-connection-type' properties 'rgmii', 'rgmii-id', |
| # 'rgmii-rxid', and 'rgmii-txid' are frequently used wrongly by |
| # developers. This informative section clarifies their usage. |
| # |
| # The RGMII specification requires a 2ns delay between the data and |
| # clock signals on the RGMII bus. How this delay is implemented is not |
| # specified. |
| # |
| # One option is to make the clock traces on the PCB longer than the |
| # data traces. A sufficient difference in length can provide the 2ns |
| # delay. If both the RX and TX delays are implemented in this manner, |
| # 'rgmii' should be used, so indicating the PCB adds the delays. |
| # |
| # If the PCB does not add these delays via extra long traces, |
| # 'rgmii-id' should be used. Here, 'id' refers to 'internal delay', |
| # where either the MAC or PHY adds the delay. |
| # |
| # If only one of the two delays are implemented via extra long clock |
| # lines, either 'rgmii-rxid' or 'rgmii-txid' should be used, |
| # indicating the MAC or PHY should implement one of the delays |
| # internally, while the PCB implements the other delay. |
| # |
| # Device Tree describes hardware, and in this case, it describes the |
| # PCB between the MAC and the PHY, if the PCB implements delays or |
| # not. |
| # |
| # In practice, very few PCBs make use of extra long clock lines. Hence |
| # any RGMII phy mode other than 'rgmii-id' is probably wrong, and is |
| # unlikely to be accepted during review without details provided in |
| # the commit description and comments in the .dts file. |
| # |
| # When the PCB does not implement the delays, the MAC or PHY must. As |
| # such, this is software configuration, and so not described in Device |
| # Tree. |
| # |
| # The following describes how Linux implements the configuration of |
| # the MAC and PHY to add these delays when the PCB does not. As stated |
| # above, developers often get this wrong, and the aim of this section |
| # is reduce the frequency of these errors by Linux developers. Other |
| # users of the Device Tree may implement it differently, and still be |
| # consistent with both the normative and informative description |
| # above. |
| # |
| # By default in Linux, when using phylib/phylink, the MAC is expected |
| # to read the 'phy-mode' from Device Tree, not implement any delays, |
| # and pass the value to the PHY. The PHY will then implement delays as |
| # specified by the 'phy-mode'. The PHY should always be reconfigured |
| # to implement the needed delays, replacing any setting performed by |
| # strapping or the bootloader, etc. |
| # |
| # Experience to date is that all PHYs which implement RGMII also |
| # implement the ability to add or not add the needed delays. Hence |
| # this default is expected to work in all cases. Ignoring this default |
| # is likely to be questioned by Reviews, and require a strong argument |
| # to be accepted. |
| # |
| # There are a small number of cases where the MAC has hard coded |
| # delays which cannot be disabled. The 'phy-mode' only describes the |
| # PCB. The inability to disable the delays in the MAC does not change |
| # the meaning of 'phy-mode'. It does however mean that a 'phy-mode' of |
| # 'rgmii' is now invalid, it cannot be supported, since both the PCB |
| # and the MAC and PHY adding delays cannot result in a functional |
| # link. Thus the MAC should report a fatal error for any modes which |
| # cannot be supported. When the MAC implements the delay, it must |
| # ensure that the PHY does not also implement the same delay. So it |
| # must modify the phy-mode it passes to the PHY, removing the delay it |
| # has added. Failure to remove the delay will result in a |
| # non-functioning link. |
| # |
| # Sometimes there is a need to fine tune the delays. Often the MAC or |
| # PHY can perform this fine tuning. In the MAC node, the Device Tree |
| # properties 'rx-internal-delay-ps' and 'tx-internal-delay-ps' should |
| # be used to indicate fine tuning performed by the MAC. The values |
| # expected here are small. A value of 2000ps, i.e 2ns, and a phy-mode |
| # of 'rgmii' will not be accepted by Reviewers. |
| # |
| # If the PHY is to perform fine tuning, the properties |
| # 'rx-internal-delay-ps' and 'tx-internal-delay-ps' in the PHY node |
| # should be used. When the PHY is implementing delays, e.g. 'rgmii-id' |
| # these properties should have a value near to 2000ps. If the PCB is |
| # implementing delays, e.g. 'rgmii', a small value can be used to fine |
| # tune the delay added by the PCB. |
| ... |