ACPI中的MDIO总线和PHY
使用 fwnode_mdiobus_register_phy() 探测和注册 MDIO 总线 [phy] 上的 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] 中定义。
fixed-link
“fixed-link”由 MAC 端口的纯数据子节点描述,该子节点通过分层数据扩展链接到 _DSD 包中(UUID dbb8e3e6-5886-4ba6-8795-1319f52a966b,符合 [dsd-guide]“_DSD 实施指南”文档)。子节点应包含必需属性(“speed”)以及可能的可选属性 - 完整的参数列表及其值在 [ethernet-controller] 中指定。
以下 ASL 示例说明了这些属性的用法。
MDIO 节点的 DSDT 条目
MDIO 总线有一个 SoC 组件(MDIO 控制器)和一个平台组件(MDIO 总线上的 PHY)。
a) Silicon组件,此节点描述 MDIO 控制器
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) Platform组件 PHY1 和 PHY2 节点代表连接到 MDIO 总线的 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 Abstraction Layer
- [dsd-properties-rules]
- [ethernet-controller]
-
Documentation/devicetree/bindings/net/ethernet-controller.yaml
- [dsd-guide] DSD Guide.
-
https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced 2021-11-30.
本文来自博客园,作者:闹闹爸爸,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/18724850
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)