The IOMMU may implement a RAS architecture to enable error detection, logging (severity, nature, and location), and error reporting.
Error Classifications
- Correctable Errors: Errors in the IOATC (I/O Address Translation Cache) may be corrected by reloading cached in-memory data structures. These should not affect IOMMU functioning.
- Critical State Corruption: Errors corrupting internal state (e.g.,
ddtp, cqb registers) may lead to a failed state. In this state, the IOMMU may request the IO bridge to abort all incoming transactions. - Internal Data-path Errors: Errors within internal data paths may be uncorrectable but contained within the specific transaction being processed.
- Data Poisoning: If a memory controller or cache detects an uncorrectable error in in-memory structures (DDT, PDT, or page tables), it may signal the error to the IOMMU via data poisoning. The effects are typically contained to the transaction that accessed the corrupted data.
Reporting Faults via the Fault Queue (FQ)
If an error affects only the current transaction but allows the IOMMU to continue service, the IOMMU should abort the transaction and queue a fault record in the FQ. For PCIe, a Completer Abort (CA) response is appropriate. Use the following cause codes for reporting:
| Cause Code | Description |
|---|
268 | DDT data corruption |
269 | PDT data corruption |
270 | MSI PT data corruption |
271 | MSI MRIF data corruption |
272 | Internal data-path error |
274 | First/second-stage PT data corruption |
Note: If the IO bridge cannot uniquely signal deferred errors, the IOMMU may report them as general access faults instead of using these specific cause codes.