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] 中定義。
fixed-link¶
“fixed-link”由 MAC 埠的一個僅包含資料的子節點描述,該子節點透過分層資料擴充套件(UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b,根據 [dsd-guide] “_DSD 實現指南”文件)連結到 _DSD 包中。該子節點應包含一個必需屬性(“speed”),並可能包含可選屬性——完整的引數列表及其值在 [ethernet-controller] 中指定。
以下 ASL 示例說明了這些屬性的用法。
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"}
}
})
}
帶有“fixed-link”子節點的 MAC 節點示例。¶
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}
}
})
}
參考¶
[phy] PHY 抽象層
- [dsd-properties-rules]
- [ethernet-controller]
Documentation/devicetree/bindings/net/ethernet-controller.yaml
- [dsd-guide] DSD 指南。
https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc,引用日期 2021-11-30。