[PATCH 13/21] dt-bindings: net: x-powers: add AC200/AC300 EPHY
James Hilliard
james.hilliard1 at gmail.com
Sun Aug 2 22:14:23 PDT 2026
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 <james.hilliard1 at gmail.com>
---
.../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 <james.hilliard1 at gmail.com>
+
+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 <dt-bindings/leds/common.h>
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethernet-phy at 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 at 0 {
+ reg = <0>;
+ color = <LED_COLOR_ID_GREEN>;
+ function = LED_FUNCTION_LAN;
+ active-low;
+ default-state = "keep";
+ };
+
+ led at 1 {
+ reg = <1>;
+ color = <LED_COLOR_ID_YELLOW>;
+ function = LED_FUNCTION_LAN;
+ function-enumerator = <1>;
+ active-low;
+ default-state = "keep";
+ };
+ };
+ };
+ };
+
+ - |
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethernet-phy at 0 {
+ compatible = "ethernet-phy-id0044.1400";
+ reg = <0>;
+ x-powers,ac200-control = <&ac200_ephy_ctl>;
+ };
+ };
+
+ - |
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethernet-phy at 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
More information about the linux-arm-kernel
mailing list