AC200 and AC300 companion ICs contain compatible Fast Ethernet link-PHY implementations which report the same PHY ID but use different control interfaces. Describe the forced-ID link PHY and its control-device references. Fixed systems reference one already enabled control interface. A fixed AC300 system may optionally provide the configuration field for its calibration-range bit; omitting it selects the normal range. Systems which can contain either companion reference both candidates and require a logical two-bit NVMEM field for variant selection and AC300 calibration- range tuning. The link node reg value is programmed through the AC200 control interface, while AC300 requires it to match the package-strapped address. A control reference is required to distinguish this integration from other PHYs which report the same ID. Also describe the optional xMII receive-clock inversion required by some integrations. Describe the three fixed-function package LED outputs using standard PHY LED children. Their functions are link/activity, 100 Mbps speed and duplex, and their polarity is shared. Omitting the container retains the vendor fallback with all outputs active-low; an explicit container enables only the outputs it describes and may select the shared polarity. Allow a PHY with a routed interrupt to be marked as a wakeup source for magic-packet and link-change Wake-on-LAN. Signed-off-by: James Hilliard --- .../bindings/net/x-powers,acx00-ephy.yaml | 217 +++++++++++++++++++++ 1 file changed, 217 insertions(+) diff --git a/Documentation/devicetree/bindings/net/x-powers,acx00-ephy.yaml b/Documentation/devicetree/bindings/net/x-powers,acx00-ephy.yaml new file mode 100644 index 000000000000..3e01f6b44006 --- /dev/null +++ b/Documentation/devicetree/bindings/net/x-powers,acx00-ephy.yaml @@ -0,0 +1,217 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/x-powers,acx00-ephy.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: X-Powers AC200 and AC300 Ethernet PHY + +maintainers: + - James Hilliard + +description: + The AC200 and AC300 contain compatible Fast Ethernet link-PHY + implementations which report the same PHY ID, but use different control + interfaces. Systems with a fixed companion IC describe one control + interface, which must already be enabled. A fixed AC300 system may provide + an NVMEM configuration field to select its calibration range; omitting the + field selects the normal range. Systems that can contain either companion IC + describe both control interfaces and require the field to select the + matching one before the PHY identification registers are accessible. In + that dual-control topology, the AC200 I2C controller and AC300 control + device may use status "fail-needs-probe" so the selected one can be enabled + dynamically. The PHY node's reg value is programmed through the AC200 + control interface. For AC300, it must match the address selected by the + package straps. + +select: + properties: + compatible: + contains: + const: ethernet-phy-id0044.1400 + required: + - compatible + anyOf: + - required: + - x-powers,ac200-control + - required: + - x-powers,ac300-control + +properties: + compatible: + const: ethernet-phy-id0044.1400 + + nvmem-cells: + maxItems: 1 + description: + Logical SoC SID field whose bit 0 selects the AC300 control interface in + a dual-control topology and whose bit 1 selects its low-calibration + tuning sequence. + + nvmem-cell-names: + description: + In a dual-control topology the configuration field uses bit 0 to select + AC200 (zero) or AC300 (one). Bit 1 selects the AC300 vendor sequence for + a low-level calibration value in both dual and fixed AC300 topologies. + const: configuration + + x-powers,ac200-control: + $ref: /schemas/types.yaml#/definitions/phandle + description: Reference to the AC200 Ethernet PHY control function + + x-powers,ac300-control: + $ref: /schemas/types.yaml#/definitions/phandle + description: Reference to the AC300 MDIO Ethernet PHY control device + + x-powers,xmii-rx-clock-inverted: + type: boolean + description: + Invert the xMII receive clock inside the PHY. This is required by some + SoC integrations, including the Allwinner H6 AC200 connection. + + wakeup-source: + $ref: /schemas/types.yaml#/definitions/flag + description: + Indicates that the PHY interrupt is routed to a wake-capable interrupt + controller and may be used for magic-packet or link-change Wake-on-LAN. + + leds: + type: object + description: | + Package LED outputs. Output 0 indicates link and flashes for transmit or + receive activity, output 1 indicates a 100 Mbps link, and output 2 + indicates full duplex and flashes on a half-duplex collision. The + polarity setting is shared by all outputs, so active-high or active-low + declarations on different children must agree. Without an leds + container, all three outputs are enabled active-low to match the vendor + initialization. An explicit container replaces that fallback: only + outputs described by available child nodes are enabled, with active-low + used when no child specifies a polarity. + + properties: + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + patternProperties: + '^led@[0-2]$': + type: object + $ref: /schemas/leds/common.yaml# + + properties: + reg: + enum: [0, 1, 2] + + inactive-high-impedance: false + + required: + - reg + + unevaluatedProperties: false + + additionalProperties: false + +required: + - compatible + +oneOf: + - properties: + nvmem-cells: false + nvmem-cell-names: false + x-powers,ac300-control: false + required: + - x-powers,ac200-control + - properties: + x-powers,ac200-control: false + required: + - x-powers,ac300-control + - required: + - nvmem-cells + - nvmem-cell-names + - x-powers,ac200-control + - x-powers,ac300-control + +dependentRequired: + nvmem-cells: [ nvmem-cell-names ] + nvmem-cell-names: [ nvmem-cells ] + +allOf: + - $ref: ethernet-phy.yaml# + - if: + required: + - x-powers,ac300-control + then: + properties: + reg: + maximum: 7 + +unevaluatedProperties: false + +examples: + - | + #include + + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethernet-phy@0 { + compatible = "ethernet-phy-id0044.1400"; + reg = <0>; + nvmem-cells = <&ephy_config>; + nvmem-cell-names = "configuration"; + x-powers,ac300-control = <&ac300_ephy_ctl>; + + leds { + #address-cells = <1>; + #size-cells = <0>; + + led@0 { + reg = <0>; + color = ; + function = LED_FUNCTION_LAN; + active-low; + default-state = "keep"; + }; + + led@1 { + reg = <1>; + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <1>; + active-low; + default-state = "keep"; + }; + }; + }; + }; + + - | + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethernet-phy@0 { + compatible = "ethernet-phy-id0044.1400"; + reg = <0>; + x-powers,ac200-control = <&ac200_ephy_ctl>; + }; + }; + + - | + mdio { + #address-cells = <1>; + #size-cells = <0>; + + ethernet-phy@0 { + compatible = "ethernet-phy-id0044.1400"; + reg = <0>; + nvmem-cells = <&ephy_config>; + nvmem-cell-names = "configuration"; + x-powers,ac200-control = <&ac200_ephy_ctl>; + x-powers,ac300-control = <&ac300_ephy_ctl>; + }; + }; +... -- 2.53.0