我们有一个基于Atom Z 510/Intel SCH US15W Q7卡的系统(运行Debian )。我们需要从低针计数总线上的设备中传输数据块。据我所知,这个芯片组不提供DMA设备,这意味着处理器必须在软件循环中一次读取一个字节的数据。(设备驱动程序实际上使用"rep“x86指令实现了这一点,因此如果我正确理解的话,循环实际上是由CPU实现的。)
这远远不是最优的,但应该有可能达到14 4Mb/s的传输速率。相反,我们几乎无法管理4MB/s的事务,总线上的事务距离不超过2us,尽管对从设备的每次读取都在560 is内完成。我不认为公共汽车上的其他车辆是罪魁祸首,但仍在调查中。
我的问题是:
是否知道SCH上是否有可能影响LPC总线定时的配置寄存器? 我在Intel网站上找不到设备上的任何有用信息,也没有在Linux内核代码中发现任何似乎在篡改此类寄存器的信息(但当涉及到Linux内核时,我是个菜鸟)。
我不是x86的专家,所以任何其他可能起作用的因素,或者任何其他与这个设备有关的“战争故事”,也是很好的了解。
编辑:,我找到了数据表。我没有看到任何解释这种行为的东西,但我正在研究将我们的设备映射为固件设备的可能性,因为固件总线周期似乎没有同样的延迟。
发布于 2015-04-26 00:23:29
为了记录在案,解决方案是修改FPGA固件,使芯片的数据输入/输出寄存器映射到四个相邻地址,驱动程序修改为执行32位inb/outb指令。虽然SCH没有实现32位的LPC读写操作,但结果是4个背对背的8位操作,然后是与我以前使用单个字节时相同的死时间,这意味着它平均每个字节大约1U。不太理想,但吞吐量仍然是两倍。
事实证明,固件周期更快,因为SCH从固件闪存一次传输64个字节-在64字节之后有相同的1.4us间隙,表明这是设备的每事务延迟。利用这一点可能比上面的解决方案要快一些,但是折衷的是,它仅限于64个字节块,而且由于读取固件所需的额外周期,每个字节需要更长的时间(680 is )。
https://stackoverflow.com/questions/19071793
复制相似问题