Hello,
We are using PCIe interface of our 6678 DSP with no problem. We have configured DSP as Root Complex and FPGA as End Point.
Now, we need to enable MSI functionality(EP will send interrupt to the RC) and I have some questions about this issue:
- As far as I understand there are 2 interrupt controller mechanisms inside DSP. First one is the one which is inside each core and accepts 128 events(Primary Events) and outputs 12 of them to the hardware interrupt inputs of the main core. Second interrupt controller is independent of the cores and serves for device level events(Secondary Events) and is called CorePack INTC. There are 4 CPINTCs, and they feed INTC of the cores.
MSI events are among primary events, Legacy PCI interrupts are among secondary events.
So, if I use MSI as source of interrupts, do I need to configure CorePack INTC ? - At the 2.13.5.2 of SPRUGS6A section of (Keystone Architecture PCIe) document, it says " Before the end point devices can issue MSI interrupts, the MSI address and data registers must be configured."
With which data and address information should I configure EP's MSI data and MSI address registers ? I guess I must configure those registers, with the address of my DSP's MSI_IRQ register; and data as 0 if I want to use MSI 0 interrupt. Am I right ? - Basically, MSI interrupt packets are write transaction packets with some specific information. For getting MSI packets, do I need to enable inbound translation mechanism of DSP ? (Until now, because of we didn't use it, we didn't take care of inbound translation for DSP. We were just doing outbound translation)
- Is EOI procedure just for Legacy Interrupts ? Do I need to implement EOI procedure even if I use MSI functionality ?
- I want to test MSI functionality of my DSP without getting packets from EP. From the SPRUGS6A document, I understand I can use MSI0_IRQ_STATUS_RAW register for this purpose. Right ?
Also, I read in one of threads that there is a typo about setting-clearing of these registers. For clarifying the issue, could you write down the setting values for each of registers MSI0_IRQ_STATUS_RAW, MSI0_IRQ_STATUS, MSI0_IRQ_ENABLE_SET, MSI0_IRQ_ENABLE_CLR.
Thanks in advance,
Koray.