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。