The conventional hierarchy contains a root complex, switches and endpoints. Memory requests use address routing, configuration requests use hierarchy/function routing, and completions use requester identity. Do not use bus/device/function routing as the explanation for every TLP. Record both the route and transaction context when reconstructing a failure.
ATS (Address Translation Services) and PASID enable shared virtual addressing between host and device — adds translation layer complexity.
Configure each function's MPS within its capability and ensure requesters never emit a payload larger than their configured/path-legal limit; values need not be numerically identical at every function.
Relaxed ordering and ID-based ordering affect multi-function devices.
AER (Advanced Error Reporting) is the first stop for error debug.