繁体   English   中英

为什么 dwc3 usb controller 没有报告 xfercomplete 事件? 或者小工具驱动程序错过了那个事件?

[英]why a dwc3 usb controller didnot report xfercomplete event? Or the gadget driver missed that event?

使用usb的Android手机连接PC,打开rndis,然后在手机和PC之间进行iperf测试。 经过几个小时的测试,rndis 的端点 ep1out 没有收到小工具驱动程序在发送传输命令后应该收到的 xfercomplete 事件。

我尝试将事件缓冲区大小从 256 扩大到 4096,也将 grxfifosize 的值从 delault 中放大,但问题仍然存在。

手机有8个cortex-A53核心,但是我们留下1个小核心(cpu0)和1个大核心(cpu7)在线,由于吞吐量原因,通过设置dwc irq的smp_affinity设置dwc中断不路由到cpu0。 所以dwc3_interrupt在cpu7上运行,dwc3_thread_interrupt也在cpu7上运行。

很奇怪,如果我们将 irq 路由到 cpu0,并且 dwc3_thread_interrupt 在不同的 core(cpu7) 运行,问题就消失了,不明白为什么。

代码是来自 synopsys 的开源代码,您可以在 kernel/drivers/usb/dwc3/gadget.c 找到

https://github.com/aosp-mirror/kernel_msm/blob/e8adfc30ff9282a728fd8b666b6418308164c415/drivers/usb/dwc3/gadget.Z4A8A08F09D37B73795364

提前致谢。

终于找到了答案,eventbuffer中的事件数据在中断和EVENTCOUNT寄存器之后延迟了。 当问题发生时,事件缓冲区中的数据是上一轮的脏数据。 通过多次读取数据,得到了正确的数据。

因此,它并没有错过 xfercomplete,而是延迟了。 不知道为什么会发生延迟,应该是在传输完成后产生中断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM