DMA engine initialization failed rk3568的原因及解决方案

当Linux系统中遇到GMAC驱动启动时显示‘DMA engine initialization failed’,通常是GMAC工作时钟问题。需要检查时钟引脚状态、IOMUX设置、时钟频率和使能。本文介绍了这个问题的产生机理,即RK3568的GMAC和DMA需要外部时钟,缺乏时钟会导致初始化失败。解决方法是在驱动中通过SMI接口预先配置switch芯片,确保启动时提供正确的时钟源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nyiragongo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值