MSI interrupt transmitted by device, but not received by driver

Hi all,

We are developing a PCI Express device based on the GN4124 bridge chip. Most of our WDF driver (KMDF) is working properly, but after a DMA transfer, sometimes no interrupt is received by the ISR in the driver (i.e. it is never called by the Windows framework). On other occasions, the interrupt is received fine. So far, we have not been able to find a consistent pattern in when it works, and when it doesn’t.

The device and the AMD host system support MSI mode, and Windows (8.1 64-bit) initializes the device MSI_ADDRESS to 0xFEE0F00C and MSI_DATA to 0x4982.

By probing the registers of the GN4124, we can confirm it has transmitted an interrupt to the PCI Express bus.

What is the best way to get more information about what is going on between the device and the driver? Could anybody point us into the right direction? What are common pitfalls regarding MSI interrupts?

Thanks in advance,

Patrick

Embedded Systems Engineer
Sorama

So you set up the DMA transfer in your device, and then the device issues the write to MSI_ADDRESS, but your ISR is not called? Have you confirmed that with a PCIe capture?
Do you have an interrupt enable register?

xxxxx@sorama.eu wrote:

We are developing a PCI Express device based on the GN4124 bridge chip. Most of our WDF driver (KMDF) is working properly, but after a DMA transfer, sometimes no interrupt is received by the ISR in the driver (i.e. it is never called by the Windows framework). On other occasions, the interrupt is received fine. So far, we have not been able to find a consistent pattern in when it works, and when it doesn’t.

The device and the AMD host system support MSI mode, and Windows (8.1 64-bit) initializes the device MSI_ADDRESS to 0xFEE0F00C and MSI_DATA to 0x4982.

By probing the registers of the GN4124, we can confirm it has transmitted an interrupt to the PCI Express bus.

What is the best way to get more information about what is going on between the device and the driver? Could anybody point us into the right direction? What are common pitfalls regarding MSI interrupts?

One common error is assuming that every interrupt corresponds to exactly
one call to your ISR. For example, if your device fires its interrupt
three times before your ISR runs, your ISR will only be called once.
It’s up to the ISR to figure out how much stuff there is to process.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.