2
\$\begingroup\$

In the PCIe standard they wrote the TLP messages may have digest section.

What is the digest of a TLP message described in the PCIe standard?

\$\endgroup\$

1 Answer 1

6
\$\begingroup\$

A TLP Digest is an optional 32-bit DWORD field placed at the end of a transaction layer packet which contains a 32-bit ECRC (standard CRC32 with 0x04C11DB7 polynomial and 0xFFFFFFFF initial remainer and result xoring). The ECRC is calculated for the whole TLP (*) excluding the digest.

This allows for error checking of the packet in the transaction layer to make sure nothing was corrupted in transit.

The digest is optional, and if used its presence is indicated by setting the TD bit (bit 15) of the TLP header. If unused, the TD bit is 0 and the digest DWORD is omitted from the packet - i.e. not sent at all. Packets with a digest are one DWORD longer than those without.

If a receiver doesn't support processing the digest, it must simply ignore it. If a sender reports that it supports digests and they are enabled by software, it must apply them to all packets it sends.

Note that when calculating the CRC certain fields such as the EP bit (packet poisoned) and bit 0 of the Type field must be masked to 1 for the purposes of calculation (original value is sent) as these are variable fields that can change after the packet is sent.


(*) Note that when calculating the CRC certain fields such as the EP bit and bit 0 of the Type field must be masked to 1 for the purposes of calculation (original value is sent) as these are variable fields that can change after the packet is sent.

\$\endgroup\$
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.