U-boot下适配驱动模型的MAC驱动与非DM PHY驱动的链接问题
DM架构MAC驱动对接Legacy PHY驱动适配方案
前置场景说明
你的场景为U-Boot下使用驱动模型注册的TSEC MAC,对接使用phy_register()注册的非驱动模型KSZ804 PHY驱动,要实现MAC与PHY正常关联、支持mii/mdio工具访问寄存器,按以下步骤操作即可:
1. 保证MDIO总线正确注册
- DM模式的TSEC驱动在probe阶段必须完成MDIO控制器硬件初始化,正确实现MDIO总线的
mdio_read/mdio_write硬件操作回调,并将MDIO总线注册到U-Boot的MDIO子系统。 - 设备树配置必须匹配硬件:TSEC节点的
phy-handle、phy-mode属性正确指向KSZ804对应的PHY节点,PHY节点的reg属性与硬件上的PHY地址完全一致。
2. 完成MAC与PHY的绑定关联
非驱动模型的PHY驱动不需要走DM绑定流程,直接在TSEC驱动的初始化回调(通常为start回调)中调用Legacy PHY子系统接口完成关联:
- 调用
phy_connect()函数,传入已注册的MDIO总线实例、PHY地址、MAC设备指针、PHY接口模式(如PHY_INTERFACE_MODE_RMII),该函数会自动匹配已通过phy_register()注册的KSZ804驱动,完成PHY初始化与绑定。 - 将
phy_connect()返回的struct phy_device结构体指针保存在TSEC驱动的私有数据结构中,供后续寄存器读写调用。
3. 验证mii/mdio工具访问
只要MDIO总线注册成功、PHY绑定完成,U-Boot自带的mii/mdio工具即可直接访问PHY寄存器:
- 执行
mdio list命令可列出所有MDIO总线上扫描到的PHY设备,确认KSZ804的总线编号、PHY地址正确。 - 读寄存器:
mdio read <总线号> <PHY地址> <寄存器地址> - 写寄存器:
mdio write <总线号> <PHY地址> <寄存器地址> <写入值>
异常排查
- 扫描不到PHY时优先排查MDIO总线的读写回调实现,确认硬件访问逻辑无错。
- 确认KSZ804驱动已编译进U-Boot,且
phy_register()在启动阶段正常执行完成注册。 - 检查设备树中MDIO总线节点、PHY节点的属性配置与硬件匹配。
内容的提问来源于stack exchange,提问作者user3693586
相关产品推荐
相关产品推荐

