1e71305acSCalvin Johnson.. SPDX-License-Identifier: GPL-2.0
2e71305acSCalvin Johnson
3e71305acSCalvin Johnson=========================
4e71305acSCalvin JohnsonMDIO bus and PHYs in ACPI
5e71305acSCalvin Johnson=========================
6e71305acSCalvin Johnson
7*59f3f982SSakari AilusThe PHYs on an MDIO bus [phy] are probed and registered using
8e71305acSCalvin Johnsonfwnode_mdiobus_register_phy().
9e71305acSCalvin Johnson
10e71305acSCalvin JohnsonLater, for connecting these PHYs to their respective MACs, the PHYs registered
11e71305acSCalvin Johnsonon the MDIO bus have to be referenced.
12e71305acSCalvin Johnson
13e71305acSCalvin JohnsonThis document introduces two _DSD properties that are to be used
14*59f3f982SSakari Ailusfor connecting PHYs on the MDIO bus [dsd-properties-rules] to the MAC layer.
15e71305acSCalvin Johnson
16e71305acSCalvin JohnsonThese properties are defined in accordance with the "Device
17*59f3f982SSakari AilusProperties UUID For _DSD" [dsd-guide] document and the
18e71305acSCalvin Johnsondaffd814-6eba-4d8c-8a91-bc9bbf4aa301 UUID must be used in the Device
19e71305acSCalvin JohnsonData Descriptors containing them.
20e71305acSCalvin Johnson
21e71305acSCalvin Johnsonphy-handle
22e71305acSCalvin Johnson----------
23e71305acSCalvin JohnsonFor each MAC node, a device property "phy-handle" is used to reference
24e71305acSCalvin Johnsonthe PHY that is registered on an MDIO bus. This is mandatory for
25e71305acSCalvin Johnsonnetwork interfaces that have PHYs connected to MAC via MDIO bus.
26e71305acSCalvin Johnson
27e71305acSCalvin JohnsonDuring the MDIO bus driver initialization, PHYs on this bus are probed
28e71305acSCalvin Johnsonusing the _ADR object as shown below and are registered on the MDIO bus.
29e71305acSCalvin Johnson
305a336f97SIoana Ciornei.. code-block:: none
315a336f97SIoana Ciornei
32e71305acSCalvin Johnson      Scope(\_SB.MDI0)
33e71305acSCalvin Johnson      {
34e71305acSCalvin Johnson        Device(PHY1) {
35e71305acSCalvin Johnson          Name (_ADR, 0x1)
36e71305acSCalvin Johnson        } // end of PHY1
37e71305acSCalvin Johnson
38e71305acSCalvin Johnson        Device(PHY2) {
39e71305acSCalvin Johnson          Name (_ADR, 0x2)
40e71305acSCalvin Johnson        } // end of PHY2
41e71305acSCalvin Johnson      }
42e71305acSCalvin Johnson
43e71305acSCalvin JohnsonLater, during the MAC driver initialization, the registered PHY devices
44e71305acSCalvin Johnsonhave to be retrieved from the MDIO bus. For this, the MAC driver needs
45e71305acSCalvin Johnsonreferences to the previously registered PHYs which are provided
46e71305acSCalvin Johnsonas device object references (e.g. \_SB.MDI0.PHY1).
47e71305acSCalvin Johnson
48e71305acSCalvin Johnsonphy-mode
49e71305acSCalvin Johnson--------
50e71305acSCalvin JohnsonThe "phy-mode" _DSD property is used to describe the connection to
51*59f3f982SSakari Ailusthe PHY. The valid values for "phy-mode" are defined in [ethernet-controller].
52e71305acSCalvin Johnson
537c4d7ca8SMarcin Wojtasmanaged
547c4d7ca8SMarcin Wojtas-------
557c4d7ca8SMarcin WojtasOptional property, which specifies the PHY management type.
56*59f3f982SSakari AilusThe valid values for "managed" are defined in [ethernet-controller].
577c4d7ca8SMarcin Wojtas
587c4d7ca8SMarcin Wojtasfixed-link
597c4d7ca8SMarcin Wojtas----------
607c4d7ca8SMarcin WojtasThe "fixed-link" is described by a data-only subnode of the
617c4d7ca8SMarcin WojtasMAC port, which is linked in the _DSD package via
627c4d7ca8SMarcin Wojtashierarchical data extension (UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b
63*59f3f982SSakari Ailusin accordance with [dsd-guide] "_DSD Implementation Guide" document).
647c4d7ca8SMarcin WojtasThe subnode should comprise a required property ("speed") and
657c4d7ca8SMarcin Wojtaspossibly the optional ones - complete list of parameters and
66*59f3f982SSakari Ailustheir values are specified in [ethernet-controller].
677c4d7ca8SMarcin Wojtas
68e71305acSCalvin JohnsonThe following ASL example illustrates the usage of these properties.
69e71305acSCalvin Johnson
70e71305acSCalvin JohnsonDSDT entry for MDIO node
71e71305acSCalvin Johnson------------------------
72e71305acSCalvin Johnson
73e71305acSCalvin JohnsonThe MDIO bus has an SoC component (MDIO controller) and a platform
74e71305acSCalvin Johnsoncomponent (PHYs on the MDIO bus).
75e71305acSCalvin Johnson
76e71305acSCalvin Johnsona) Silicon Component
77e71305acSCalvin JohnsonThis node describes the MDIO controller, MDI0
78e71305acSCalvin Johnson---------------------------------------------
795a336f97SIoana Ciornei
805a336f97SIoana Ciornei.. code-block:: none
815a336f97SIoana Ciornei
82e71305acSCalvin Johnson	Scope(_SB)
83e71305acSCalvin Johnson	{
84e71305acSCalvin Johnson	  Device(MDI0) {
85e71305acSCalvin Johnson	    Name(_HID, "NXP0006")
86e71305acSCalvin Johnson	    Name(_CCA, 1)
87e71305acSCalvin Johnson	    Name(_UID, 0)
88e71305acSCalvin Johnson	    Name(_CRS, ResourceTemplate() {
89e71305acSCalvin Johnson	      Memory32Fixed(ReadWrite, MDI0_BASE, MDI_LEN)
90e71305acSCalvin Johnson	      Interrupt(ResourceConsumer, Level, ActiveHigh, Shared)
91e71305acSCalvin Johnson	       {
92e71305acSCalvin Johnson		 MDI0_IT
93e71305acSCalvin Johnson	       }
94e71305acSCalvin Johnson	    }) // end of _CRS for MDI0
95e71305acSCalvin Johnson	  } // end of MDI0
96e71305acSCalvin Johnson	}
97e71305acSCalvin Johnson
98e71305acSCalvin Johnsonb) Platform Component
99e71305acSCalvin JohnsonThe PHY1 and PHY2 nodes represent the PHYs connected to MDIO bus MDI0
100e71305acSCalvin Johnson---------------------------------------------------------------------
1015a336f97SIoana Ciornei
1025a336f97SIoana Ciornei.. code-block:: none
1035a336f97SIoana Ciornei
104e71305acSCalvin Johnson	Scope(\_SB.MDI0)
105e71305acSCalvin Johnson	{
106e71305acSCalvin Johnson	  Device(PHY1) {
107e71305acSCalvin Johnson	    Name (_ADR, 0x1)
108e71305acSCalvin Johnson	  } // end of PHY1
109e71305acSCalvin Johnson
110e71305acSCalvin Johnson	  Device(PHY2) {
111e71305acSCalvin Johnson	    Name (_ADR, 0x2)
112e71305acSCalvin Johnson	  } // end of PHY2
113e71305acSCalvin Johnson	}
114e71305acSCalvin Johnson
115e71305acSCalvin JohnsonDSDT entries representing MAC nodes
116e71305acSCalvin Johnson-----------------------------------
117e71305acSCalvin Johnson
118e71305acSCalvin JohnsonBelow are the MAC nodes where PHY nodes are referenced.
119e71305acSCalvin Johnsonphy-mode and phy-handle are used as explained earlier.
120e71305acSCalvin Johnson------------------------------------------------------
1215a336f97SIoana Ciornei
1225a336f97SIoana Ciornei.. code-block:: none
1235a336f97SIoana Ciornei
124e71305acSCalvin Johnson	Scope(\_SB.MCE0.PR17)
125e71305acSCalvin Johnson	{
126e71305acSCalvin Johnson	  Name (_DSD, Package () {
127e71305acSCalvin Johnson	     ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
128e71305acSCalvin Johnson		 Package () {
129e71305acSCalvin Johnson		     Package (2) {"phy-mode", "rgmii-id"},
130e71305acSCalvin Johnson		     Package (2) {"phy-handle", \_SB.MDI0.PHY1}
131e71305acSCalvin Johnson	      }
132e71305acSCalvin Johnson	   })
133e71305acSCalvin Johnson	}
134e71305acSCalvin Johnson
135e71305acSCalvin Johnson	Scope(\_SB.MCE0.PR18)
136e71305acSCalvin Johnson	{
137e71305acSCalvin Johnson	  Name (_DSD, Package () {
138e71305acSCalvin Johnson	    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
139e71305acSCalvin Johnson		Package () {
140e71305acSCalvin Johnson		    Package (2) {"phy-mode", "rgmii-id"},
141e71305acSCalvin Johnson		    Package (2) {"phy-handle", \_SB.MDI0.PHY2}}
142e71305acSCalvin Johnson	    }
143e71305acSCalvin Johnson	  })
144e71305acSCalvin Johnson	}
145e71305acSCalvin Johnson
1467c4d7ca8SMarcin WojtasMAC node example where "managed" property is specified.
1477c4d7ca8SMarcin Wojtas-------------------------------------------------------
1487c4d7ca8SMarcin Wojtas
1497c4d7ca8SMarcin Wojtas.. code-block:: none
1507c4d7ca8SMarcin Wojtas
1517c4d7ca8SMarcin Wojtas	Scope(\_SB.PP21.ETH0)
1527c4d7ca8SMarcin Wojtas	{
1537c4d7ca8SMarcin Wojtas	  Name (_DSD, Package () {
1547c4d7ca8SMarcin Wojtas	     ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
1557c4d7ca8SMarcin Wojtas		 Package () {
1567c4d7ca8SMarcin Wojtas		     Package () {"phy-mode", "sgmii"},
1577c4d7ca8SMarcin Wojtas		     Package () {"managed", "in-band-status"}
1587c4d7ca8SMarcin Wojtas		 }
1597c4d7ca8SMarcin Wojtas	   })
1607c4d7ca8SMarcin Wojtas	}
1617c4d7ca8SMarcin Wojtas
1627c4d7ca8SMarcin WojtasMAC node example with a "fixed-link" subnode.
1637c4d7ca8SMarcin Wojtas---------------------------------------------
1647c4d7ca8SMarcin Wojtas
1657c4d7ca8SMarcin Wojtas.. code-block:: none
1667c4d7ca8SMarcin Wojtas
1677c4d7ca8SMarcin Wojtas	Scope(\_SB.PP21.ETH1)
1687c4d7ca8SMarcin Wojtas	{
1697c4d7ca8SMarcin Wojtas	  Name (_DSD, Package () {
1707c4d7ca8SMarcin Wojtas	    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
1717c4d7ca8SMarcin Wojtas		 Package () {
1727c4d7ca8SMarcin Wojtas		     Package () {"phy-mode", "sgmii"},
1737c4d7ca8SMarcin Wojtas		 },
1747c4d7ca8SMarcin Wojtas	    ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
1757c4d7ca8SMarcin Wojtas		 Package () {
1767c4d7ca8SMarcin Wojtas		     Package () {"fixed-link", "LNK0"}
1777c4d7ca8SMarcin Wojtas		 }
1787c4d7ca8SMarcin Wojtas	  })
1797c4d7ca8SMarcin Wojtas	  Name (LNK0, Package(){ // Data-only subnode of port
1807c4d7ca8SMarcin Wojtas	    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
1817c4d7ca8SMarcin Wojtas		 Package () {
1827c4d7ca8SMarcin Wojtas		     Package () {"speed", 1000},
1837c4d7ca8SMarcin Wojtas		     Package () {"full-duplex", 1}
1847c4d7ca8SMarcin Wojtas		 }
1857c4d7ca8SMarcin Wojtas	  })
1867c4d7ca8SMarcin Wojtas	}
1877c4d7ca8SMarcin Wojtas
188e71305acSCalvin JohnsonReferences
189e71305acSCalvin Johnson==========
190e71305acSCalvin Johnson
191*59f3f982SSakari Ailus[phy] Documentation/networking/phy.rst
192e71305acSCalvin Johnson
193*59f3f982SSakari Ailus[dsd-properties-rules]
194*59f3f982SSakari Ailus    Documentation/firmware-guide/acpi/DSD-properties-rules.rst
195e71305acSCalvin Johnson
196*59f3f982SSakari Ailus[ethernet-controller]
197*59f3f982SSakari Ailus    Documentation/devicetree/bindings/net/ethernet-controller.yaml
198e71305acSCalvin Johnson
199*59f3f982SSakari Ailus[dsd-guide] DSD Guide.
200*59f3f982SSakari Ailus    https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced
201*59f3f982SSakari Ailus    2021-11-30.
202