I have been trying to get PCIe multicast to work with 3 Orins.
The setup looks like this:
Orin as Root Complex => |=> Orin Endpoint1
=>Orin Endpoint2
I also tested the exact same thing with Intel hosts as root:
Intel PC as RC => | => Orin Endpoint1
\ => Orin Endpoint2
When I use an Intel system (multiple tested) PCIe multicast works.
When we replace the Intel with an Orin multicast fails.
I can share the details and even the tools used to enable PCIe multicasting should someone be interested.
The question for the PCIe Tegra driver developer(s) is if they are aware of any problem or not yet implemented feature that prevents PCIe MC from working.
Something I noticed that is different is that Intel PCs show a single PCIe domain while the Orin will place the BCM bridges of the PCIe expander cards in a new domain: 0005:00:00.0
I don’t know for sure if this causes the problem but I think it’s unlikely.
Why PCIe multicast works with any PC and not with Orin is the question.
Multicast traffic that is written to 0x470000000 will be sent to all bridges that have multicast enabled after which it arrives on Orin due to it automatically being copied to the overlay. This works well, as long as the root complex is using an Intel based system.
We noticed yesterday that any ARM64 based system used as root complex fails. So it seems to be related to the ARM64 platform. We are still investigating why this doesn’t seem to work with ARM64 systems. Theoretically it should work just like it works with an Intel based RC since most of the heavy lifting is done by the bridge chips themselves.