How to map PCI RID to a custom ITS Device ID instead of using Stream ID?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to map PCI RID to a custom ITS Device ID instead of using Stream ID?

274 Views
Austinn
Contributor II

Hi,

I am working on the LX2160A SoC. To my understanding, when a PCI peripheral or function triggers an MSI interrupt, it perform a PCI memory write (via a TLP), and the MSI mechanism extracts the Requester ID (RID) from the TLP header. This RID is then matched to a stream ID. All devices and functinons downstream of the PCI controller uses the same stream ID. This stream ID is then used as the device ID in the Interrupt Translation Table.

My questions are:

1. Can the stream ID be replaced with a custom ID so that there is a unique device ID for each BDF?

2. Where is the RID-to-stream ID mapping and how is this stream ID being forwarded to the ITS?

Please correct me if my understanding is incorrect. I believe Linux achieved this goal of one device ID for each BDF by using msi-map. Though I don't see where it overrides the stream ID with the custom ID and how this ID is forwarded to ITS.

Thanks,

Labels (1)
Tags (4)
0 Kudos
Reply
3 Replies

204 Views
yipingwang
NXP TechSupport
NXP TechSupport

Yes, it can be achieved by using the msi-map property in device tree. which allow mapping each RID to a unique Device ID. Which will bypass the default behavior. On the LX2160A, U-Boot typically sets up the msi-map during early boot and embeds it into the device tree via fixup.

0 Kudos
Reply

188 Views
Austinn
Contributor II

Can you let me know the how to exactly map this? Mirroring this msi-map on QNX didn't give us the expected results. Would we have to set the PCIe Look Up Table (PCIe_LUT) or something in particular?

 

Thanks,

Austin

0 Kudos
Reply

171 Views
yipingwang
NXP TechSupport
NXP TechSupport

Yes, In background Linux system using msi-map where GIC/ITS, MSIs are routed using StreamID with PCIe LUT and send the interrupt to right processor/core. In QNX you may need to configure PCIe LUT explicitly to achieve similar behavior, if it is handled by QNX framework.

0 Kudos
Reply