8531网卡100M以及10M不通

问题描述

由于8521缺料必须使用8531的网卡
但8531在1000M能连通,在100M和10M下不能连通

重现步骤

连接到主机ping IP以及看BMC网页,从主机的网卡驱动设置里改速率100M和10M均不能PING通BMC网口

并且在设置为1000M时,ethtool 读出来的速率是10M

尝试过的解决方案

参考 搭配yt8531s phy ipmi管理网口速率为10M - 交流互助区 - openUBMC 论坛该贴,现象是一样的,想知道在不能换料的情况下,有没有解决方法

答案内容由AI生成,仅供参考:

:white_check_mark: 总结与建议

建议项 内容
根本原因 鲲鹏平台 BMC 固件未适配 YT8531 PHY,导致链路协商失败,速率锁定在10M
最优解 更换为 YT8521,已验证有效
替代方案 升级 BMC 固件或手动修改设备树 phy_addr 并修复驱动支持
应急手段 强制设置 1000M full duplex,关闭自协商(需两端配合)
风险提示 手动修改设备树或驱动有风险,建议在可调试环境下操作
点击此处查看详细分析解答

关于YT8531 PHY在10M/100M速率下无法通信的问题分析与建议

根据您提供的问题描述,设备使用 YT8531 PHY 时,在 10M/100M 模式下无法通信,而在 1000M 模式下可以连通。但即使设置为1000M,ethtool eth2 显示的实际速度仍为 10Mbit/s,且链路未建立(Link detected: no)。此现象已在 openUBMC 社区中被多次报告。


:magnifying_glass_tilted_left: 问题核心总结

项目 状态
PHY型号 YT8531S
期望行为 支持 10M/100M/1000M 自动协商,正常通信
实际行为 - 在10M/100M模式下完全不通
- 设置1000M后,ethtool 显示速率仅为10M,链路未建立
关键线索 ethtool 显示 Speed: 10Mb/s, PHYAD: 0

:books: 根因分析(基于知识库)

1. YT8531 PHY 可能未被鲲鹏固件适配

从知识库中的文档(参考ID 1)可明确得出:

“更换YT8521 PHY后,问题解决,可能是鲲鹏固件里没有包含YT8531的phy id。”

这表明:

  • 当前固件(如OpenUBMC2512或IBMC出厂版本)对YT8531的PHY ID支持不完整或缺失
  • 固件无法正确初始化或识别YT8531,导致:
    • 自动协商失败
    • 默认降级至 10M半双工模式
    • 链路无法稳定建立(Link detected: no)

2. MDIO 地址配置异常

从命令输出:

# od -x /sys/firmware/devicetree/base/soc/gmac@cd000000/phy_addr
0000000 03ff ffff

该值本应指示 PHY 的 MDIO 地址(PHYAD),但 03ff ffff 是一个无效或未初始化的标志值,说明:

  • 设备树(Device Tree)未正确配置 YT8531 的物理地址
  • 或驱动无法通过 MDIO 总线读取 PHY 寄存器(返回全 0xffff

此项与论坛中其他用户反馈的一致:“读取phy芯片信息,返回的结果全ffff” —— 这是典型的通信失败表现

3. 自动协商虽启用,但物理层未完成协商

现象:

  • Auto-negotiation: on
  • Supported link modes 包含10/100/1000M
  • 但最终 Speed: 10M, Duplex: Half, Link detected: no

说明:

  • 上层协议栈开启了自协商
  • 但 SGMII 层或 PHY 实际未完成协商过程
  • 存在“SGMII Auto-Negotiation Not Complete”警告的可能性较高

相关实体和事件表明,gmac_hw_set_port_mode_all 执行过程中可能发生 SGMII 协商失败。


:white_check_mark: 已知解决方案回顾

:check_mark: 成功路径:更换为 YT8521 PHY

多份资料显示:

  • 更换为 YT8521 后,ethtool eth2 正常显示:
    Speed: 1000Mb/s
    Duplex: Full
    Link detected: yes
    PHYAD: 3
    
  • 表明 YT8521 被鲲鹏平台固件原生支持

原因推测:YT8521 的 PHY ID 已加入 BMC 固件的驱动白名单,而 YT8531 未包含在内。


:warning: 当前限制:无法换料(必须使用 YT8531)

在不能更换硬件的情况下,可尝试以下方法绕过限制。


:hammer_and_wrench: 可行性解决方案建议

:white_check_mark: 方案一:更新 BMC 固件以支持 YT8531

操作建议:

  • 确认当前使用的 BMC 版本是否为最新(如 OpenUBMC > 2603 或更高)
  • 尝试升级至已知 包含 YT8531 支持的 BMC 固件版本
    • 某些后期版本可能已添加对该 PHY 的适配
  • 检查内核日志是否有如下错误:
    dmesg | grep -i "phy"
    dmesg | grep -i "gmac"
    
    查看是否出现:
    • PHY ID missing
    • Unknown PHY ID
    • Failed to attach PHY

若社区或厂商已发布补丁支持 YT8531,则升级是首选方案。


:white_check_mark: 方案二:手动配置设备树中的 phy_addr 参数

当前 phy_addr 为无效值 03ff ffff,需手动修改设备树(Device Tree),指定正确的 MDIO 地址。

步骤如下:

  1. 查询 YT8531 硬件设计上的 MDIO 地址(通常由硬件拉高/拉低决定)
    • 常见地址为 0x0、0x1、0x3、0x7
  2. 修改设备树节点 /soc/gmac@cd000000/phy_addr 的值
    phy_addr = <0>;
    
    或尝试常见值如 <3>
  3. 重新打包 dtb 并刷新 BMC 系统
  4. 重启后执行:
    ethtool -r eth2      # 重启协商
    ethtool eth2         # 查看是否恢复正常
    bmcdfx mdio read reg 0 0x0 0x2  # 测试能否读取 PHY 寄存器
    

注意:错误操作可能导致 BMC 无法启动,请在有串口调试能力下进行。


:white_check_mark: 方案三:强制设置速率与双工模式(临时绕过自协商)

若仅需在特定场景下支持 1000M 工作,可关闭自动协商,强制设定为 1000M 全双工

命令示例:

# 关闭自协商,强制速率
ethtool -s eth2 speed 1000 duplex full autoneg off

# 检查结果
ethtool eth2

前提条件:

  • 对端交换机也设置为 1000M 全双工,关闭自协商
  • 否则将导致双工不匹配或链路中断

此方法可用于应急通信,但需确保两端配置一致。


:white_check_mark: 方案四:添加 YT8531 PHY ID 支持补丁(高级)

若具备开发能力,可在驱动层面手动添加 YT8531 的 PHY ID:

  1. 获取内核源码或驱动代码(如 drivers/net/phy/)
  2. 在支持的 PHY 列表中添加 YT8531 的 ID(可从数据手册中查找)
  3. 编译并替换模块
  4. 加载模块后验证识别情况

例如:

{ .phy_id = 0x0007c0a0, .phy_id_mask = 0xfffffff0, .name = "YT8531S" }

此操作属于定制化开发,需验证兼容性。


:cross_mark: 不推荐尝试的方法

方法 原因
仅更改 IP 或 MAC 地址 不影响物理层连接状态
使用 ip link set up 接口已 UP,问题在物理层
修改 VLAN 或路由 不解决链路协商失败问题

:puzzle_piece: 附加诊断建议

  1. 获取串口日志

    # 查看启动阶段 PHY 初始化信息
    dmesg | grep -i phy
    dmesg | grep -i gmac
    

    是否提示:

    • “YT8531 not supported”
    • “Could not attach PHY”
    • “Remote PHY is not responding”
  2. 使用 bmcdfx 工具直接读取 MDIO

    bmcdfx mdio read reg 0 0x0 0x2
    

    若返回 0xffff,说明 MDIO 总线无响应,需检查硬件连接或地址配置。

  3. 确认对端端口状态

    • 对端是否协商成功?
    • 是否收到接收光功率或误码告警?

:white_check_mark: 总结与建议

建议项 内容
根本原因 鲲鹏平台 BMC 固件未适配 YT8531 PHY,导致链路协商失败,速率锁定在10M
最优解 更换为 YT8521,已验证有效
替代方案 升级 BMC 固件或手动修改设备树 phy_addr 并修复驱动支持
应急手段 强制设置 1000M full duplex,关闭自协商(需两端配合)
风险提示 手动修改设备树或驱动有风险,建议在可调试环境下操作

:link: 参考链接

如需进一步协助,请提供:

  • dmesg | grep -i phy 输出
  • bmcdfx mdio read 多个地址尝试结果
  • 当前 BMC 版本及 OpenUBMC manifest 版本号

我们将可进一步判断是否可通过软件补丁解决。

更新一下,希望有大佬能回复一下

这个不是bmc软件配置的问题,可以找硬件或驱动看下