如果GMAC 的驱动开机 log 上打印 DMA engine initialization failed ,可以认为是GMAC的工作时钟出问题了。需要先测量时钟引脚有咩有时钟,时钟的频率,幅度等指标是否正常。
IOMUX 出错,检查时钟脚寄存器值是否正确
时钟方向以及配置与硬件不匹配
检查 clock tree 和 CRU 寄存器,确认时钟频率大小和时钟是否有使能
以上是官方的文档说明。
刚开始调试 switch 芯片的时候由于rgmii 时钟是output , rk3568的 GMAC 需要 switch 芯片提供 125M的时钟,如果没有这个时钟就会初始化失败,进入文件系统后 ethx 不会出现(当然,如果屏蔽掉这里ethx 会出现,但是引发更多的问题,笔者在这块耍小聪明,导致耗费了近一个月时间,把网络这块整个查了一遍 -----)
出现这个错误的机理是:rk3568 的gmac 需要外部时钟,dma 需要外部时钟才可以软复位,如果没有外部这个时钟,软复位会失败,相应的寄存器不会置位,引发了驱动内部的错误处理,进而会打印 DMA engine initialization failed
问题解决:
以前出现了一个误区,官方文档说要查时钟,其实进入文件系统后,我有一个脚本会进行switch芯片的配置,配置后时钟是有的且符合要求。所以导致浪费了很多时间排除其他问题。
dma 软复位是在进入文件系统后,网络系统启动的时候,我想如果在这个之前只要提供合适的时钟那么就是可以的,那么------
在驱动里写配置调用smi 接口配置switch 芯片而不是在文件系统里配置。
问题解决!!!
接下来 ping 网关,做v
当Linux系统中遇到GMAC驱动启动时显示‘DMA engine initialization failed’,通常是GMAC工作时钟问题。需要检查时钟引脚状态、IOMUX设置、时钟频率和使能。本文介绍了这个问题的产生机理,即RK3568的GMAC和DMA需要外部时钟,缺乏时钟会导致初始化失败。解决方法是在驱动中通过SMI接口预先配置switch芯片,确保启动时提供正确的时钟源。
订阅专栏 解锁全文

3145

被折叠的 条评论
为什么被折叠?



