thanavignesh
New Contributor
2 years agoPCIe
How can the user determine the last completion TLP (Transaction Layer Packet) of a memory read request when the completion TLPs are generated based on varying max_payload_size?
Hi @thanavignesh,
Thanks for reaching out to the Intel Community.
Yes, the completions for Memory Read Requests must not include more data than permitted by Max_Payload_Size, which is according to the PCIe Base Specification 4.0. The Memory Read Requests may be completed with one, or in some cases, multiple Completions. Additionally, the Multiple Memory Read Completions for a single Read Request must return data in increasing address order.
For each Memory Read Completion, the Byte Count field must indicate the remaining number of bytes required to complete the Request including the number of bytes returned with the Completion, except when the BCM bit (Byte Count Modified) is Set.
Besides, when a Read Completion is generated with a Completion Status other than Successful Completion:
- No data is included with the Completion.
a. The Cpl (or CplLk) encoding is used instead of CplD (or CplDLk).
- This Completion is the final Completion for the Request.
a. The Completer must not transmit additional Completions for this Request. Example: Completer split the Request into four parts for servicing; the second Completion had a Completer Abort Completion Status; the Completer terminated servicing for the Request and did not Transmit the remaining two Completions.
- The Byte Count field must indicate the remaining number of bytes that would be required to complete the Request (as if the Completion Status were Successful Completion).
I hope these address your questions well.
Thanks.
Best Regards,
VenTing_Intel