如果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芯片