我正在修改 linux PCIe 驱动程序以使用 altera FPGA PCIe 内核。在我的驱动程序代码中,我执行 pci_set_master(dev) 以使 PCIe 读写工作。
我正在使用 altera SG-DMA 进行 PCIe 传输,而不是使用 ARM DMA。我需要将启用位写入 FPGA DMA 以启动传输。通过对启用位寄存器执行 pcie write(barx,offset,data) 可以完美地工作。
问题是,当 I/O 中断发生时,我需要我的系统启动 PCIe FPGA DMA,但是当中断发生时,我在 ISR 中放置了 pcie write(barx,offset,data),这导致整个 linux 挂在那里.
有人遇到过这种情况吗?请帮我。提前致谢。