FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
6262 Discussions

Unable to generate MSI interrupt


I have a PCIe intel card connected over Server platform and PCIe link is working on X8 G3. To generate MSI Interrupt, following steps I have executed:

  1. Enable MSI at both EP & RP.
  2. Enable Bus Master Enable & Memory Space (PCI CMD register)at both EP & RP.
  3. Disable INTx from both EP & RP.
  4. MSI Address @RP is 0xfecL, and MSI data is 0x41c1L
  5. MSI Address @EP was initially 0, I programmed it to 0xfecL. MSI darta @EP is 0x0
  6. I have generated an NFED (Non Fatal Uncorrectable Error) at RP.

If something wrong done or missed here. Also, i'm wondering how we can check if the MSI interrupt generated or not.

0 Kudos
1 Reply
Hie, My apologies for the delayed first response. I got your case mixed up with another PCIe forum question; hence I missed providing an update. Basically to enable MSI interrupt in the FPGA, you need to set the MSI Enable bit and disable the Legacy Interrupt bit in Configuration Space registers. Hence, the MSI interrupt is enabled correctly for the FPGA in steps 1 till 3 if used as EP or RP. The RP or EP could have different flow to enable MSI interrupt depending on the type of device used. For MSI interrupt handling for FPGA devices, you can refer to the following link for more details on the MSI interrupt generation and handling flow. https://fpgawiki.intel.com/wiki/Handling_PCIe_Interrupts#Enable_MSI For now, I cannot find anything wrong with your steps. I will need more information such as following to understand the failure you are facing. i. EP and RP used ; are both using FPGA. If yes, which device ii. PCIe interface used; AVMM, AVST or others iii. Signal tap all Avalon ST (both Tx and Rx signals) or txs interface signals if using AVMM: Ex: tx_st_data, tx_st_eop, tx_st_sop, tx_st_empty, tx_st_ready, tx_st_valid, tx_st_err, tx_st_parity, rx_st_data, rx_st_eop, rx_st_sop, rx_st_empty, rx_st_ready, rx_st_valid, rx_st_err, iv. The MSI handling flow in your system As for checking MSI interrupt generation, you could either use a protocol analyzer to determine the type of TLP or check the Avalon ST interface or txs in signaltap. Please let me know if you understood my reply and have further questions. Regards, Nathan
0 Kudos