我们的团队目前正致力于定制设备 Cyclone V板上安装了基于COM Express amd64的PC。该板用作PCIe本机端点。它首先打开,然后打开PC。 PC上有linux运行,内核4.10和一些驱动程序和软件通过MMIO与PCI BAR0一起运行 系统完美运行,直到从Linux终端第一次重启。在下一次启动时,MMIO读访问被破坏,而MMIO写访问是正常的。
假设有两个偏移量,即A和B,分别为0xa和0xb。现在,如果我们从这些偏移中读取字节,似乎在检索到的值中有8个读操作延迟:
如果偏移A和B在同一个64位字内,则所有工作都按预期工作
MMIO访问是通过readb / readw / readl / readq函数完成的,所使用的实际函数根本不会影响此延迟。
顺序重启可能会再次修复或破坏MMIO读取。
从linux的角度来看,mmiotrace给出了与破碎数据相同的图片 从设备的角度来看,signaltap逻辑分析仪在PCIe核心总线上显示有效的数据值 我们没有PCI总线分析仪设备,所以我们不知道在这两点之间检查数据交换的可能性 这种行为可能是什么原因以及如何解决?