Linux驱动程序PCI突发传输

Linux驱动程序PCI突发传输,linux,driver,Linux,Driver,我有一个关于在PCIe上使用突发数据进行读写的问题。我有一个通过PCIe连接到cpu的fpga。我有一个简单的驱动程序,只用于测试。驱动程序向fpga写入数据和从fpga读取数据。fpga包括一个sram内核,数据在其中写入和读取。读取和写入工作正常,但如果我从设备读取数据,则不会出现突发。如果我向fpga写入数据,如果我使用ioremap_wc()映射条形图,则突发工作正常。但是如果我从fpga读取数据,cpu只进行单次访问,没有突发。我发现我必须将内存标记为写回,以便能够在读写传输时缓存数据

我有一个关于在PCIe上使用突发数据进行读写的问题。我有一个通过PCIe连接到cpu的fpga。我有一个简单的驱动程序,只用于测试。驱动程序向fpga写入数据和从fpga读取数据。fpga包括一个sram内核,数据在其中写入和读取。读取和写入工作正常,但如果我从设备读取数据,则不会出现突发。如果我向fpga写入数据,如果我使用ioremap_wc()映射条形图,则突发工作正常。但是如果我从fpga读取数据,cpu只进行单次访问,没有突发。我发现我必须将内存标记为写回,以便能够在读写传输时缓存数据,但是如果我用/proc/mtrr标记我的地址写回,读写时就没有突发。PCI头中的条被标记为可预取。你们中有人知道如何在PCI总线上实现读写突发吗?我希望你们中的任何人都能帮助我。

在PICe总线上获得突发传输的最佳方法是使用DMA控制器处理器I/O。如果您的FPGA是PCIe总线主机,您可以对其进行编程以传输数据。否则,大多数平台都内置了DMA控制器

我希望写合并执行与未缓存相同的读取。但是,即使您使用ioremap_cache(),您的平台也可能不会突发PIO读取。它可能取决于处理器、执行读取的指令和系统逻辑