Espero que isso possa ser útil para qualquer pessoa que esteja navegando no Google com o mesmo problema.
Um pouco rápido de fundo. Durante o ano passado, tenho desenvolvido um sistema de imagens FPGA para um projeto de pesquisa universitária que se conecta via PCIe Gen3. Eu construo um driver usando o KMDF (a estrutura do driver do Windows) que habilita o MSI para o dispositivo (no arquivo inf) e está funcionando bem em um computador.
Eu recentemente mudei para uma nova placa-mãe (Asus P9X79-E WS) já que o plano é ter várias placas e esta placa-mãe tem um melhor arranjo de slots PCIe graças aos switches PEX8747 onboard. O FPGA e o driver funcionam bem em um slot (recebendo interrupções MSI corretamente), no entanto, se eu colocar a placa em um slot diferente, um que esteja atrás de um dos dois switches PEX8747, não receberei mais interrupções MSI.
Eu posso ver no espaço de configuração que o FPGA tem seu espaço de configuração MSI sendo corretamente configurado (8 vetores solicitados e alocados, MSI habilitado, interrupções legadas desabilitadas e o endereço é diferente de zero). No entanto, o ISR no driver nunca é acionado.
Eu tentei desativar o MSI e voltar a usar uma interrupção herdada e ter um registro de sinalizador que o driver lê para descobrir a fonte correta. Isso está funcionando bem mesmo atrás do switch, mas o processo não é tão rápido, então eu prefiro estar usando o MSI.
Suponho que, em seguida, a pergunta é: há algo sobre os Comutadores PCIe (especificamente o PEX8747) que impede que as Interrupções de Sinal de Mensagem funcionem? Existe configuração necessária para que os comutadores funcionem?Espero que isso possa ser útil para qualquer pessoa que esteja navegando no Google com o mesmo problema.