162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci========================= 462306a36Sopenharmony_ciMDIO bus and PHYs in ACPI 562306a36Sopenharmony_ci========================= 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciThe PHYs on an MDIO bus [phy] are probed and registered using 862306a36Sopenharmony_cifwnode_mdiobus_register_phy(). 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciLater, for connecting these PHYs to their respective MACs, the PHYs registered 1162306a36Sopenharmony_cion the MDIO bus have to be referenced. 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciThis document introduces two _DSD properties that are to be used 1462306a36Sopenharmony_cifor connecting PHYs on the MDIO bus [dsd-properties-rules] to the MAC layer. 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ciThese properties are defined in accordance with the "Device 1762306a36Sopenharmony_ciProperties UUID For _DSD" [dsd-guide] document and the 1862306a36Sopenharmony_cidaffd814-6eba-4d8c-8a91-bc9bbf4aa301 UUID must be used in the Device 1962306a36Sopenharmony_ciData Descriptors containing them. 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciphy-handle 2262306a36Sopenharmony_ci---------- 2362306a36Sopenharmony_ciFor each MAC node, a device property "phy-handle" is used to reference 2462306a36Sopenharmony_cithe PHY that is registered on an MDIO bus. This is mandatory for 2562306a36Sopenharmony_cinetwork interfaces that have PHYs connected to MAC via MDIO bus. 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciDuring the MDIO bus driver initialization, PHYs on this bus are probed 2862306a36Sopenharmony_ciusing the _ADR object as shown below and are registered on the MDIO bus. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci.. code-block:: none 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci Scope(\_SB.MDI0) 3362306a36Sopenharmony_ci { 3462306a36Sopenharmony_ci Device(PHY1) { 3562306a36Sopenharmony_ci Name (_ADR, 0x1) 3662306a36Sopenharmony_ci } // end of PHY1 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci Device(PHY2) { 3962306a36Sopenharmony_ci Name (_ADR, 0x2) 4062306a36Sopenharmony_ci } // end of PHY2 4162306a36Sopenharmony_ci } 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciLater, during the MAC driver initialization, the registered PHY devices 4462306a36Sopenharmony_cihave to be retrieved from the MDIO bus. For this, the MAC driver needs 4562306a36Sopenharmony_cireferences to the previously registered PHYs which are provided 4662306a36Sopenharmony_cias device object references (e.g. \_SB.MDI0.PHY1). 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciphy-mode 4962306a36Sopenharmony_ci-------- 5062306a36Sopenharmony_ciThe "phy-mode" _DSD property is used to describe the connection to 5162306a36Sopenharmony_cithe PHY. The valid values for "phy-mode" are defined in [ethernet-controller]. 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cimanaged 5462306a36Sopenharmony_ci------- 5562306a36Sopenharmony_ciOptional property, which specifies the PHY management type. 5662306a36Sopenharmony_ciThe valid values for "managed" are defined in [ethernet-controller]. 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cifixed-link 5962306a36Sopenharmony_ci---------- 6062306a36Sopenharmony_ciThe "fixed-link" is described by a data-only subnode of the 6162306a36Sopenharmony_ciMAC port, which is linked in the _DSD package via 6262306a36Sopenharmony_cihierarchical data extension (UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b 6362306a36Sopenharmony_ciin accordance with [dsd-guide] "_DSD Implementation Guide" document). 6462306a36Sopenharmony_ciThe subnode should comprise a required property ("speed") and 6562306a36Sopenharmony_cipossibly the optional ones - complete list of parameters and 6662306a36Sopenharmony_citheir values are specified in [ethernet-controller]. 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciThe following ASL example illustrates the usage of these properties. 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ciDSDT entry for MDIO node 7162306a36Sopenharmony_ci------------------------ 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ciThe MDIO bus has an SoC component (MDIO controller) and a platform 7462306a36Sopenharmony_cicomponent (PHYs on the MDIO bus). 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cia) Silicon Component 7762306a36Sopenharmony_ciThis node describes the MDIO controller, MDI0 7862306a36Sopenharmony_ci--------------------------------------------- 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci.. code-block:: none 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci Scope(_SB) 8362306a36Sopenharmony_ci { 8462306a36Sopenharmony_ci Device(MDI0) { 8562306a36Sopenharmony_ci Name(_HID, "NXP0006") 8662306a36Sopenharmony_ci Name(_CCA, 1) 8762306a36Sopenharmony_ci Name(_UID, 0) 8862306a36Sopenharmony_ci Name(_CRS, ResourceTemplate() { 8962306a36Sopenharmony_ci Memory32Fixed(ReadWrite, MDI0_BASE, MDI_LEN) 9062306a36Sopenharmony_ci Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) 9162306a36Sopenharmony_ci { 9262306a36Sopenharmony_ci MDI0_IT 9362306a36Sopenharmony_ci } 9462306a36Sopenharmony_ci }) // end of _CRS for MDI0 9562306a36Sopenharmony_ci } // end of MDI0 9662306a36Sopenharmony_ci } 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cib) Platform Component 9962306a36Sopenharmony_ciThe PHY1 and PHY2 nodes represent the PHYs connected to MDIO bus MDI0 10062306a36Sopenharmony_ci--------------------------------------------------------------------- 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci.. code-block:: none 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci Scope(\_SB.MDI0) 10562306a36Sopenharmony_ci { 10662306a36Sopenharmony_ci Device(PHY1) { 10762306a36Sopenharmony_ci Name (_ADR, 0x1) 10862306a36Sopenharmony_ci } // end of PHY1 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci Device(PHY2) { 11162306a36Sopenharmony_ci Name (_ADR, 0x2) 11262306a36Sopenharmony_ci } // end of PHY2 11362306a36Sopenharmony_ci } 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ciDSDT entries representing MAC nodes 11662306a36Sopenharmony_ci----------------------------------- 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ciBelow are the MAC nodes where PHY nodes are referenced. 11962306a36Sopenharmony_ciphy-mode and phy-handle are used as explained earlier. 12062306a36Sopenharmony_ci------------------------------------------------------ 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci.. code-block:: none 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci Scope(\_SB.MCE0.PR17) 12562306a36Sopenharmony_ci { 12662306a36Sopenharmony_ci Name (_DSD, Package () { 12762306a36Sopenharmony_ci ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 12862306a36Sopenharmony_ci Package () { 12962306a36Sopenharmony_ci Package (2) {"phy-mode", "rgmii-id"}, 13062306a36Sopenharmony_ci Package (2) {"phy-handle", \_SB.MDI0.PHY1} 13162306a36Sopenharmony_ci } 13262306a36Sopenharmony_ci }) 13362306a36Sopenharmony_ci } 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci Scope(\_SB.MCE0.PR18) 13662306a36Sopenharmony_ci { 13762306a36Sopenharmony_ci Name (_DSD, Package () { 13862306a36Sopenharmony_ci ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 13962306a36Sopenharmony_ci Package () { 14062306a36Sopenharmony_ci Package (2) {"phy-mode", "rgmii-id"}, 14162306a36Sopenharmony_ci Package (2) {"phy-handle", \_SB.MDI0.PHY2}} 14262306a36Sopenharmony_ci } 14362306a36Sopenharmony_ci }) 14462306a36Sopenharmony_ci } 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ciMAC node example where "managed" property is specified. 14762306a36Sopenharmony_ci------------------------------------------------------- 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci.. code-block:: none 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci Scope(\_SB.PP21.ETH0) 15262306a36Sopenharmony_ci { 15362306a36Sopenharmony_ci Name (_DSD, Package () { 15462306a36Sopenharmony_ci ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 15562306a36Sopenharmony_ci Package () { 15662306a36Sopenharmony_ci Package () {"phy-mode", "sgmii"}, 15762306a36Sopenharmony_ci Package () {"managed", "in-band-status"} 15862306a36Sopenharmony_ci } 15962306a36Sopenharmony_ci }) 16062306a36Sopenharmony_ci } 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ciMAC node example with a "fixed-link" subnode. 16362306a36Sopenharmony_ci--------------------------------------------- 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci.. code-block:: none 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci Scope(\_SB.PP21.ETH1) 16862306a36Sopenharmony_ci { 16962306a36Sopenharmony_ci Name (_DSD, Package () { 17062306a36Sopenharmony_ci ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 17162306a36Sopenharmony_ci Package () { 17262306a36Sopenharmony_ci Package () {"phy-mode", "sgmii"}, 17362306a36Sopenharmony_ci }, 17462306a36Sopenharmony_ci ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), 17562306a36Sopenharmony_ci Package () { 17662306a36Sopenharmony_ci Package () {"fixed-link", "LNK0"} 17762306a36Sopenharmony_ci } 17862306a36Sopenharmony_ci }) 17962306a36Sopenharmony_ci Name (LNK0, Package(){ // Data-only subnode of port 18062306a36Sopenharmony_ci ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), 18162306a36Sopenharmony_ci Package () { 18262306a36Sopenharmony_ci Package () {"speed", 1000}, 18362306a36Sopenharmony_ci Package () {"full-duplex", 1} 18462306a36Sopenharmony_ci } 18562306a36Sopenharmony_ci }) 18662306a36Sopenharmony_ci } 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ciReferences 18962306a36Sopenharmony_ci========== 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci[phy] Documentation/networking/phy.rst 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci[dsd-properties-rules] 19462306a36Sopenharmony_ci Documentation/firmware-guide/acpi/DSD-properties-rules.rst 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci[ethernet-controller] 19762306a36Sopenharmony_ci Documentation/devicetree/bindings/net/ethernet-controller.yaml 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci[dsd-guide] DSD Guide. 20062306a36Sopenharmony_ci https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced 20162306a36Sopenharmony_ci 2021-11-30. 202