PCIe Intterupts за коммутатором PLX

477
Tom Carpenter

Во-первых, я не уверен, что это лучшее место для того, чтобы задать этот вопрос, поэтому извиняюсь, если это не так, но, учитывая его довольно нишевый вопрос, я не знаю, есть ли где-нибудь действительно подходящее, чтобы задать его.


Небольшой фон. В течение последнего года я занимался разработкой системы обработки изображений FPGA для исследовательского проекта университета, который подключается через PCIe Gen3. Я создаю драйвер, используя KMDF (каркас драйвера Windows), который включает MSI для устройства (в файле inf) и отлично работает на одном компьютере.

Недавно я перешел на новую материнскую плату (Asus P9X79-E WS), поскольку планируется иметь несколько карт, и эта материнская плата имеет лучшее расположение слотов PCIe благодаря встроенным коммутаторам PEX8747. FPGA и драйвер работают нормально в одном слоте (при правильном получении прерываний MSI), однако, если я помещу карту в другой слот, который находится за любым из двух переключателей PEX8747, я больше не получаю прерывания MSI.

Из пространства конфигурации видно, что в FPGA правильно сконфигурировано пространство конфигурации MSI (запрошено и выделено 8 векторов, MSI включен, устаревшие прерывания отключены, а адрес не равен нулю). Однако ISR в драйвере никогда не срабатывает.

Я попытался отключить MSI и вернуться к использованию одного устаревшего прерывания и иметь регистр флага, который драйвер считывает, чтобы определить правильный источник. Это работает нормально даже за коммутатором, но процесс не такой быстрый, поэтому я бы предпочел использовать MSI.


Я полагаю, что тогда возникает вопрос, есть ли что-то в PCIe-коммутаторах (в частности, в PEX8747), которое препятствует работе прерываний сигналов сообщений? Есть ли конфигурация, необходимая для работы коммутаторов?

1

1 ответ на вопрос

0
Tom Carpenter

Что ж, как оказалось после небольшого эксперимента, коммутаторы PLX, похоже, не передают запросы MSI (и, вероятно, также публикуют записи, учитывая, что MSI использует их) с классом трафика, отличным от нуля. Установив класс трафика моего генератора прерываний, я смог заставить его работать.

Надеемся, что это может оказаться полезным для тех, кто просматривает Google с такой же проблемой.