Appearance
DesignWare 网卡共用 MDIO 设备树配置
DW 网卡设备树支持配置 MAC 地址、MTU、中断、时钟、MDIO 总线、PHY 地址和 phy-handle 等属性。部分板卡上多个 GMAC 控制器会共用同一条 MDIO 总线,此时需要将所有 PHY 统一挂载到提供 MDIO 的网卡节点下,并让其他网卡通过 phy-handle 引用对应 PHY。
本文以 gmac0 提供 MDIO 总线,gmac0 与 gmac1 共用该 MDIO 总线为例说明配置方法。
配置前确认
配置共用 MDIO 前,需要先确认:
- 哪个网卡节点负责提供 MDIO 总线,例如
gmac0; - 每个 PHY 在 MDIO 总线上的地址,例如
gmac0的 PHY 地址为6,gmac1的 PHY 地址为2; - 设备树节点顺序是否满足加载要求:提供 MDIO 总线的网卡应先创建。
原始设备树示例
以下示例中,gmac0 与 gmac1 尚未配置 phy-handle 和 MDIO 子节点:
text
gmac1: ethernet@e0049000 {
compatible = "fmsh,fmql-gmac", "snps,dwmac-3.70a", "snps,dwmac";
reg = <0x0 0xe0049000 0x0 0x2000>;
reg-names = "stmmaceth";
phy-mode = "rgmii-id";
fmsh,gmac-number = <1>;
snps,force_sf_dma_mode = <1>;
snps,multicast-filter-bins = <1>;
snps,perfect-filter-entries = <1>;
status = "okay";
};
gmac0: ethernet@e0047000 {
compatible = "fmsh,fmql-gmac", "snps,dwmac-3.70a", "snps,dwmac";
reg = <0x0 0xe0047000 0x0 0x2000>;
reg-names = "stmmaceth";
phy-mode = "rgmii-id";
fmsh,gmac-number = <0>;
snps,force_sf_dma_mode = <1>;
snps,multicast-filter-bins = <1>;
snps,perfect-filter-entries = <1>;
status = "okay";
};共用 MDIO 配置示例
目标配置:
gmac0的 PHY 地址为6;gmac1的 PHY 地址为2;gmac0和gmac1共用gmac0的 MDIO 总线。
text
gmac0: ethernet@e0047000 {
compatible = "fmsh,fmql-gmac", "snps,dwmac-3.70a", "snps,dwmac";
reg = <0x0 0xe0047000 0x0 0x2000>;
reg-names = "stmmaceth";
phy-mode = "rgmii-id";
phy-handle = <&phy0>;
fmsh,gmac-number = <0>;
snps,force_sf_dma_mode = <1>;
snps,multicast-filter-bins = <1>;
snps,perfect-filter-entries = <1>;
status = "okay";
mdio: mdio@0 {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
phy0: eth-phy@6 {
reg = <6>;
};
phy1: eth-phy@2 {
reg = <2>;
};
};
};
gmac1: ethernet@e0049000 {
compatible = "fmsh,fmql-gmac", "snps,dwmac-3.70a", "snps,dwmac";
reg = <0x0 0xe0049000 0x0 0x2000>;
reg-names = "stmmaceth";
phy-mode = "rgmii-id";
phy-handle = <&phy1>;
fmsh,gmac-number = <1>;
snps,force_sf_dma_mode = <1>;
snps,multicast-filter-bins = <1>;
snps,perfect-filter-entries = <1>;
status = "okay";
};配置说明
mdio子节点用于描述当前网卡提供的 MDIO 总线。phy0、phy1等子节点描述挂载在该 MDIO 总线上的 PHY 设备。reg表示 PHY 在 MDIO 总线上的地址。phy-handle用于指定当前网卡绑定的 PHY 节点。- 共用 MDIO 时,非 MDIO 提供者节点不再单独创建 MDIO 子节点,只通过
phy-handle引用共享总线上的 PHY。
注意事项
使用 MDIO 复用时,必须先加载提供 MDIO 总线的网卡,再加载复用该总线的网卡。通常可通过调整设备树中 gmac0、gmac1 的定义顺序来影响创建顺序。
例如上面的配置中,gmac0 提供 MDIO 总线,因此建议 gmac0 节点位于 gmac1 节点之前。如果改为复用 gmac1 的 MDIO 总线,则应相应调整节点顺序,并将 MDIO 子节点放到 gmac1 下。