I don't think this is correct. A Root Port defines a hierarchy
(I'm looking at PCIe r4.0, sec 1.3.1). The capability to route
peer-to-peer transactions *between* hierarchy domains is optional. I
think this means a Root Complex is not required to route transactions
from one Root Port to another Root Port.
This doesn't say anything about routing between two different devices
below a Root Port. Those would be in the same hierarchy domain and
should follow the conventional PCI routing rules. Of course, since a
Root Port has one link that leads to one device, they would probably
be different functions of a single multi-function device, so I don't
know how practical it would be to test this.
Yes, given that there's only one device below a root port it will either
be a switch or a multi-function device. In the multi-function device
case, I'm pretty sure the spec disallows routing-to-self so doing a P2P
transaction in that sense isn't going to work unless the device
specifically supports it and intercepts the traffic before it gets to
But, if we're talking about multi-function devices it should be able to
do everything within it's own driver so it's not exactly Peer-to-Peer.
Still, if someone has such hardware I think it's up to them to add
support for this odd situation.