1
votes

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?

1

1 Answers

1
votes

The solution was to enable DMA in the kernel module.

pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
pci_set_master(pdev)