I have finally been able to get multi MSI (not MSI-X) working on the i.MX6 using the Linux kernel v4.1.15 release supported by Freescale/NXP. Attached are four patches which will need to be applied. This has been tested with two different end point FPGA devices with the i.MX6 running in root complex, I can confirm that multi MSI is now working.
Freescale/NXP: Please put these patches in your supported main line so others can have native multi MSI support.
You may have to contact your board manufacturer to find where within Yocto you will need to store these patches. If just building the kernel outside of Yocto then you can directly apply them.
The four kernel (v4.1.15) files which need to be patched are:
- <kernel source path>/include/linux/msi.h
- <kernel source path>/drivers/pci/msi.c
- <kernel source path>/drivers/pci/host/pcie-designware.h
- <kernel source path>/drivers/pci/host/pcie-designware.c
Once the above patches are applied and you create a new image/build you can start using the multi MSI APIs in your driver and pci_msi_vec_count() and pci_enable_msi_range() will work; this assumes your end point device on the PCIe link is working correctly.
Hopefully this is helpful to those who need multi MSI.