202 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. 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.
 |