Symptom: DMA reads hang after 10 seconds of operation. Link is healthy. No AER errors. LTSSM in L0.
Check completion credit counters — are they exhausted?
Count outstanding non-posted requests vs completion buffer size.
Look for completion timeout in config space.
Check the failing TLP size against requester MPS, downstream capabilities/configuration and any bridge or switch limits; do not require every function's field to match.
Capture TLP log: are completions being returned?
Confusing credits with link width.
Debugging endpoint logic when credits are the bottleneck.
Ignoring completion credit pool separate from request credits.