PLX 交换机后面的 PCIe 中断

PLX 交换机后面的 PCIe 中断

首先,我不确定这是否是提出这个问题的最佳场所,如果不是,请原谅,但考虑到这是一个相当小众的问题,我不知道是否有地方真正适合提出这个问题。


简单介绍一下背景。去年,我一直在为一个大学研究项目开发 FPGA 成像系统,该系统通过 PCIe Gen3 连接。我使用 KMDF(Windows 驱动程序框架)构建了一个驱动程序,该驱动程序为设备启用了 MSI(在 inf 文件中),并且在一台计算机上运行良好。

我最近换了一块新主板(华硕 P9X79-E WS),因为计划安装多块卡,而且由于板载 PEX8747 开关,这块主板的 PCIe 插槽排列更合理。FPGA 和驱动程序在一个插槽中工作正常(正确接收 MSI 中断),但是如果我将卡放在另一个插槽中(位于两个 PEX8747 开关之一后面的插槽),我就不再接收 MSI 中断。

我从配置空间中可以看到 FPGA 的 MSI 配置空间设置正确(请求并分配了 8 个向量、启用了 MSI、禁用了传统中断,并且地址不为零)。但是驱动程序中的 ISR 从未被触发。

我尝试过禁用 MSI,然后恢复使用一个旧式中断,并使用一个标志寄存器,驱动程序可以读取该寄存器来找出正确的源。即使在切换后,这种方法也能正常工作,但过程并不快,所以我宁愿使用 MSI。


那么我想问题是,PCIe 交换机(特别是 PEX8747)是否存在某些问题,导致消息信号中断无法工作?是否需要进行配置才能使交换机工作?

答案1

好吧,经过一些实验后发现,PLX 交换机似乎无法传输流量类别为零以外的任何 MSI 请求(并且可能也无法发布写入,因为 MSI 使用这些请求)。通过设置中断生成器的流量类别,我能够让它工作。

希望这对在 Google 上浏览时遇到同样问题的人有所帮助。

相关内容