ACPI 中的 MDIO 总线和 PHY

MDIO 总线 [phy] 上的 PHY 使用 fwnode_mdiobus_register_phy() 进行探测和注册。

之后,为了将这些 PHY 连接到各自的 MAC,必须引用在 MDIO 总线上注册的 PHY。

本文档介绍了两个 _DSD 属性,用于将 MDIO 总线 [dsd-properties-rules] 上的 PHY 连接到 MAC 层。

这些属性是根据“_DSD 设备属性 UUID”[dsd-guide] 文档定义的,并且在包含它们的设备数据描述符中必须使用 daffd814-6eba-4d8c-8a91-bc9bbf4aa301 UUID。

phy-handle

对于每个 MAC 节点,使用设备属性“phy-handle”来引用在 MDIO 总线上注册的 PHY。对于通过 MDIO 总线将 PHY 连接到 MAC 的网络接口,这是强制性的。

在 MDIO 总线驱动程序初始化期间,将使用如下所示的 _ADR 对象探测此总线上的 PHY,并在 MDIO 总线上注册。

Scope(\_SB.MDI0)
{
  Device(PHY1) {
    Name (_ADR, 0x1)
  } // end of PHY1

  Device(PHY2) {
    Name (_ADR, 0x2)
  } // end of PHY2
}

之后,在 MAC 驱动程序初始化期间,必须从 MDIO 总线检索已注册的 PHY 设备。为此,MAC 驱动程序需要引用先前注册的 PHY,这些 PHY 作为设备对象引用提供(例如 _SB.MDI0.PHY1)。

phy-mode

“phy-mode” _DSD 属性用于描述与 PHY 的连接。“phy-mode”的有效值在 [ethernet-controller] 中定义。

managed

可选属性,指定 PHY 管理类型。“managed”的有效值在 [ethernet-controller] 中定义。

MDIO 节点的 DSDT 条目

MDIO 总线具有 SoC 组件(MDIO 控制器)和平台组件(MDIO 总线上的 PHY)。

a) 硅组件此节点描述 MDIO 控制器,MDI0 ---------------------------------------------

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) 平台组件 PHY1 和 PHY2 节点表示连接到 MDIO 总线 MDI0 的 PHY ---------------------------------------------------------------------

Scope(\_SB.MDI0)
{
  Device(PHY1) {
    Name (_ADR, 0x1)
  } // end of PHY1

  Device(PHY2) {
    Name (_ADR, 0x2)
  } // end of PHY2
}

表示 MAC 节点的 DSDT 条目

以下是引用 PHY 节点的 MAC 节点。phy-mode 和 phy-handle 的用法如前所述。------------------------------------------------------

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}}
    }
  })
}

指定了“managed”属性的 MAC 节点示例。

Scope(\_SB.PP21.ETH0)
{
  Name (_DSD, Package () {
     ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
         Package () {
             Package () {"phy-mode", "sgmii"},
             Package () {"managed", "in-band-status"}
         }
   })
}