跳转至

GMAC DEBUG SOP


REVISION HISTOR

Revision No.
Description
Date
1.0
  • Initial release
  • 06/10/2025
    1.1
  • debug process improvement
  • 05/20/2026

    问题一:ping不通

    流程 方法 出口条件 下一步 or 结论 需提供给FAE的资料 备注 & 相关FAQ
    A 跟正常网络环境交换网线, 做交叉测试 出口条件1: 非网线问题
    出口条件2: 网线问题
    出口条件1: ==> B
    出口条件2: 结束 ==> 网线问题
    B 在正常网络环境中介入该中转设备(交换机或路由器) 出口条件1: 介入中转设备后网络正常
    出口条件2: 介入中转设备后网络不通
    出口条件1: ==> C
    出口条件2: 结束 ==> 中转设备问题
    C 执行ping后查看提示 "网络不可达" 还是 卡住 出口条件1: 卡住 ==> 表示网络可达
    出口条件2: 网络不可达 ==> 局域网配置有误, 如网关, IP网段, IP table等
    出口条件1: ==> D
    出口条件2: 结束 ==> 网络配置问题
    D 方法1: 拔插网线, 查看link up或down的log
    方法2: 读phy寄存器的link状态位
    出口条件1: link down 或没有link up的log
    出口条件2: link up
    出口条件1: ==> E
    出口条件2: ==> F
    通过phy寄存器可以看是否link up
    bank_phy0 offset1 bit2 :
    1: Link is up
    0: Link is down
    phy_wr节点路径
    /proc/gmac_0/phy_wr
    Usage:
    echo phy_r phyid phyaddress > phy_wr
    echo phy_w phyid phyaddress phyvalue > phy_wr
    eq:
    echo phy_r 0 1 > phy_wr
    Or use ./phytool read eth0/0/1
    E 1、确认使用的phy是否正常reset
    2、用ethtool确认当前是否为force mode
    如果是, 确认两边配置的force mode是否一致
    出口条件1: phy初始化有正常reset, 且当前不是force mode, 或者两边force mode配置一致后不能link up
    出口条件2: 排查上述问题后link up
    出口条件1: 结束 ==> 反馈FAE
    出口条件2: 结束 ==> phy 协商问题
    提供调试log、启机log、reset拉低拉高信号波形图、gmac相关寄存器信息 命令: ./ethtool eth0
    F 公板: 先检查padmux的对应dtsi, 对应的gpio引脚是否存在冲突 或 配置成其他gpio模式。
    非公版: 需要根据客户实际的引脚设计检查是否存在引脚被错误复用的问题
    出口条件1: 引脚配置正常
    出口条件2: 引脚配置异常
    出口条件1: 结束 ==> G
    出口条件2: 结束 ==> 引脚配置异常
    提供调试信息、启机日志和寄存器信息
    G 敲击ifconfig后, ping一段时间后, 再使用ifconfig查看统计信息
    如果TX packets计数增长量为0, 则 TX 方向存在问题
    如果RX packets计数增长量为0, 或 errors增加, 则为 RX 方向存在问题
    出口条件1: RX 问题
    出口条件2: TX 问题
    出口条件3: 上述都不符合(都有计数) ==> 可能是网络环境问题
    出口条件1: ==> H
    出口条件2: ==> L
    出口条件3: 结束 ==> 反馈FAE,分析环境问题
    ifconfig前后的log、相关gmac寄存器信息
    辅测和板端的抓包信息
    两边的网络配置信息, 如ip地址、mac地址、arp表、路由表等
    若都没有计数, 可以先排查RX问题, 再排查TX问题
    H 如果rx packets为0, 则为没有counter问题
    如果存在rx error计数, 则为error packet问题
    出口条件1: 没有counter问题
    出口条件2: error packet问题
    出口条件1: ==> J
    出口条件2: ==> I
    I 根据phy手册调整driving能力,调整后再次尝试ping看能否ping通 出口条件1: 可以ping通
    出口条件2: 无errors计数增加,但仍然ping不通
    出口条件3: errors计数仍然增加
    出口条件1: 结束 ==> driver能力问题
    出口条件2: ==> H
    出口条件3: 结束 ==> 需要找CAE查看硬件是否存在问题
    提供串口log、ifconfig信息、dlist信息和寄存器信息
    RX CLK/DATA 对应的波形图
    该步骤可以量测波形来调试,确保调整后的driving符合需求
    J 1、PC开启wireshark抓包,板子开启tcpdump抓包。
    2、板子pingPC, 观察报文交互, 查看板端是否有发出icmp请求, PC是否有响应的ICMP应答
    出口条件1: 板子没有icmp报文发出
    出口条件2: pc没有icmp报文发出
    出口条件1: ==> L
    出口条件2: ==> K
    K 确认 PC/辅测设备 是否有开启防火墙导致板端发送的icmp报文被过滤 出口条件1: 有开启防火墙
    出口条件2: 没有开启防火墙
    出口条件1: 结束 ==> 关闭防火墙, 可能是防火墙拦截了板端的报文
    出口条件2: 结束 ==> 可能是网络环境问题, 有需要可联系FAE分析
    ifconfig前后的log
    辅测和板端的抓包信息
    两边的网络配置信息, 如ip地址、mac地址、arp表、路由表等
    L rmii: 使用示波器查看, 观察REF_CLK波形是否正常(如果有波形的话, 频率是否为50M/25M)
    rgmii: 检查MCLK是否符合phy要求,tx相关引脚驱动能力是否符合phy需求
    出口条件1: clk异常 或 引脚驱动能力异常
    出口条件2: clk正常/引脚驱动能力正常
    出口条件1: 结束 ==> 找FAE确认CLK配置/TX驱动能力配置
    出口条件2: ==> M
    提供串口log、调试信息、ifconfig信息、寄存器信息 cat /proc/gmac_0/driving => 打印当前IO的driving设定
    echo [io_idx] [gear] > /proc/gmac_0/driving => 将 io_idx 指定为gear挡位
    M 使用tool读取OTP/Efuse的disable gmac bit(不知道方法找OTP owner协助) 出口条件1: 读取结果为00或11 ==> 没有被disable
    出口条件2: 读取结果为10或01 ==> 有被disable
    出口条件1: 结束 ==> 找FAE继续排查
    出口条件2: 结束 ==> OTP禁用了网络
    提供OTP读取结果截图

    问题二:uboot下网络不通

    流程 方法 出口条件 下一步 需提供给FAE的资料 备注 & 相关FAQ
    A 将对端设备的网线接入其他网络正常的设备, 测试网络是否正常 出口条件1: 网络正常
    出口条件2: 网络异常
    出口条件1: ==> B
    出口条件2: 结束 ==> 对端设备异常
    B 使用ping命令,检查设备是否正常初始化 出口条件1: 正常初始化
    出口条件2: 未正常初始化
    出口条件1: ==> C
    出口条件2: ==> E
    C 检查环境变量的配置是否正确 出口条件1: 环境变量配置正确, 且是动态获取ip地址(dhcp)
    出口条件2: 环境变量配置正确, 且是静态ip
    出口条件3: 环境变量配置错误
    出口条件1: ==> D
    出口条件2: ==> F
    出口条件3: 结束 ==> 正确配置后重新测试
    gmac0静态ip配置参考:
    setenv -f ethact gmac0
    setenv -f ethaddr xx:xx:xx:xx:xx:xx
    setenv -f ipaddr xxx.xxx.xxx.xxx
    setenv -f netmask xxx.xxx.xxx.xxx
    D 检查DHCP
    1、更换静态ip地址与其他设备通信
    2、更换其他的MAC地址, 尝试DHCP看是否能ping通PC
    出口条件1: 静态ip依然无法ping通
    出口条件2: 静态ip可以ping通 或 网络正常
    出口条件1: ==> F
    出口条件2: 结束 ==> dhcp异常
    gmac0动态ip配置参考:
    setenv -f ethact gmac0
    setenv -f ethaddr xx:xx:xx:xx:xx:xx
    dhcp
    E 确认mdio连接是否正常 出口条件1: mdio连接异常
    出口条件2: mdio连接正常
    出口条件3: 配置了fixed-link
    出口条件1: ==> F,检查mdio pin
    出口条件2: ==> F
    出口条件3: ==> C
    输入dhcp/ping命令,查看是否有"Couldm not get PHY for gmacX: addr -1", 有该log说明mdio连接异常
    而出现"gmacx Waiting for PHY auto negotiation to complete...... done",则说明mdio连接正常
    F 根据客户的实际layout检查MII对应pin 是否存在错误复用现象 出口条件1: pinmux无错误复用
    出口条件2: pinmux错误复用,且修改后网络依然不通
    出口条件3: pinmux错误复用,且修改后网络恢复
    出口条件1: ==> G
    出口条件2: ==> G
    出口条件3: 结束 ==> pinmux配置错误
    排查过程log
    排查实验以及实验结果记录
    这里的MII指代mac与phy之间的资料接口,包含RGMII、RMII等类型
    G 使用LA或示波器量信号/波形, 观察:
    1、高电平3.3V左右, 低电平0V
    2、波形是否正常无杂波
    3、phase是否正常
    出口条件1: 信号/波形正常
    出口条件2: 信号/波形异常
    出口条件1: 结束 ==> H
    出口条件2: 结束 ==> 联系CAE继续排查问题
    排查过程log
    排查实验以及实验结果记录
    1、电压异常可能需要排查跳帽等, 需要联系CAE分析
    2、波形异常, 有杂波, 可能是芯片虚焊。
    3、phy reset 异常。
    H 查看phy driver是否适配 出口条件1: phy driver适配
    出口条件2: phy driver不适配
    出口条件1: 结束 ==> 反馈FAE
    出口条件2: 结束 ==> 更换正确phy driver继续测试
    排查过程log
    排查实验以及实验结果记录
    gmac 寄存器信息
    查看使用的phy是否需要特定的驱动,以及编译时是否有勾选对应的phy 驱动选项

    问题三:网络带宽不足

    流程 方法 出口条件 下一步 需提供给FAE的资料 备注 & 相关FAQ
    A 检查测速工具的命令是否正确, 常见问题如下:
    1、iperf 测量udp带宽时需要-b指定最大带宽
    2、iperf2 服务端和客户端都需要加 -u 才可以正常收发udp
    出口条件1: 命令正确
    出口条件2: 命令错误
    出口条件1: ==> B
    出口条件2: 结束 ==> 工具使用问题
    iperf等测试工具执行的server端和client端log iperf3 server:
    ./iperf3 -s [-i 1] [-p \<port-id>]
    iperf3 client:
    ./iperf3 -c \<remote-ip> [-p \<port-id>] [-i 1] [-t 36000] [-u] [-R]
    B 1、检查端口的速率和双工模式
    2、检查与对端端口配置的速率和双工模式是否匹配
    3、检查端口是否存在大量错误报文
    出口条件1: 一切正常
    出口条件2: 存在异常, 端口配置速率低、两端速率模式不匹配、存在大量错误报文统计等
    出口条件1: ==> D
    出口条件2: ==> C
    查询ethx网口基本设置
    ./ethtool ethx
    检查端口是否存在错误报文方法/收包统计
    命令: ifconfig -S ethx
    C 1、 使用 ethtool 固定两端速率和双工模式重新测试 出口条件1: 带宽依然不足
    出口条件2: 带宽正常
    出口条件1: ==> D
    出口条件2: 结束 ==> 自协商问题
    设置ethx速率/双工模式/自协商
    ./ethtool -s ethx [speed 10|100|1000] [duplex half|full] [autoneg on|off]
    D 检查中转设备
    方法: 使用直连方式测试设备带宽
    出口条件1: 直连测试下带宽依然不足
    出口条件2: 直连测试下带宽正常
    出口条件1: ==> E
    出口条件2: 结束 ==> 中转设备限速
    可能是由于中转设备(路由器, 交换机)做了影响带宽的qos策略或带宽限制策略导致的带宽不足
    E 检查设备以及测试带宽所用的辅助设备(如pc)等是否开启了防火墙
    如果有, 则关闭防火墙重新测试
    出口条件1: 没有开启防火墙 或 关闭防火墙情况下带宽依然不足
    出口条件2: 关闭防火墙情况下带宽恢复正常
    出口条件1: ==> F
    出口条件2: 结束 ==> 防火墙原因
    F 在测试带宽过程中, 使用top命令观察系统资源的使用情况, 主要关注:
    1、是否还有空闲内存 (Mem: xxx free)
    2、是否还有空闲cpu (CPU: xx% idle)
    出口条件1: 系统资源充足
    出口条件2: 系统资源不足
    出口条件1: ==> G
    出口条件2: 结束 ==> 性能问题
    idle 表示空闲资源。idle越少, cpu loading越大(cpu loading = 100% - idle)
    某些版本top和常用的不一样, 可以使用命令: busybox top -d 1
    -d 1 表示刷新间隔1s
    G 关闭设备以及直连对端设备的流控,重新测试带宽 出口条件1: 带宽恢复正常
    出口条件2: 带宽依然不足
    出口条件1: 结束 ==> 流控导致带宽不足问题
    出口条件2: ==> H
    查看收发的流控报文计数
    ./ethtool -S ethx
    关闭设备流控功能
    ./ethtool -A ethx rx off tx off
    查看当前设备流控状态
    ./ethtool -a ethx
    H 1、拔插网线后重新测试
    2、更换一条正常网络下的网线重新测试
    出口条件1: 带宽恢复正常
    出口条件2: 带宽依然不足
    出口条件1: 结束 ==> 物理连接问题
    出口条件2: 结束 ==> 反馈FAE
    排查过程log
    排查实验以及实验结果记录
    gmac bank的寄存器dump数据
    I 尝试更换打流方向或者打流设备
    1、iperf使用-R命令,改变打流方向
    2、更换同型号设备,使用同一个image
    出口条件1: 带宽恢复正常
    出口条件2: 带宽依然不足
    出口条件1: 结束 ==> 硬件问题,找CAE排查
    出口条件2: 结束 ==> 反馈FAE
    提供测试过程中的相关日志 如果更换打流方向或更换设备后,带宽正常,可以换一个server端或client端设备,以此判断是 原来设备的tx端问题 还是 rx端问题(也可能都有问题)

    问题四:网络频繁掉线

    流程 方法 出口条件 下一步 需提供给FAE的资料 备注 & 相关FAQ
    A 检查是否由于网线质量导致的频繁掉线
    跟正常网络环境交换网线, 做交叉测试
    出口条件1: 非网线问题
    出口条件2: 网线问题
    出口条件1: ==> B
    出口条件2: 结束 ==> 网线问题
    B 检查是否因为网络环境导致
    改为直连测试是否会频繁掉线
    出口条件1: 直连测试依然频繁掉线
    出口条件2: 网络正常
    出口条件1: ==> C
    出口条件2: 结束 ==> 网络环境或中转设备问题
    C 检查phy状态寄存器, 查看是否频繁变化, 读取的link状态是否与当前一致 出口条件1: phy状态正常
    出口条件2: 片外phy 且 phy状态异常
    出口条件3: 片内phy 且 phy状态异常
    出口条件1: ==> D
    出口条件2: ==> E
    出口条件3: 结束 ==> 反馈FAE
    调试过程log 通过phy寄存器可以看是否link up
    bank_phy0 offset1 bit2 :
    1: Link is up
    0: Link is down
    phy寄存器读取方法:
    phytool read IFACE/ADDR/REG
    echo phy_r 0 1 > /proc/gmac_0/phy_wr
    D 检查设备的端口配置(双工模式/速率)是否与对端端口匹配
    若不匹配则配置匹配的端口模式后重新测试
    查看网络是否恢复正常
    出口条件1: 恢复正常
    出口条件2: 没有恢复正常
    出口条件1: 结束 ==> 网络端口模式不匹配导致的问题
    出口条件2: 结束 ==> 反馈FAE
    调试过程log 和 寄存器信息 命令: ./ethtool eth0
    E 检查连接引脚的pinmux
    确保均已设置成正确mode, 且无占用情况
    出口条件1: pinmux正常
    出口条件2: pinmux异常
    出口条件1: ==> F
    出口条件2: 结束 ==> pinmux异常
    F 通过示波器检查phy晶振引脚的波形是否正常 出口条件1: 波形正常
    出口条件2: 波形异常
    出口条件1: ==> G
    出口条件2: 结束 ==> phy晶振损坏
    G 根据phy手册或switch手册上的reset时序要求, 检查实际配置的reset时序 出口条件1: reset flow正确
    出口条件2: reset flow错误
    出口条件1: 结束 ==> 反馈FAE
    出口条件2: 结束 ==> 调整reset flow之后重新测试
    排查过程log
    排查实验以及实验结果记录
    gmac bank的寄存器dump数据
    默认拉低reset引脚保持20ms, 再拉高reset引脚保持50ms
    客户可能会有修改, 需要去确认实际reset时序是否符合要求
    同时需要确认reset引脚选择是否正确, 是否存在pinmux错误复用问题

    问题五:新ephy或switch网卡型号适配失败

    流程 方法 出口条件 下一步 需提供给FAE的资料 备注 & 相关FAQ
    A 检查phy或者switch的引脚与芯片是否物理连接上
    检查有无虚接情况
    出口条件1: 物理连接正常
    出口条件2: 未正常连接
    出口条件1: ==> B
    出口条件2: 结束 ==> 物理连接异常
    B 检查连接引脚的pinmux
    确保均已设置成正确mode, 且无占用情况
    出口条件1: pinmux正常
    出口条件2: pinmux异常
    出口条件1: ==> C
    出口条件2: 结束 ==> pinmux异常
    C 根据phy手册或switch手册上的reset时序要求, 检查实际配置的reset时序 出口条件1: 时序正常, reset引脚配置正确
    出口条件2: 时序错误, 或reset引脚被占用
    出口条件1: ==> D
    出口条件2: 结束 ==> reset引脚错误
    默认拉低reset引脚保持20ms, 再拉高reset引脚保持50ms
    客户可能会有修改, 需要去确认实际reset时序是否符合要求
    同时需要确认reset引脚选择是否正确, 是否存在pinmux错误复用问题
    D 确认是否开启fixed-link 出口条件1: 已开启 或 不需要fixed-link
    出口条件2: 未开启
    出口条件1: ==> E
    出口条件2: 结束 ==> 未启用fixed-link
    switch网卡适配 或 不关注phy状态(无mdio等) 需要启用fixed-link
    E 检查phy/switch的clk是否符合phy/switch手册要求 出口条件1: 是
    出口条件2: 不是
    出口条件1: ==> F
    出口条件2: 结束 ==> 时钟不匹配导致适配失败
    F 向phy厂商或者switch厂商确认是否需要更新驱动 出口条件1: 不需要
    出口条件2: 需要
    出口条件1: 结束 ==> 联系FAE进一步排查
    出口条件2: 结束 ==> 需要更新驱动
    排查过程log
    排查实验以及实验结果记录
    gmac bank的寄存器dump数据

    问题六:千兆带宽下网络异常

    流程 方法 出口条件 下一步 or 结论 需提供给FAE的资料 备注 & 相关FAQ
    A 使用ethtool更改接口速率,查看是否依然存在异常 出口条件1: 恢复正常
    出口条件2: 依然存在异常
    出口条件1: ==> C
    出口条件2: ==> B
    ethtool命令举例:
    将eth0接口配置成百兆全双工
    ethtool -s eth0 speed 100 duplex full
    B 参考该SOP前面的问题流程进行排查 出口条件1: ALL 出口条件1:结束
    C 调整Gmac tx驱动能力,并确认网络是否恢复 出口条件1: 恢复正常
    出口条件2: 依然存在异常,且网络问题是网络不通
    出口条件3: 依然存在异常,且网络问题是带宽不足或丢包
    出口条件1: 结束 ==> Gmac tx驱动能力问题,需修改代码默认驱动能力至合适驱动能力档位
    出口条件2: ==> D
    出口条件3: ==> E
    cat /proc/gmac_0/driving => 打印当前IO的driving设定
    echo [io_idx] [gear] > /proc/gmac_0/driving => 将 io_idx 指定为gear挡位
    D 使用LA或示波器测量phy clk波形,观察:
    1、高电平3.3V左右, 低电平0V
    2、波形是否正常无杂波
    3、phase是否正常
    出口条件1: 信号/波形正常
    出口条件2: 信号/波形异常
    出口条件1: 结束 ==> 联系FAE继续排查
    出口条件2: 结束 ==> 联系CAE排查CLK波形异常的问题
    排查过程log
    排查实验以及实验结果记录
    E 检查iperf命令是否正确使用 出口条件1: 正确使用
    出口条件2: 错误使用
    出口条件1: ==> F
    出口条件2: 结束 ==> 使用正确命令重新测试
    需排查是否存在以下几个问题
    1、iperf 在测试udp时,需使用-b选项指定带宽
    eq:
    iperf -c 192.168.1.1 -u -b 1G

    2、iperf 在测试UDP RX时,可能会因为iperf UDP buffer length 默认size过小导致带宽跑不满,需使用-l选项扩大RX buff size
    eq:
    iperf -c 192.168.1.1 -u -R -b 1G -l 65500
    F 更换能够正常跑满千兆的网线重新测试 出口条件1: 恢复正常
    出口条件2: 依然存在异常
    出口条件1: 结束 ==> 网线问题
    出口条件2: ==> G
    设备支持100米下百兆带宽,以及250米下10M带宽
    网线过长使用千兆带宽会不通或出现异常
    使用千兆带宽时,网线最好使用六类线,线材质量不达标也会导致网络性能不佳的问题
    G 调整RX mem buffer size后重新测试 出口条件1: 恢复正常
    出口条件2: 依然存在异常
    出口条件1: 结束 ==> RX buffer size不足导致的问题
    出口条件2: ==> H
    调整rx buffer size命令:
    echo 20971520 > /proc/sys/net/core/rmem_max
    echo 20971520 > /proc/sys/net/core/rmem_default
    H 使用top命令查看使用千兆网络时cpu loading是否满载 出口条件1: 满载
    出口条件2:不满载
    出口条件1: ==> G
    出口条件2: ==> H
    cpu使用情况可以通过剩余多少来判断,即 (CPU: xx% idle xx% io)字段
    当idle为0%,且iocpu即为满载状态
    I 使用ethtool检查gmac TSO GRO GSO等feature是否有开启
    1、将GSO GRO TSO feature均开启,测试网络情况
    2、将GSO GRO TSO feature均关闭,测试网络情况
    出口条件1: 开启和关闭均无效,网络依然异常
    出口条件2:feature 均开启时网络恢复正常
    出口条件3:feature均关闭时网络恢复正常
    出口条件1: 结束 ==> 反馈FAE继续排查
    出口条件2: 结束 ==> feature未开启导致中断数过多,cpu loading过大导致网络异常
    出口条件3:结束 ==> feature功能异常,硬件问题,反馈FAE,让FAE协助HWRD排查
    ethtool查看netdev feature命令
    ethtool -k eth0(网络接口)
    ethtool 配置netdev feature命令
    例:配置eth0接口 gso feature 打开
    ethtool -K eth0 gso on
    J 使用ethtool查看pause帧数量,与正常情况下对比
    若过多,则关闭设备以及对端的流控重新测试
    出口条件1: 恢复正常
    出口条件2: 依然存在异常
    出口条件1: 结束 ==> 流控包过多问题
    出口条件2: 结束 ==> I
    排查过程log
    排查实验以及实验结果记录
    视情况看是否找FAE继续排查
    K 检查系统内存,查看是否存在内存不足的情况 出口条件1: 存在内存不足的情况
    出口条件2: 不存在内存不足的情况
    出口条件1: 结束 ==> 反馈memory owner先行排查
    出口条件2: 结束 ==> 反馈GMAC owner进一步排查
    排查过程log
    排查实验以及实验结果记录
    GMAC相关寄存器
    查看系统内存命令
    cat /proc/meminfo

    GMAC相关寄存器

    Module Addr
    gmac0 0x1510
    gmac1 0x1513
    net_gp_ctrl 0x1512
    X32_GMAC0 0x1A50
    0x1A51
    0x1A52
    0x1A53
    0x1A54
    0x1A55
    0x1A56
    0x1A57
    X32_GMAC1 0x1A5A
    0x1A5B
    0x1A5C
    0x1A5D
    0x1A5E
    0x1A5F
    0x1A60
    0x1A61
    GMACPLL 0x103A
    PADTOP 0x103C
    CLKGEN 0x1038
    CLKGEN2 0x103F
    PAD_GPIO 0x103E
    PAD_GPIO2 0x1104
    INTR_CTRL1_1 0x1017