根据你提供的信息,以下是解决S32G3 GMAC0无法识别自定义PHY的分步指南:
确认MDIO总线绑定:
&gmac0 {
status = "okay";
phy-mode = "hsgmii"; // 确保模式与PHY类型匹配
mdio0: mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
phy1: ethernet-phy@1 {
reg = <1>;
compatible = "ethernet-phy-idXXXX.XXXX"; // 替换为PHY的实际ID
// 必要时添加PHY特有属性(复位、时钟等)
};
phy3: ethernet-phy@3 {
reg = <3>;
compatible = "ethernet-phy-idYYYY.YYYY";
};
};
};reg地址是否与硬件一致(0x1和0x3)。phy-mode需与PHY接口类型匹配(如HSGMII、RGMII等)。检查时钟和复位信号:
clocks = <&clk GMAC0_CLK>;
clock-names = "stmmaceth";
resets = <&reset GMAC0_RST>;确保时钟和复位控制器配置正确,无冲突。
ethernet-phy-idXXXX.XXXX(如drivers/net/phy/目录)。compatible = "ethernet-phy-id0134.0d04", "ethernet-phy-ieee802.3-c45";使用mdio-tool验证PHY访问:
mdio-tool -v /dev/mdio0 -- --phy=1 --reg=0 --read
mdio-tool -v /dev/mdio0 -- --phy=3 --reg=0 --read确保能正确读取PHY ID寄存器(0x2和0x3)。
检查MDIO总线频率:
mdio0: mdio {
max-frequency = <1000000>; // 调整至1MHz
};启用调试日志:
在drivers/net/ethernet/stmicro/stmmac/dwmac-s32cc.c中增加打印:
dev_dbg(priv->device, "Probing PHY at addr %dn", addr);重新编译内核,查看是否尝试探测PHY 1和3。
绕过PHY检测(临时测试):
// 在stmmac_platform.c中,注释掉PHY检测失败的条件
if (!phydev) {
//dev_err(dev, "No PHY foundn");
//return -ENODEV;
}强制GMAC使用指定PHY地址(仅测试用)。
测量MDIO/MDC波形:
验证PHY电源和复位:
reset-gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
reset-assert-us = <1000>;
reset-deassert-us = <20000>;或在驱动中添加phy_register_fixup_for_uid()处理。
dmesg | grep -E 'mdio|phy|gmac0'查找类似以下错误:
phy phy_mdio0.1: failed to connect to PHY
mdio_bus mdio0: MDIO device at address 1 is missing.此类信息提示驱动未能成功绑定PHY。
总结步骤:
reg和compatible。 若上述步骤仍无法解决,建议在设备树中明确指定PHY地址并捕获MDIO总线通信,对比正常与异常情况下的波形差异。
举报
更多回帖