器件型号: AM6442
大家好!
目前、我们正在使用基于 Processor SDK Linux v9.2 的 Linux 验证配备 AM64x 的定制电路板上的 PCIe 根复合体功能。
FPGA 连接为端点器件。
在 Linux 上、FPGA 被正确识别为 PCIe 端点器件、我们能够访问其 PCIe 配置空间和 BAR。
接下来、我们正在尝试验证是否可以检测来自 FPGA 的旧中断。
为了验证传统中断检测、我们使用以下方法:
我们使用该pci_alloc_irq_vectors()函数向 FPGA 分配了一个旧中断向量、
已使用检索相应的 Linux IRQ 编号pci_irq_vector()、
并向注册了处理程序函数、request_irq()以便在 IRQ 发生时进行调用。
当我们从 FPGA 触发一次传统中断时、我们确认已成功调用寄存的处理程序函数。
但是、当我们以大约一秒的间隔从 FPGA 重复触发传统中断时、
处理程序函数被调用一定次数、
但之后、它就不再被调用了。
这一“特定数字“并不一致、而且每次重复都有变化。
我们检查了 Linux 源代码后发现、当发生传统中断时、 j721e_pcie_legacy_irq_handler()pci-j721e-host.c调用中的函数、
在该函数内、将触发与分配给 FPGA 的中断向量相对应的 IRQ。
参考资料:
https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/pci/controller/cadence/pci-j721e-host.c?h=ti-rt-linux-6.1.y
我们向j721e_pcie_legacy_irq_handler()函数添加了 LOG 输出、
并观察到、当来自 FPGA 的旧中断被反复触发时、
日志输出出现在处理程序函数停止被调用的位置。
在该点之后、未观察到进一步的 LOG 输出。
因此,我们认为注册的处理程序函数停止被调用的原因 j721e_pcie_legacy_irq_handler()函数本身不再被调用。
我们想提出以下两个问题:
[问题 1]
当 PCIe 端点器件触发传统中断时、
预计j721e_pcie_legacy_irq_handler()中的函数pci-j721e-host.c会被调用是正确的
软件开发工具?
[问题 2]
当端点器件重复触发传统中断时、
该j721e_pcie_legacy_irq_handler()函数最终停止被调用。
这种现象的可能原因是什么?
此致、
ITO