| .. SPDX-License-Identifier: GPL-2.0 |
| |
| ========================= |
| MDIO bus and PHYs in ACPI |
| ========================= |
| |
| The PHYs on an MDIO bus [phy] are probed and registered using |
| fwnode_mdiobus_register_phy(). |
| |
| Later, for connecting these PHYs to their respective MACs, the PHYs registered |
| on the MDIO bus have to be referenced. |
| |
| This document introduces two _DSD properties that are to be used |
| for connecting PHYs on the MDIO bus [dsd-properties-rules] to the MAC layer. |
| |
| These properties are defined in accordance with the "Device |
| Properties UUID For _DSD" [dsd-guide] document and the |
| daffd814-6eba-4d8c-8a91-bc9bbf4aa301 UUID must be used in the Device |
| Data Descriptors containing them. |
| |
| phy-handle |
| ---------- |
| For each MAC node, a device property "phy-handle" is used to reference |
| the PHY that is registered on an MDIO bus. This is mandatory for |
| network interfaces that have PHYs connected to MAC via MDIO bus. |
| |
| During the MDIO bus driver initialization, PHYs on this bus are probed |
| using the _ADR object as shown below and are registered on the MDIO bus. |
| |
| .. code-block:: none |
| |
| Scope(\_SB.MDI0) |
| { |
| Device(PHY1) { |
| Name (_ADR, 0x1) |
| } // end of PHY1 |
| |
| Device(PHY2) { |
| Name (_ADR, 0x2) |
| } // end of PHY2 |
| } |
| |
| Later, during the MAC driver initialization, the registered PHY devices |
| have to be retrieved from the MDIO bus. For this, the MAC driver needs |
| references to the previously registered PHYs which are provided |
| as device object references (e.g. \_SB.MDI0.PHY1). |
| |
| phy-mode |
| -------- |
| The "phy-mode" _DSD property is used to describe the connection to |
| the PHY. The valid values for "phy-mode" are defined in [ethernet-controller]. |
| |
| managed |
| ------- |
| Optional property, which specifies the PHY management type. |
| The valid values for "managed" are defined in [ethernet-controller]. |
| |
| fixed-link |
| ---------- |
| The "fixed-link" is described by a data-only subnode of the |
| MAC port, which is linked in the _DSD package via |
| hierarchical data extension (UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b |
| in accordance with [dsd-guide] "_DSD Implementation Guide" document). |
| The subnode should comprise a required property ("speed") and |
| possibly the optional ones - complete list of parameters and |
| their values are specified in [ethernet-controller]. |
| |
| The following ASL example illustrates the usage of these properties. |
| |
| DSDT entry for MDIO node |
| ------------------------ |
| |
| The MDIO bus has an SoC component (MDIO controller) and a platform |
| component (PHYs on the MDIO bus). |
| |
| a) Silicon Component |
| This node describes the MDIO controller, MDI0 |
| --------------------------------------------- |
| |
| .. code-block:: none |
| |
| Scope(_SB) |
| { |
| Device(MDI0) { |
| Name(_HID, "NXP0006") |
| Name(_CCA, 1) |
| Name(_UID, 0) |
| Name(_CRS, ResourceTemplate() { |
| Memory32Fixed(ReadWrite, MDI0_BASE, MDI_LEN) |
| Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) |
| { |
| MDI0_IT |
| } |
| }) // end of _CRS for MDI0 |
| } // end of MDI0 |
| } |
| |
| b) Platform Component |
| The PHY1 and PHY2 nodes represent the PHYs connected to MDIO bus MDI0 |
| --------------------------------------------------------------------- |
| |
| .. code-block:: none |
| |
| Scope(\_SB.MDI0) |
| { |
| Device(PHY1) { |
| Name (_ADR, 0x1) |
| } // end of PHY1 |
| |
| Device(PHY2) { |
| Name (_ADR, 0x2) |
| } // end of PHY2 |
| } |
| |
| DSDT entries representing MAC nodes |
| ----------------------------------- |
| |
| Below are the MAC nodes where PHY nodes are referenced. |
| phy-mode and phy-handle are used as explained earlier. |
| ------------------------------------------------------ |
| |
| .. code-block:: none |
| |
| Scope(\_SB.MCE0.PR17) |
| { |
| Name (_DSD, Package () { |
| ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), |
| Package () { |
| Package (2) {"phy-mode", "rgmii-id"}, |
| Package (2) {"phy-handle", \_SB.MDI0.PHY1} |
| } |
| }) |
| } |
| |
| Scope(\_SB.MCE0.PR18) |
| { |
| Name (_DSD, Package () { |
| ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), |
| Package () { |
| Package (2) {"phy-mode", "rgmii-id"}, |
| Package (2) {"phy-handle", \_SB.MDI0.PHY2}} |
| } |
| }) |
| } |
| |
| MAC node example where "managed" property is specified. |
| ------------------------------------------------------- |
| |
| .. code-block:: none |
| |
| Scope(\_SB.PP21.ETH0) |
| { |
| Name (_DSD, Package () { |
| ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), |
| Package () { |
| Package () {"phy-mode", "sgmii"}, |
| Package () {"managed", "in-band-status"} |
| } |
| }) |
| } |
| |
| MAC node example with a "fixed-link" subnode. |
| --------------------------------------------- |
| |
| .. code-block:: none |
| |
| Scope(\_SB.PP21.ETH1) |
| { |
| Name (_DSD, Package () { |
| ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), |
| Package () { |
| Package () {"phy-mode", "sgmii"}, |
| }, |
| ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), |
| Package () { |
| Package () {"fixed-link", "LNK0"} |
| } |
| }) |
| Name (LNK0, Package(){ // Data-only subnode of port |
| ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), |
| Package () { |
| Package () {"speed", 1000}, |
| Package () {"full-duplex", 1} |
| } |
| }) |
| } |
| |
| References |
| ========== |
| |
| [phy] Documentation/networking/phy.rst |
| |
| [dsd-properties-rules] |
| Documentation/firmware-guide/acpi/DSD-properties-rules.rst |
| |
| [ethernet-controller] |
| Documentation/devicetree/bindings/net/ethernet-controller.yaml |
| |
| [dsd-guide] DSD Guide. |
| https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced |
| 2021-11-30. |