rk356x gmac 问题分析

1 DMA Initialization Failed


如果 GMAC 的驱动开机 log 上出现打印:  DMA engine initialization failed ,可以认为是 GMAC
的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下
几个方面:
IOMUX 出错,检查时钟脚寄存器值是否正确
时钟方向以及配置与硬件不匹配,参考本文第四章节的时钟设置
检查 clock tree 和 CRU 寄存器,确认时钟频率大小和时钟是否有使能


2 PHY 初始化失败


如果 GMAC 的驱动开机 log 上出现打印:No PHY found 或者 Cannot attach to PHY,表示找不到 PHY。
驱动会通过 MDIO 先读取 PHY 的 ID,可以测量 MDC 和 MDIO 波形,波形是否正常,该总线类似于
I2C,MDC 频率要求是小于 2.5M。一般来说,找不到 PHY 有以下几个原因:
检查 MDC/MDIO IOMUX 寄存器值是否正确
PHY 供电是否正常
Reset IO 配置不正确
Reset IO 时序不满足 PHY datasheet 要求,不同 PHY 的时序要求不一致,具体配置参考本文 DTS 章

测试 MDIO/MDC 波形是否异常,其中 MDC 时钟频率要求小于 2.5M

3 Link 问题


如果出现了 Link 问题,有个排除法,即将 MDC/MDIO 与主控断开,与电脑直连,查看电脑端是否有同
样的问题,以此排除软件上的干扰,那么需要重点排查下硬件上的影响,先测试 TXN/P 以及 RXN/P 是
否有 Link 波形。
如果不断出现 Link up/Link down,可能原因 PHY 收到了错误的数据,
EEE 模式下,发送的波形在 delayline 配置错误的情况下可能会导致不断 link up/down
供给 PHY 的时钟不对也会导致该问题


4 数据不通


首先排查一下是否是 TX 问题,或者 RX,还是二者都有问题。


4.1 TX


通过 ifconfig -a 查看 eth0 节点的 TX packets 是否在不断增加,如果为0,则有可能网线没有 link 上。通过
查看节点可以看到网线是否是连接上的,carrier 为1表示是 link up,反之 0 为 link down。例如 RK3328:
console:/ # cat /sys/devices/platform/ff550000.ethernet/net/eth0/carrier
1
假设 TX packets 是在不断增加,表示 TX 数据在 GMAC 有发出数据。
将板卡与 PC 连在同一个局域网内,在板卡上 ping PC,同时在 PC 端通过抓包工具(比如 Wireshark)抓
包查看,如果有抓到板卡发过来的数据,表示 TX 数据是通的。如果没有抓到,需要确认 TX 在哪个链
路位置上出现了异常,可以测试 GMAC 的 TX Clock 与 TX Data 的波形,来排除是 MAC 还是 PHY 出现
了问题。MAC 可以检查以下几个方面:
检查 TX Clock/TX Data 的 iomux
TXC 时钟是否正确
RGMII 模式时,Tx Delayline 配置是否正确
PHY 端也可以测试 PHY 的 TXN/P 信号确认 PHY 是否有数据发出;对于不同的 PHY 来说,其配置可能
是不一样,具体需要查看其 Datasheet。


14.2 RX


通过以上排查确定不是 TX 问题,重点排查 RX;连接上网线后通过 ifconfig -a 查看 eth0 节点的 RX
packets 是否在不断增加,如果为0,表示 GMAC RX 没有收到数据
同样可以测试 PHY 的 RXN/P,以及 GMAC 的 RX Clock/RX Data,来排除是 MAC 还是 PHY 出现了问
题。MAC 可以检查以下几个方面:
检查 RX Clock/RX Data 的 iomux
RXC 时钟是否正确
RGMII Tx Delayline 配置是否正确
RGMII 模式时,Rx Delayline 配置是否正确
假设 TX packets 是在不断增加,但以太网还是不正常通讯,则有可能是以下原因:
RMII 模式下 MAC 和 PHY 的参考时钟不是同一个
PHY 模式配置不对,例如硬件上配置成了 MII 模式
eth0 Link encap:Ethernet HWaddr 16:21:8d:d9:67:0b Driver rk_gmac-dwmac
inet6 addr: fe80::c43d:3e5d:533:b7ea/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:2848
Interrupt:45
eth0 Link encap:Ethernet HWaddr 16:21:8d:d9:67:0b Driver rk_gmac-dwmac
inet6 addr: fe80::c43d:3e5d:533:b7ea/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:341 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48928 TX bytes:3741
Interrupt:355


5 TX queue0 timeout


认为是 TX 无法发出,一般是控制器异常了,可能是以下几个原因引起的控制器异常:
时钟问题,检查时钟配置是否正确,参考本文第三章节
PHY 时序问题,PHY 的复位时序不对导致 PHY 给的时钟不对
PHY 硬件问题,导致出现了冲突检测,无法发送数据
逻辑电压太低

你可能感兴趣的:(驱动开发,瑞芯微平台,linux,c语言,驱动开发)