PCI MMIO读取数据延迟的原因是什么?

时间:2018-05-29 14:35:29

标签: linux-kernel fpga pci-e

我们的团队目前正致力于定制设备 Cyclone V板上安装了基于COM Express amd64的PC。该板用作PCIe本机端点。它首先打开,然后打开PC。 PC上有linux运行,内核4.10和一些驱动程序和软件通过MMIO与PCI BAR0一起运行 系统完美运行,直到从Linux终端第一次重启。在下一次启动时,MMIO读访问被破坏,而MMIO写访问是正常的。

假设有两个偏移量,即A和B,分别为0xa和0xb。现在,如果我们从这些偏移中读取字节,似乎在检索到的值中有8个读操作延迟:

  1. 读了十次 - 每次都返回0xa
  2. 读取B八次 - 每次都返回0xa
  3. 读取B十次 - 每次都返回0xb
  4. 读取一次 - 返回0xb
  5. 读取B七次 - 每次返回0xb
  6. 读取B一次 - 返回0xa
  7. 读取B十次 - 返回0xb
  8. 如果偏移A和B在同一个64位字内,则所有工作都按预期工作 MMIO访问是通过readb / readw / readl / readq函数完成的,所使用的实际函数根本不会影响此延迟。
    顺序重启可能会再次修复或破坏MMIO读取。

    从linux的角度来看,mmiotrace给出了与破碎数据相同的图片 从设备的角度来看,signaltap逻辑分析仪在PCIe核心总线上显示有效的数据值 我们没有PCI总线分析仪设备,所以我们不知道在这两点之间检查数据交换的可能性 这种行为可能是什么原因以及如何解决?

0 个答案:

没有答案