[英]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 找到
提前致谢。
终于找到了答案,eventbuffer中的事件数据在中断和EVENTCOUNT寄存器之后延迟了。 当问题发生时,事件缓冲区中的数据是上一轮的脏数据。 通过多次读取数据,得到了正确的数据。
因此,它并没有错过 xfercomplete,而是延迟了。 不知道为什么会发生延迟,应该是在传输完成后产生中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.