【问题标题】:Linux driver PCI Burst transferLinux 驱动 PCI 突发传输
【发布时间】:2014-05-05 18:46:42
【问题描述】:

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

【问题讨论】:

    标签: linux driver


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2013-10-02
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多