Здравствуйте. Работаю с китом sp605 (Spartan-6), xapp1052, Fedora 13. Хочу сделать, чтобы мой Endpoint (sp605) отправлял прерывания MSI PCIe.
В проекте использую ядро pcie ipcore 1.4 (xilinx). Модуль запроса прерывания написал свой на Verilog (ибо тот, что идет в xapp1052, написан далеко не лучшим образом) в соответствии с документацией ug654 (документация на ipcore pcie 1.4). Мой модуль раз в секунду посылает запрос на генерацию ip-ядром прерывания MSI (все диаграммы по ug654). На каждый свой запрос генерации я получаю ответ от ядра, что прерывание отправлено. Программист написал драйвер, который устанавливает бит MSI_Enable в конфигурационном пространстве. При запуске драйвера идет инициализация Endpoint и программист "подписывается" на прерывание выделенное моему устройству. Однако, программист говорит, что до обработчика не дошло ни одного прерывания MSI.
Если делаем с прерываниями legacy, то прерывания идут, но еще периодически проскакивают какие-то "лишние" прерывания видимо не от моего устройства. Полагаем, что "лишние" прерывания возникают из-за того, что при legacy на одном прерывании может сидеть несколько устройств. Поэтому от legacy хотим отказаться.
Собственно вопрос: поднимал ли кто-нибудь MSI прерывания PCIe и что для этого нужно со стороны linux? Со стороны sp605 генератор прерываний сделан по документации на ipcore 1.4...
С уважением, Игорь.