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 匯流排驅動程式初始化期間,該總線上的 PHY 使用如下所示的 _ADR 物件進行探測,並在 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,這些引用以裝置物件引用的形式提供(例如 _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"}
         }
   })
}