Reputation: 821
I am working on an emulated QEMU device to simulate an FPGA PCIe interface. I am using the lev-pci device as a base template:
https://github.com/levex/kernel-qemu-pci/blob/master/qemu/hw/char/lev-pci.c
My device uses MSI interrupts to communicate. The kernel driver module is capable of enabling the MSI interrupts and receiving them. I have modified lev-pci.c to add
msi_init(dev, 0x70, 1, false, false);
to the initialization and then
msi_notify(pci_dev,0);
to the "pci_levdev_read" function as a basic test. I can trace that the msi interrupt is being generated in the debugger but I am not receiving the interrupt on the host. Am I missing a step to enable the MSI interrupts?
Upvotes: 4
Views: 2400
Reputation: 821
The solution was to enable DMA in the kernel module.
pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
pci_set_master(pdev)
Upvotes: 3