I am working on a network driver for an FPGA endpoint that supports multi-message MSI interrupts (not msix) on a PCIe bus. The host processor is an x86 Intel i7 620LM running on CentOS with a 4.2 kernel.
The FPGA endpoint correctly advertises multiple msi vectors in it's MSI capabilities register (0x101 = 32 total possible vectors).
From what I can tell, multi-message functionality was added in kernel 4.2. Unfortunately when I call pci_enable_msi_range(pdev, 1, 32);
it only returns 1
. When I call pci_msi_vec_count(pdev);
it returns 32
. I'm able to request an irq handler on the one vector and it works as expected.
Does anyone know if multi-message MSI vectors are actually supported in Linux on x86 architectures?
UPDATE: I was able to get all 32 MSI vectors enabled using a different SBC with an i7-4700EQ processor. This with a 4.4-rc1 kernel.
UPDATE: Works with 4.2 as well.
UPDATE: In this case, the problem was in coreboot. I was able to get multiple vectors working once the board vender provided an update.