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]

_DSD Device Properties Usage 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.

posted @   闹闹爸爸  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示