I'm trying to get MSI-X working on an iMX6 (Freescale/NXP/Qualcomm) CPU in Linux v4.1 for a PCIe character device driver. Whenever I call either pci_enable_msix()
or pci_enable_msix_range()
or pci_enable_msix_exact()
I get an EINVAL
value returned. I do have the CONFIG_PCI_MSI
option selected in the kernel configuration and I am also able to get single MSI working with pci_enable_msi()
, but I cannot get multiple MSI working either.
I have tested my driver code on an Intel i7 running kernel v3 with the same PCIe hardware attached and I was able to get MSI-X working without any problems so I know my code is correctly written and the hardware is correctly functioning.
When running on the iMX6 I can use lspci -v
to view that the hardware has MSI-X capabilities and see the number of IRQs it allows. I can even get the same correct number in my driver when calling pci_msix_vec_count()
.
Questions
- Are there any other kernel configuration flags I need to set?
- Is there anything specific to the iMX6 CPU I need to consider?
- Does anyone have any experience with the iMX6 and either MSI-X or multiple MSI?