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