IOMMU / REQUEST IDENTITY
What did the device actually send?
Separate client intent from observed DMA, translation faults and interrupt delivery. Explore 112 test recipes across AMD IOMMU, Arm SMMUv3 and PCIe.
Watch an interrupt travel from the device to a core → (animated showcase)
What claims does this page make? 3 points
- Spec rule: the default PASID 0 for untagged DMA with GIoV (AMD 48882 §2.2.9), Table 44 fault reporting and the Arm event-queue overflow rules (IHI 0070 H.a §7.4) are written requirements.
- Platform assumption: PCIe 4 KiB request splitting and byte-enable rules come from the PCIe specification (unchecked here), and MPS, MRRS and PASID support depend on the actual device and platform.
- Teaching model: the PASID classifier and request planner work on values you type in, and the 112 recipes name expected outcomes rather than guaranteed timing.
CONTROLLED EVIDENCE EXERCISE
Enabled does not mean sent
Enter observed header facts. This is a classifier for an AMD V=1 / TV=1 profile, not a packet capture or a DMA execution. “Guest translation active” means the support, global and DTE gates are satisfied.
Applied input and classification JSON
Sources: AMD 48882 3.11 Table 7, Tables 44/50/51, §2.2.9. Multiple findings are listed without claiming a first-error priority. Open the IRTE and architecture workbench.
EXECUTABLE REQUEST GEOMETRY
One descriptor, several requests
A page-aligned frame does not require a page-aligned DMA byte address. This planner separates the descriptor extent, PCIe 4 KiB boundaries, DW byte enables and MPS/MRRS. It does not access memory.
| Request / first byte | Enabled / DW bytes | First / Last BE | Length field | Data preview |
|---|
Contiguous ordinary Memory Reads/Writes only. No raw TLP codec, sparse byte enables, Completion splitting or bus timing. MPS/MRRS are chosen teaching inputs, not detected capabilities. Intel PCIe guidance; AMD PG054 checks.
Separate the request, the translation and the evidence
A client can advertise PASID support and enable it without sending a PASID on a particular request. First establish what the client actually issued, then evaluate how that request is handled by the selected IOMMU configuration. A fault is useful evidence, but it is not a packet capture.
For each run, keep four records: the intended workload, the observed request, the translation/configuration state, and the result. Include RequesterID or StreamID, PASID/SubstreamID presence separately from its numeric value, address type, Read/Write, byte range, and relevant privilege attributes. Keep an explicit unknown value when capture evidence is missing. A reported zero is not sufficient to distinguish “no PASID” from “PASID 0.”
The PASID trap: three different outcomes
In the selected AMD profile, V=1 and TV=1. Untagged ordinary DMA normally follows host translation. With supported and meaningful GIoV plus active guest translation, the IOMMU supplies effective PASID 0 instead. Explicit tagged traffic uses the observed PASID. Section 2.2.9 requires nonzero explicit PASIDs when mixing that traffic with Guest I/O Protection. Untagged MSI in the 0xFEEx_xxxx range remains an interrupt-remapping request. These distinctions come from 48882 3.11, Table 7 and §2.2.9, not an assumption that every enabled client sends tagged DMA.
Use disjoint owned mappings to distinguish contexts: put a different sentinel in PASID 0 and the expected explicit context. Run a positive control, then the deliberate mismatch. A wrong but valid PASID can succeed; an error-only oracle misses that failure. This is a test-design recipe, not permission to access another process’s memory.
Structures with similar purposes are not interchangeable
| Question | AMD 48882 3.11 | Arm SMMUv3 H.a |
|---|---|---|
| Which requester? | DeviceID selects DTE; DomainID identifies host translation context | StreamID selects STE; SubstreamID can select a CD |
| Which address spaces? | Guest GCR3/page tables and host I/O page tables | Stage 1 VA→IPA and Stage 2 IPA→PA |
| Which maintenance? | DTE, IOMMU page, endpoint ATC (AMD: remote IOTLB) and interrupt-table invalidations | CFGI for configuration; TLBI for translations; ATC invalidation for endpoints |
| How is work completed? | Completion mechanisms and command-specific ordering | Command-specific consumption guarantees; CMD_SYNC for prior work on its queue |
| How is a fault resumed? | PRI/PPR request and response flow when applicable | On-chip Stall uses StreamID/STAG with CMD_RESUME; PCIe PRI uses a different response protocol |
| Which interrupt machinery? | IRTE, x2APIC formats, guest virtual APIC state and GA log | SMMUv3 is not an AMD interrupt remapper; GIC/ITS translation is a separate architecture |
Arm material is pinned to IHI 0070 H.a, 6 March 2026. Its document revision does not imply every optional SMMUv3.5 capability is implemented. The executable backend is a non-secure 4 KiB-granule teaching profile; it is not an implementation of all descriptor formats, security states or GIC/ITS.
Design a negative test that identifies the layer
- Prove submission. Bus mastering, the client descriptor and readiness must permit a request to be issued. A client-side rejection is not proof of IOMMU enforcement.
- Prove identity and routing. Check the observed requester, PASID presence, AT and target path. A peer path or alias can invalidate the intended isolation test.
- Establish a positive control. Show that the same owned fixture works with the intended permissions and configuration.
- Inject one condition. Change presence, permission, identity, descriptor encoding, queue state or interrupt control independently first.
- Inspect independent observations. Capture bytes changed, returned data, response attributes, event records, status bits and notification delivery separately.
- Recover causally. Preserve evidence; repair the backing state; publish and invalidate the appropriate caches; observe completion; then issue a new request or use the correct resume protocol.
Repeat the core matrix over Read/Write, tagged/untagged, ordinary/ATS/pretranslated, cold/warm caches, enabled/suppressed reporting, and first/last bytes around a page boundary. Test the Cartesian product selectively according to feature prerequisites: a large number of combinations is not evidence of normative coverage. Keep unsupported, ignored and required-zero fields distinct.
Alignment has three meanings
A translation frame must satisfy its page/block format. A byte address inside that frame may have a nonzero offset. A PCIe Memory Request has its own 4 KiB boundary and DW/byte-enable rules, independent of whether the IOMMU uses a 4 KiB page or a 2 MiB/1 GiB mapping. A descriptor spanning a boundary can be legal when the client splits it into valid requests. The packet planner illustrates contiguous Memory Reads/Writes only; it does not model sparse byte enables, AtomicOps or Completion splitting.
Errors are not always one event per request
AMD Table 44 distinguishes ordinary untranslated accesses from ATS Translation Requests: a translation failure can produce a response with no permissions without the ordinary DMA event. SA/SE controls and available log space also affect observability. Tables 43–55 and the relevant event layout determine the oracle; “any reserved bit gives ILLEGAL_DEV_TABLE_ENTRY” is incorrect.
Arm configuration errors, translation faults and external-abort/global-error paths are separate. For multiple faults, consult H.a §7.3.23 instead of inventing a universal first-error order. Event merging and asynchronous visibility can also defeat a naïve one-request/one-record assertion. The page’s recipes state expected families or permitted outcomes, not guaranteed notification timing.
Queue and recovery traps worth keeping in every plan
| Condition | What to assert |
|---|---|
| AMD command buffer full | Software prevents overwriting unread commands. Do not invent CmdBufOverflow. |
| AMD log overflow | Preserve unread records and use the particular log’s stop/disable/clear/restart procedure. Dual banks share an engine. |
| Arm EVTQ loses a terminated event | Overflow marks diagnostic loss. After space is freed, new records can arrive even before overflow acknowledgement. |
| Arm EVTQ cannot record a stalled fault | Retain the transaction; it does not cause overflow merely by waiting. Retry when the queue becomes writable; the result can change. |
| Arm PRIQ overflows | New entries are inhibited while overflow is active. Last=1 requests have auto-response behaviour; Last=0 and Stop Marker require different handling. |
| Arm CMDQ errors | Preserve the command and consumer position. Correct the cause and use matching GERROR/GERRORN semantics; this is not AMD W1C. |
Sources: AMD §§2.4–2.7; Arm §§3.5, 3.12.2, 4.1.3–4, 7.4–7.5 and 8.1. The basic Arm model uses a software admission guard for PRIQ-full; the full automatic PRIQ overflow response matrix remains a reference recipe, not an executed feature.
Interrupt negatives need their own evidence
Record interrupt address/data, requester identity, the selected DTE interrupt controls, calculated IRTE index, format and cached/backing state. Test the last valid index and first invalid index, RemapEn=0, applicable reserved fields and interrupt type, table-fetch failure, and capability/enable gates for 128-bit formats. Then test retargeting with the applicable interrupt-table invalidation. Data-TLB invalidation is not a substitute.
An interrupt with a PASID is an AMD Table 44 interrupt-context fault. A Read or non-posted Write to interrupt space instead uses the Table 50 prohibited-access rules. When Guest I/O Protection is enabled, an untagged MSI must still reach the interrupt path. For GA, distinguish a lost log entry from a pending interrupt in the virtual APIC backing page; log consumption is not guest EOI. The raw-records workbench has the packed IRTE exercises.
PCIe scope and outstanding specification work
The AMD and Arm specifications were read directly; the PCIe Base Specification was not. PCIe information here is limited to cited public PCI-SIG FAQs and primary implementation documentation (AMD PG054 and Intel’s 710 Series datasheet). These sources are useful cross-checks, not a claim of compliance with a newer Base revision.
No finite teaching catalogue covers every edge case. The status and source beside each recipe explain what is demonstrated and what remains to be verified.
Negative-test catalogue
Recipes describe an injection, an observation and a recovery. “Related semantic lab” means selected behaviour is demonstrated; it does not mean the complete recipe was executed. AMD cards marked “Also in Faults & recovery” repeat the Faults & recovery checklist.
112 scenarios
Reserved DTE bitAMD · DTE · Also in Faults & recovery
- Inject / compare
- Set a known reserved bit with its validity conditions active.
- Observe
- ILLEGAL_DEV_TABLE_ENTRY; ordinary translation must not copy bytes.
- Recover
- Restore the field, publish, invalidate cached DTE state and synchronize.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.2 / Table 43
- Scope
- Executable: DTE bit 2. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Reserved IoCtl / IntCtlAMD · DTE · Also in Faults & recovery
- Inject / compare
- IoCtl=11b, or a reserved interrupt-control encoding under its valid controls.
- Observe
- ILLEGAL_DEV_TABLE_ENTRY; classify by the active field, not simply by where the word is stored.
- Recover
- Repair the field and invalidate the relevant configuration cache.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / Table 43
- Scope
- IoCtl executable; IntCtl reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Reserved IntTabLenAMD · DTE · Also in Faults & recovery
- Inject / compare
- Use 11xxb with applicable interrupt controls active.
- Observe
- Illegal DTE encoding, distinct from an IRTE index beyond a valid table.
- Recover
- Restore a supported length and validate the actual allocation.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / Table 43
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Reserved paging ModeAMD · DTE · Also in Faults & recovery
- Inject / compare
- Mode=111b with V=1 and TV=1.
- Observe
- IO_PAGE_FAULT under Table 44; do not classify every reserved DTE encoding as ILLEGAL_DEV_TABLE_ENTRY.
- Recover
- Use a supported mode/root and invalidate cached context.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.3 / Table 44
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
V=0 and TV=0 are differentAMD · DTE · Also in Faults & recovery
- Inject / compare
- Compare an ordinary untranslated request with ATS, then TV=0 when a walk is required.
- Observe
- V=0 can bypass ordinary DMA; ATS with V=0 is invalid. TV=0 can fault a required untranslated walk.
- Recover
- Verify request type before choosing an expected event.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.1 / Tables 44, 51
- Scope
- Executable controls. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
DeviceID beyond table sizeAMD · DTE · Also in Faults & recovery
- Inject / compare
- Request a device entry outside the programmed table extent.
- Observe
- IO_PAGE_FAULT with response depending on memory, ATS or command context.
- Recover
- Validate device ownership, table size and segmentation; do not mask DeviceID into another device.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Host PR=0 / guest P=0AMD · Translation · Also in Faults & recovery
- Inject / compare
- Clear presence on the data leaf.
- Observe
- No bytes from the rejected segment. AT=00 may log IO_PAGE_FAULT; ATS returns insufficient permission without that ordinary DMA event.
- Recover
- Restore only owned backing, publish, invalidate and observe completion before retry.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 16, 44 / §2.2.7
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PR=0 with other bits setAMD · Translation · Also in Faults & recovery
- Inject / compare
- Set a reserved field in the same absent host entry.
- Observe
- Presence determines that this is not a valid page descriptor; do not blindly validate it as PR=1.
- Recover
- Test the absent and present forms separately to isolate the reserved-bit check.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 16–18
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Read / write permission matrixAMD · Translation · Also in Faults & recovery
- Inject / compare
- Toggle guest R/W, host IR/IW and DTE IR/IW independently.
- Observe
- Read succeeds on a write-protected mapping; denied access copies no bytes. Effective permission includes the traversed parents.
- Recover
- Restore only intended permissions; do not let PRI upgrade an unrelated restriction.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.7 / Table 44
- Scope
- Executable leaf/DTE cases; parent tests in suite. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Present PTE reserved bitAMD · Translation · Also in Faults & recovery
- Inject / compare
- Set host leaf bit 52 in the v1 fixture, or bit 13 in a 2 MiB guest leaf.
- Observe
- IO_PAGE_FAULT; unlike a hardware table-read failure.
- Recover
- Repair the exact format/size-dependent field and invalidate.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44 / guest leaf formats
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Invalid NextLevel / skipped address bitsAMD · Translation · Also in Faults & recovery
- Inject / compare
- Use a non-descending next level, exceed capability, or set address bits for a skipped level.
- Observe
- IO_PAGE_FAULT; a skipped level does not accept any index.
- Recover
- Fix the walk structure and supported depth.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.3 / Table 44
- Scope
- NextLevel executable; skip checks in DMA lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Invalid leaf size / frame alignmentAMD · Translation · Also in Faults & recovery
- Inject / compare
- Use a leaf size inconsistent with its level or a nonaligned frame.
- Observe
- Fault for an invalid descriptor; normal byte offsets remain legal.
- Recover
- Align the frame for its leaf and verify the full mapped extent.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44
- Scope
- Alignment controls and model tests. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Address width / canonicalityAMD · Translation · Also in Faults & recovery
- Inject / compare
- Set bits above the selected host-root width or use a noncanonical guest address.
- Observe
- IO_PAGE_FAULT for the applicable walk.
- Recover
- Correct the request/configuration; never truncate it into another mapping.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44 / §2.2.6
- Scope
- Guest canonicality executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PASID / GCR3 limitsAMD · Translation · Also in Faults & recovery
- Inject / compare
- Use invalid GCR3 V, an unmapped PASID, or exceed the architectural PASmax limit.
- Observe
- Missing/invalid guest lookup can fault. The UI GLX-capacity guard is a separate software rejection, not an emulated PASmax event.
- Recover
- Validate capability and allocation independently; prevent context aliases.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.6 / Table 44
- Scope
- GCR3 executable; PASmax reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Nested metadata failureAMD · Translation · Also in Faults & recovery
- Inject / compare
- Remove a host mapping for a guest page-table page.
- Observe
- Table-fetch translation fails before data DMA; retain stage and fetch address evidence.
- Recover
- Repair the metadata mapping and its cache state, not just the final payload page.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.6.8
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Execute / privilege denialAMD · Translation · Also in Faults & recovery
- Inject / compare
- Issue an instruction fetch through NX or a user request against supervisor-only mappings with applicable features active.
- Observe
- Protection failure; request attributes and enabled capabilities affect the diagnosis.
- Recover
- Validate Exe/PMR, guest protection controls and every relevant permission.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.6.1–2 / Table 44
- Scope
- Reference; not a full execute/privilege emulator. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
SA / SE suppressionAMD · Reporting · Also in Faults & recovery
- Inject / compare
- Set SA for memory page faults or exercise SE suppression of repeated failures.
- Observe
- Access can fail without a new event. SA does not suppress interrupt/command faults. Absence of a record is not evidence of success.
- Recover
- Check suppression and log enable/overflow before judging the test outcome.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / §2.5
- Scope
- SA executable; SE reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Device-table backing failureAMD · Hardware · Also in Faults & recovery
- Inject / compare
- Inject abort, poison or another specified hardware failure on a DTE fetch.
- Observe
- DEV_TAB_HARDWARE_ERROR, not an illegal DTE-format error.
- Recover
- Preserve hardware evidence and repair backing/accessibility before retry.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.4 / Table 45
- Scope
- Synthetic injection. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Page-table backing / A-D update failureAMD · Hardware · Also in Faults & recovery
- Inject / compare
- Inject a hardware failure during a page-table access or applicable atomic A/D update.
- Observe
- PAGE_TAB_HARDWARE_ERROR; an inaccessible table is different from a readable PR=0 entry.
- Recover
- Repair memory/lifetime/coherency and inspect affected access type.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.5 / Table 46
- Scope
- Synthetic fetch injection; A/D reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Unknown opcode / reserved bitAMD · Command · Also in Faults & recovery
- Inject / compare
- Queue opcode 0, or set a reserved bit of an ordinary command.
- Observe
- ILLEGAL_COMMAND_ERROR halts command processing. Other IOMMU activity is not automatically halted.
- Recover
- Observe CmdBufRun=0, disable, repair command/backing/pointers, then enable.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4 / §2.5.6
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Unsupported optional commandAMD · Command · Also in Faults & recovery
- Inject / compare
- Disable IotlbSup, PreFSup, PPR support/enables, IASup or vIOMMU capability/enables, then issue the affected command.
- Observe
- Illegal command for the unsupported/disabled operation; avoid pretending optional commands always exist.
- Recover
- Use capability-driven command selection or restore the required configuration.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4 / Table 48
- Scope
- Executable capability switches. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Command-fetch backing failureAMD · Command · Also in Faults & recovery
- Inject / compare
- Inject command read abort/poison.
- Observe
- COMMAND_HARDWARE_ERROR halts command processing.
- Recover
- Use the event’s command address; hardware Head may already have advanced due to prefetch. Repair while stopped.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4 / §2.5.7
- Scope
- Synthetic injection. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Peripheral invalidation timeoutAMD · Command · Also in Faults & recovery
- Inject / compare
- Withhold a device invalidation response.
- Observe
- IOTLB_INV_TIMEOUT; completion/page reuse remains unsafe. Do not infer the two command-halt errors or invent an acknowledgment.
- Recover
- Keep affected DMA blocked and follow device/platform recovery policy.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.8 / §2.4.11
- Scope
- Executable outstanding-response fixture. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-ATS-01
Completion before required invalidationAMD · Command · Also in Faults & recovery
- Inject / compare
- Queue a wait while omitting a required IOMMU or device invalidation.
- Observe
- The wait may complete correctly while the software reuse protocol remains wrong.
- Recover
- Test cache state and observed completion, not only Head=Tail.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4.1 / §2.4.11
- Scope
- Existing command-sequence lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-DMA-02
Incoming PRI disabledAMD · PRI · Also in Faults & recovery
- Inject / compare
- Send PRI while required global/per-device PRI support or enable is absent.
- Observe
- INVALID_PPR_REQUEST, RX=0 for the specified conditions; not a successful PPR entry.
- Recover
- Check device capabilities, global enables, DTE.PPR and the original request.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 52 / §2.5.10
- Scope
- PPRLogEn=0 executable; other gates reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Invalid PPR response contextAMD · PRI · Also in Faults & recovery
- Inject / compare
- Issue COMPLETE_PPR_REQUEST GN=1 without guest translation, or issue it with PPR globally disabled.
- Observe
- GN/context case: INVALID_PPR_REQUEST, RX=1. Disabled PPR command: illegal command / halt.
- Recover
- Repair response context and enable state; do not confuse RX=0 and RX=1.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 52 / §2.5.10
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Wrong CompletionTag / groupAMD · PRI · Also in Faults & recovery
- Inject / compare
- Use a tag that does not match the software work item.
- Observe
- Software protocol failure; §2.4.7 states that the IOMMU does not validate CompletionTag contents. Do not assert an automatic INVALID_PPR_REQUEST.
- Recover
- Match original DeviceID, applicable PASID and group before submission.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4.7
- Scope
- Reference; existing mock work-item guard. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Bad IRTE or interrupt requestAMD · Interrupt · Also in Faults & recovery
- Inject / compare
- Out-of-range index, reserved IRTE fields/type, RemapEn=0, or disallowed interrupt attributes/PASID.
- Observe
- IO_PAGE_FAULT in the interrupt-remapping context; its flags differ from a memory fault.
- Recover
- Repair the correct interrupt entry/policy and invalidate its cache; memory PTE repair is unrelated.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 19–22, 44
- Scope
- Index/enable in main lab; other formats reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Prohibited memory / ATS requestAMD · Request · Also in Faults & recovery
- Inject / compare
- Pretranslated request with I=0 or V=0; forbidden port-I/O, interrupt-space or system-management access; malformed request controls.
- Observe
- INVALID_DEVICE_REQUEST for the listed context, with the specified target/master abort response.
- Recover
- Validate request class, device controls and address-space policy.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 50–51, 64
- Scope
- V=0 and I=0 ATS executable; wider matrix reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Command producer catches unread HeadAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Try to publish more commands than free slots.
- Observe
- Software must prevent overwrite. AMD has no CmdBufOverflow W1C status bit.
- Recover
- Wait for free space or apply software backpressure; do not fabricate a hardware overflow event.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4
- Scope
- Executable queue-full guard. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Event / PPR / GA overflowAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Fill all usable slots, then attempt one more hardware-produced record.
- Observe
- Incoming record is lost; unread records remain. Family-specific overflow status prevents further logging until recovery.
- Recover
- Preserve/drain, observe Run=0, disable, repair allocation/pointers, clear overflow W1C, enable.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.1 / §2.6.2 / §2.7.4
- Scope
- Executable A/B-selected and GA fixtures. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Head passes Tail / wrong pointer ownerAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Software consumes beyond available log records, writes hardware-owned Tail, or writes command Head while running.
- Observe
- Software misuse; numeric pointer order alone is not an architectural error detector. Some invalid register operations are undefined.
- Recover
- Use modular occupancy plus ownership; reject the unsafe software operation before writing MMIO.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4–2.7 / pointer register definitions
- Scope
- Executable guard; no invented hardware fault. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Normal wrap / empty / fullAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Wrap Head and Tail through zero while preserving occupancy.
- Observe
- Head may numerically exceed Tail and still be valid. Equal Head/Tail means empty in the selected AMD convention.
- Recover
- Test entry-byte alignment, one reserved slot, FIFO order and bounds.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4–2.7
- Scope
- Executable wrap preset. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Restart ordering / W1C independenceAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Try enable before repair, modify while Run=1, or acknowledge notification without fixing the cause.
- Observe
- Notification clear, pointer consume, repair and restart are separate transitions.
- Recover
- Assert the actual stop, disable, repair, W1C and enable sequence; retry DMA separately.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4 / §2.5.1 / §2.6.2 / §2.7.4
- Scope
- Executable. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Disabled / inaccessible event reportingAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Disable logging, fill it, or inject failure on the log’s backing writes.
- Observe
- The original failure can occur without a durable event-log entry. Hardware event registers may preserve specified failures.
- Recover
- Check log state and hardware event registers; preserve the first available evidence.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.16.2
- Scope
- Disabled/overflow executable; write-abort registers reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Dual log / early overflow / auto-responseAMD · Buffers · Also in Faults & recovery
- Inject / compare
- Exercise active-bank selection, capability-gated autoswap, early thresholds and PPR auto-response/Stop markers.
- Observe
- Behaviour depends on supported features and chosen enable mode; do not treat the two banks as independent engines.
- Recover
- Test per-bank overflow, active-bank status and work-item loss/response handling.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.17 / §2.6.1 / §2.6.4
- Scope
- Selected-bank fixtures; autoswap/auto-response reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Lost GA notification with pending vectorAMD · GA · Also in Faults & recovery
- Inject / compare
- Overflow GA while an interrupt targets a non-running guest.
- Observe
- GA record can be lost while the guest APIC backing page still retains the pending interrupt. GALOverflow alone does not generate a fresh GA interrupt.
- Recover
- Reconcile backing state; draining the GA log is not guest ISR/EOI.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.7 / Status bit 9
- Scope
- Executable pending-state/overflow fixture. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Guest event pair errorAMD · Optional · Also in Faults & recovery
- Inject / compare
- Set reserved bits in supported INSERT_GUEST_EVENT.
- Observe
- GUEST_EVENT_FAULT plus companion payload; two slots in command and event paths.
- Recover
- Preserve pairing across wrap and repair the injection command.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4.9 / §2.5.12
- Scope
- Executable semantic pair. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Virtualized-IOMMU backing failureAMD · Optional · Also in Faults & recovery
- Inject / compare
- Inject a private-memory access error for a virtual context.
- Observe
- VIOMMU_HARDWARE_ERROR with feature-specific source/type evidence; virtual processing may halt.
- Recover
- Repair that context and its enable/run lifecycle; use RESET_VMMIO where applicable.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.13 / §2.4.10
- Scope
- Command effect executable; hardware failure reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
SNP RMP protection versus hardware failureAMD · Optional · Also in Faults & recovery
- Inject / compare
- Separate RMP check rejection from an RMP memory-access failure.
- Observe
- RMP_PAGE_FAULT versus RMP_HARDWARE_ERROR; neither is a generic absent PTE.
- Recover
- Inspect RMP-specific fields and ownership/lifetime, with the platform recovery procedure.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.14–15
- Scope
- Reference; no SNP/RMP emulator. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Multiple simultaneous errorsAMD · Reporting · Also in Faults & recovery
- Inject / compare
- Inject more than one violation with cache/fetch state controlled.
- Observe
- The spec may permit one of several detected events. Do not assert an invented total priority order.
- Recover
- Use isolated injections first; record allowed outcomes for combined cases.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.16.1
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Counter reaches zeroAMD · Reporting · Also in Faults & recovery
- Inject / compare
- Enable an event counter and let it wrap to zero.
- Observe
- EVENT_COUNTER_ZERO (0xA): informational, not a page fault.
- Recover
- Consume the record and evaluate measurement policy without unnecessary engine restart.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.11 / Figure 66 / Table 68
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Conditional CXL fieldAMD · DTE / 3.11 · Also in Faults & recovery
- Inject / compare
- Set CXLMemAttr[6:4] while I=0, support/enable is absent, or the non-secure SEV-TIO DTE forbids it.
- Observe
- These are conditional fields, not universally reserved bits, and must be zero here; this fixture reports ILLEGAL_DEV_TABLE_ENTRY (Table 43).
- Recover
- Restore required-zero fields or select a supported profile; validate Table 79 combinations separately.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / §2.13
- Scope
- Missing support executable; CXL completion matrix reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Secure ATS capability and SNP profileAMD · DTE / 3.11 · Also in Faults & recovery
- Inject / compare
- Set SATS without support, or select an incompatible SNP/SnpPageMode0Sup/Mode combination.
- Observe
- Ordinary unsupported SATS is an illegal DTE. SNP mode restrictions distinguish illegal DTE and RMP faults; use §2.12.2.4 capability conditions.
- Recover
- Restore the complete supported profile, including the §2.12.2.4 capability conditions.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / §2.12.2.4
- Scope
- Unsupported SATS executable; SNP reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
GIoV DomainID reuseAMD · Isolation / 3.11 · Also in Faults & recovery
- Inject / compare
- Assign the same DomainID to devices with GIoV=1.
- Observe
- Violates the unique-DomainID software requirement. Do not invent a dedicated hardware fault for this software configuration error.
- Recover
- Allocate separate DomainIDs, invalidate affected state and verify cross-device isolation.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7 / §2.2.9
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Host-only command in guest bufferAMD · Virtualization / 3.11 · Also in Faults & recovery
- Inject / compare
- Issue a command outside the five guest-supported types, including INSERT_GUEST_EVENT or RESET_VMMIO.
- Observe
- Reject the unsupported guest operation; the explicitly host-only examples generate ILLEGAL_COMMAND_ERROR.
- Recover
- Use host command context where required and follow the affected guest error lifecycle.
- Source
- AMD 48882-PUB 3.11, April 2026 · §§2.4.9–10, 2.10.7
- Scope
- Reference; workbench command queue is host context. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Reset without VF reconfigurationAMD · Virtualization / 3.11 · Also in Faults & recovery
- Inject / compare
- Issue RESET_VMMIO then attempt guest operation before appropriate VF controls are reprogrammed.
- Observe
- A command reset alone is not a completed guest recovery protocol.
- Recover
- Reprogram Guest VF Control registers, then follow guest enable/run and ownership rules.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.4.10
- Scope
- Executable reconfiguration-required state. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Wrong guest PRI destinationAMD · Virtualization / 3.11 · Also in Faults & recovery
- Inject / compare
- Change DTE.vIMUEn in the specified vIOMMU case while sending guest GVA PRI.
- Observe
- vIMUEn=1 selects guest PPR; 0 selects host PPR. Looking only at the other log can falsely suggest the request vanished.
- Recover
- Check active guest/host context, proper destination and response ownership.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.10.6
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Outdated IRTE cacheability assumptionAMD · Interrupt / 3.11 · Also in Faults & recovery
- Inject / compare
- Modify GALogIntr or GAPPIDis and expect stale cached copies solely because older documentation omitted them.
- Observe
- These fields are identified as non-cached in §2.2.5.2. Cacheable fields still need the specified invalidation.
- Recover
- Preserve required atomic update rules and classify each field correctly.
- Source
- AMD 48882-PUB 3.11, April 2026 · §§2.2.5.2, 2.3.2
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-IRQ-02
Enhanced invalid-device event decoded as legacyAMD · Secure events / 3.11 · Also in Faults & recovery
- Inject / compare
- Receive a fenced-guest request with the enhanced Type[3] form.
- Observe
- INVALID_DEVICE_REQUEST remains event code 8 but its enhanced fields differ; legacy PASID/type assumptions lose context.
- Recover
- Decode the correct feature-dependent format and preserve virtual-buffer/recovery evidence.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.9.1 / Figure 63
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Secure DTE or RMP evidence lostAMD · Secure events / 3.11 · Also in Faults & recovery
- Inject / compare
- Inject a secure DTE fetch or RMP fault and decode using the older record layout.
- Observe
- The secure fetch S bit and revised RMP fields carry context that the old decoder can miss.
- Recover
- Select the revision/feature-specific format before interpreting fields; repair the actual backing or ownership fault.
- Source
- AMD 48882-PUB 3.11, April 2026 · §§2.5.4, 2.5.14–15
- Scope
- Reference. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Invalid TDI setup or PRI security bitsAMD · SEV-TIO / 3.11 · Also in Faults & recovery
- Inject / compare
- Configure a TDI with Mode=0, use unsupported secure-MMIO page sizes, or send PRI with incorrect XT/T encodings.
- Observe
- Mode=0 is forbidden; secure MMIO RMP coverage is 4 KiB; incorrect PRI encodings produce INVALID_PPR_REQUEST. Do not assign one universal event to all three conditions.
- Recover
- Use ASP-owned secure configuration, required secure guest PPR backing and the firmware/TDISP protocol.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.14 / firmware spec 58271
- Scope
- Reference; no SEV-TIO emulator. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PASID enabled but client sends no prefixAMD · Client identity · Interactive classifier
- Inject / compare
- Enable PASID in the device; configure a tagged workload; capture an untagged Memory Request.
- Observe
- This violates the workload contract, not automatically the IOMMU architecture. With GIoV inactive, the V=1/TV=1 fixture performs host translation.
- Recover
- Check actual header evidence and endpoint descriptor/context selection. Do not use capability enablement as proof of tagged DMA.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7; §2.2.9
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Implicit PASID 0 under Guest I/O ProtectionAMD · Client identity · Interactive classifier
- Inject / compare
- Send untagged ordinary DMA with GIoSup and meaningful GIoV enabled.
- Observe
- The IOMMU supplies effective PASID 0 for guest translation. That is not an observed PASID prefix.
- Recover
- Test GCR3[0] separately from the intended explicit PASID; include unsupported GIoSup and inactive GV controls.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 7; §2.2.9
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Mixed tagged and untagged DMAAMD · Client identity · Test design
- Inject / compare
- Alternate explicit nonzero PASID and untagged requests from one DeviceID with GIoV enabled.
- Observe
- Untagged traffic uses default PASID 0. Explicit traffic selects its own context; both may deliberately map to the same guest tables.
- Recover
- Verify context selection with disjoint owned test mappings before testing intentional sharing.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.9
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PASID field zero in a fault recordAMD · Client identity · Interactive classifier
- Inject / compare
- Inspect a fault record containing a zero PASID value without the original request or validity flags.
- Observe
- Do not conclude that the client sent PASID 0. Some invalid/absent context fields are reported as zero.
- Recover
- Correlate GN/context flags and the captured request with the exact event format.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.3; Table 7
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Wrong valid PASID versus out-of-range PASIDAMD · Client identity · Interactive classifier
- Inject / compare
- Send another allocated PASID, then one beyond PASmax, then a supported but unallocated context.
- Observe
- A wrong but valid PASID can translate successfully into the wrong workload context. Range and lookup faults are separate cases.
- Recover
- Use per-context sentinel mappings and requester ownership evidence; fault-only testing misses wrong-context success.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.6; Table 44
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PASID prefix with guest translation inactiveAMD · Client identity · Interactive classifier
- Inject / compare
- Send a PASID-bearing access while guest translation is unsupported or not enabled for the DeviceID.
- Observe
- Table 50 lists INVALID_DEVICE_REQUEST; this is not an absent guest PTE.
- Recover
- Validate support, GTEn, GV and request class before enabling guest translation.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 5, 24, 50
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
AT is not inferred from successAMD · DMA type · Interactive classifier
- Inject / compare
- Compare AT=00 payload DMA, AT=01 Translation Request and AT=10 pretranslated access to the same address.
- Observe
- ATS permission information is not proof of payload movement; a pretranslated access is not evidence of a new guest walk.
- Recover
- Record AT with the actual header. Pair the test with byte evidence and correct invalidation scope.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.7; Tables 44, 50–51
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
ATS fault has a different observationAMD · DMA type · Test design
- Inject / compare
- Clear PR on an otherwise valid mapping, then issue ordinary DMA and an ATS Translation Request.
- Observe
- Table 44 can return ATS R=W=0 without the ordinary IO_PAGE_FAULT log entry. Permissions denial is not equivalent to no ATS response.
- Recover
- Inspect Translation Completion permission fields, not just event count.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Pretranslated request with DTE.I disabledAMD · DMA type · Interactive classifier
- Inject / compare
- Issue a pretranslated access with V=1 but I=0, then compare an ATS request.
- Observe
- Both use INVALID_DEVICE_REQUEST rules, but Tables 50 and 51 specify different access/translation response context.
- Recover
- Fix endpoint/IOMMU agreement; do not grant access based on a cached address alone.
- Source
- AMD 48882-PUB 3.11, April 2026 · Tables 50–51
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Read-only data used to identify directionAMD · Permissions · Test design
- Inject / compare
- Prepare a known readable but nonwritable page; issue the client operation and inspect both header and bytes.
- Observe
- A Write should be rejected while Read can succeed. This supports direction diagnosis only after path, mapping and cache state are proven.
- Recover
- Repeat with opposite permission controls and a positive control; a single failure is ambiguous.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Execute and privilege bits do not follow PASID enableAMD · Permissions · Reference recipe
- Inject / compare
- Vary EXE and PMR with their capabilities/controls and guest NX or supervisor permissions.
- Observe
- NXSup, USSup and PrivAbrtEn affect the allowed behaviour. PASID presence alone does not establish execute or privilege attributes.
- Recover
- Capture the prefix attributes and validate permissions at all traversed levels.
- Source
- AMD 48882-PUB 3.11, April 2026 · §§2.2.6.1–2; Table 44
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
MSI carries a PASID prefixAMD · Interrupts · Interactive classifier
- Inject / compare
- Send an interrupt transaction with a PASID, separately from an untagged MSI.
- Observe
- Table 44 lists an interrupt-context IO_PAGE_FAULT; do not decode it as payload-memory permission failure.
- Recover
- Repair client interrupt formation; capture address/data and request identity.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 44
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Guest I/O Protection must not steal MSIAMD · Interrupts · Interactive classifier
- Inject / compare
- Enable GIoV and issue untagged MSI at 0xFEEx_xxxx alongside ordinary untagged DMA.
- Observe
- MSI still follows interrupt remapping; ordinary DMA can use implicit PASID 0.
- Recover
- Assert both paths independently; do not run MSI through GCR3[0] in the teaching model.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.9
- Scope
- Interactive classifier. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Read or non-posted write in interrupt spaceAMD · Interrupts · Reference recipe
- Inject / compare
- Inject Read/non-posted Write into interrupt space rather than a normal posted MSI.
- Observe
- INVALID_DEVICE_REQUEST under Table 50; a syntactically valid memory operation can target a prohibited request class/address combination.
- Recover
- Check transaction kind before diagnosing IRTE contents.
- Source
- AMD 48882-PUB 3.11, April 2026 · Table 50
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
IRTE index boundary and format strideAMD · Interrupts · Reference recipe
- Inject / compare
- Test the last permitted index, first beyond the table and incorrect entry-size assumptions in 32/128-bit formats.
- Observe
- An out-of-range IRTE is not an invalid DTE table-length encoding. Decode the selected format before calculating its address.
- Recover
- Check IntTabLen, capability/enable gates and byte extent without truncating the index.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.5; Tables 7, 19–22, 44
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Interrupt table read failsAMD · Interrupts · Reference recipe
- Inject / compare
- Keep the interrupt request and DTE legal; fail the memory fetch of the IRTE.
- Observe
- This page treats a failed interrupt-remapping-table read as PAGE_TAB_HARDWARE_ERROR with I=1 (Table 60); preserve interrupt context.
- Recover
- Repair table accessibility; changing RemapEn or a data PTE is not the same repair.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.5.5; Table 46
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Unsupported 128-bit/x2APIC modeAMD · Interrupts · Related semantic lab
- Inject / compare
- Select a wide interrupt format with its capability or enable prerequisites missing.
- Observe
- Do not silently reinterpret wide bytes as a legacy entry. Feature gates precede field meaning.
- Recover
- Use the supported format and selected profile; test unsupported, disabled and enabled states.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.5.1–3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Stale interrupt mapping after retargetAMD · Interrupts · Related semantic lab
- Inject / compare
- Warm an IRTE, change destination/vector in backing memory and issue the interrupt before and after required invalidation.
- Observe
- Interpret cached versus live fields using the selected format. A memory-TLB invalidation is not an interrupt-table invalidation.
- Recover
- Publish the entry and perform the applicable interrupt maintenance; preserve old/new destination evidence.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.2.5; §2.4.5
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-IRQ-01 · Run CROSS-IRQ-01
GA log loss versus lost interruptAMD · Interrupts · Related semantic lab
- Inject / compare
- Overflow GA log while the targeted guest is not running, then inspect virtual APIC backing state.
- Observe
- Lost notification record does not necessarily mean lost pending vector. ISR/EOI and reading a GA log are different operations.
- Recover
- Reconcile guest interrupt state and log overflow independently before retrying notification.
- Source
- AMD 48882-PUB 3.11, April 2026 · §2.7
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-GA-01
Wrong DeviceID with a valid PASIDAMD · Identity isolation · Test design
- Inject / compare
- Keep PASID and address unchanged while changing RequesterID to another permitted device context.
- Observe
- PASID alone does not identify the DTE or prove requester ownership. An allowed translation can still belong to the wrong client.
- Recover
- Correlate DeviceID, routing/aliases, DomainID and PASID with isolated sentinel pages.
- Source
- AMD 48882-PUB 3.11, April 2026 · §§2.1–2.2
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
StreamID range versus STE contentsArm · Identity · Related semantic lab
- Inject / compare
- Compare out-of-range StreamID, inaccessible STE memory and invalid STE contents with cold configuration caches.
- Observe
- Distinguish C_BAD_STREAMID, F_STE_FETCH and C_BAD_STE; a table-fetch failure is not a translation permission fault.
- Recover
- Repair routing, allocation or descriptor as indicated; apply configuration maintenance before retry.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.3, 7.3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Substream validity versus missing CDArm · Identity · Related semantic lab
- Inject / compare
- Use a valid stream with an invalid SubstreamID, then an inaccessible or invalid CD.
- Observe
- Separate C_BAD_SUBSTREAMID, F_CD_FETCH and C_BAD_CD. A PASID-to-SubstreamID relationship depends on the PCIe integration.
- Recover
- Check CD table extent, STE settings and stream ownership; do not truncate identity into another context.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.3, 3.9, 7.3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Stage-1 metadata needs stage-2 accessArm · Translation · Related semantic lab
- Inject / compare
- Leave the final data mapping valid but remove stage-2 access to a stage-1 table page.
- Observe
- Diagnose stage-2 failure on a translation-table access, not final payload access. Preserve stage and input/table address evidence.
- Recover
- Repair the metadata mapping and invalidate the applicable translation state.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.3, 7.3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Input width is not output widthArm · Translation · Related semantic lab
- Inject / compare
- Test the first input outside the selected translation regime separately from a descriptor output beyond OAS.
- Observe
- A translation fault and an address-size fault are not interchangeable. Bypass still has an output-address limit.
- Recover
- Restore the supported address regime; never silently mask high bits.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.4; §7.3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Block bases versus byte offsetsArm · Translation · Related semantic lab
- Inject / compare
- With the 4 KiB granule, test 4 KiB pages, 2 MiB and 1 GiB blocks; use aligned frames and nonzero request offsets.
- Observe
- Frame alignment follows block size. The DMA byte address need not be block aligned; an offset is carried into the output.
- Recover
- Correct the descriptor base/level, retain the legitimate byte offset. Other granules have different geometry.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.4.2, 3.13; Ch5
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Access flag is not read/write permissionArm · Permissions · Related semantic lab
- Inject / compare
- Compare AF=0 with valid AF but denied write, before enabling any supported hardware update facilities.
- Observe
- F_ACCESS and F_PERMISSION identify different failures. Hardware AF/dirty updates depend on capabilities and controls.
- Recover
- Use IDR0.HTTU and descriptor controls to choose the oracle; do not automatically grant a denied permission.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.13; §7.3
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Restrictions at both stagesArm · Permissions · Related semantic lab
- Inject / compare
- Grant a write at S1 and deny at S2; reverse the stages and compare with Read.
- Observe
- The final request must satisfy both active stages. Record the failing stage instead of blaming the last leaf displayed.
- Recover
- Change only the intended owner’s mapping and invalidate the matching scope.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.3, 3.13
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Retry before fixing the causeArm · Stall · Executable regression
- Inject / compare
- Stall on a missing page and issue CMD_RESUME Retry without repair.
- Observe
- Retry is a new evaluation and can stall again. It must not force termination simply because this is a retry.
- Recover
- Repair, perform maintenance and synchronize, then resume the new StreamID/STAG.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.12.2; §4.7.1
- Scope
- Executable regression. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Wrong StreamID with a valid stall tagArm · Stall · Executable regression
- Inject / compare
- Use the tag of one stalled transaction with another StreamID.
- Observe
- The pair identifies the transaction. No unrelated stalled transaction may be resumed; the local model rejects this as a software guard.
- Recover
- Keep the original identity/tag together. Do not interpret the guard as an architectural EVTQ event.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.12.2; §4.7.1
- Scope
- Executable regression. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Deferred fault changes before EVTQ freesArm · Stall · Executable regression
- Inject / compare
- Fill EVTQ, stall another transaction, change its missing mapping to a write-denied mapping, then consume an event.
- Observe
- When queue space returns the transaction is retried; the new record can describe a different fault. A repaired request can succeed instead.
- Recover
- Diagnose the current record, not the first attempted fault; preserve the entire test history.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.5.3–4, 3.12.2
- Scope
- Executable regression. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Terminate versus resume versus PRI responseArm · Stall · Related semantic lab
- Inject / compare
- Compare a terminated translation, a stalled transaction and a PCIe Page Request Group.
- Observe
- Terminated requests are not replayed by reading EVTQ. CMD_RESUME addresses a stall; CMD_PRI_RESP responds to a PRI group.
- Recover
- Use the correct protocol and ensure every retained stall has a resolution path.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.12, 4.5.2, 4.7.1
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
EVTQ overflow does not freeze future writesArm · Queues · Reference recipe
- Inject / compare
- Lose a terminated event in a full EVTQ, free space but delay OVACKFLG acknowledgement.
- Observe
- New events can be recorded despite unacknowledged overflow. A second loss cannot produce a new toggle until acknowledgement.
- Recover
- Consume promptly and copy observed OVFLG into OVACKFLG; preserve lost-evidence status.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §7.4
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Retained stalls do not cause EVTQ overflowArm · Queues · Executable regression
- Inject / compare
- Compare full-queue handling of stalled and terminated faults.
- Observe
- A retained stall event is not a discarded event and does not itself set the overflow condition. Never overwrite unread records.
- Recover
- Free space and allow retry. Test configuration changes before retry separately.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.5.3, 7.4
- Scope
- Executable regression. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PRIQ overflow differs from EVTQArm · Queues · Reference recipe
- Inject / compare
- Fill PRIQ; compare Last=0, Last=1 and Stop Marker while overflow is active.
- Observe
- PRIQ overflow inhibits new entries. Last=1 page requests receive an automatic response; Last=0 is discarded. Stop Marker is not a Last response trigger.
- Recover
- Drain and acknowledge overflow. Validate response PASID/status using PPS/PPAR and validity rules, not a constant success oracle.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §8.1
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Queue memory fault versus MSI faultArm · Queues · Reference recipe
- Inject / compare
- Independently fail event-record memory writes and notification MSI writes.
- Observe
- Inspect the appropriate GERROR bit. Missing notification does not establish that the queue entry was never written.
- Recover
- Repair the failing destination and use the specified acknowledgement; inspect queue state independently.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§7.2.2, 7.5
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Consumption is not completionArm · Commands · Reference recipe
- Inject / compare
- Publish an invalidation and inspect CMDQ_CONS before observing the later CMD_SYNC completion.
- Observe
- Passing a command entry permits slot reuse but is not a universal proof that all its effects completed.
- Recover
- Wait for the appropriate synchronization on that queue before relying on maintenance.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§4.1.4, 4.7.3, 4.8
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Reserved field detection is conditionalArm · Commands · Related semantic lab
- Inject / compare
- Test a reserved opcode, an invalid defined parameter and nonzero reserved bits separately.
- Observe
- CERROR_ILL applies to illegal commands; detection of reserved/undefined nonzero fields can be optional. Memory access abort is CERROR_ABT.
- Recover
- Preserve the bad command and consumer index; use the chosen implementation detection policy.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §4.1.3; §7.1
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
GERROR acknowledgement is not AMD W1CArm · Commands · Related semantic lab
- Inject / compare
- Halt CMDQ on an illegal command; acknowledge before repair, then retry.
- Observe
- Acknowledgement alone does not make the command legal. GERROR/GERRORN matching-bit semantics differ from clearing an AMD status bit.
- Recover
- Repair or follow the specified skip/retry procedure, acknowledge the matching error, then observe progress.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §7.1; §7.5; Ch6
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
CFGI and TLBI solve different stale stateArm · Caches · Related semantic lab
- Inject / compare
- Warm STE/CD and translation caches, change one configuration field and one leaf mapping.
- Observe
- Configuration invalidation and translation invalidation have different targets. One is not a universal substitute for the other.
- Recover
- Use correct StreamID/SubstreamID and ASID/VMID scopes, with required completion.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.21; §§4.3–4.4
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run ARM-CACHE-01
Equal indices can mean fullArm · Queues · Related semantic lab
- Inject / compare
- Wrap producer through the queue while holding consumer fixed.
- Observe
- Equal indices with opposite wrap bits mean full; matching index and wrap mean empty. AMD’s reserved-slot fixture must not be reused unchanged.
- Recover
- Use complete pointer state and visibility rules, not integer index comparison.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §3.5.1–2; §7.4
- Scope
- Related semantic lab. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
ATS configuration transitionsArm · Optional · Reference recipe
- Inject / compare
- Change EATS or translation controls while endpoint translations might still be cached.
- Observe
- Follow the ATS configuration-change and ATC maintenance sequence for the selected support level. A TLBI alone does not prove endpoint caches are empty.
- Recover
- Quiesce and synchronize according to the architecture and endpoint protocol; include stale in-flight traffic.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §§3.9.1–2; §4.5.1
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
SMMUv3.5 is not a feature bundleArm · Optional · Reference recipe
- Inject / compare
- Select DCMDQ, virtual StreamID translation, dirty-state facilities or protected translation in a capability matrix.
- Observe
- Gate optional features individually. Test unsupported, supported-disabled and supported-enabled states; do not infer support from H.a document revision.
- Recover
- Record IDR controls and the exact architecture profile with each result.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · §2.9; §§3.5.7–9, 3.13, 3.25
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Descriptor crossing versus illegal single requestPCIe · Requests · Interactive planner
- Inject / compare
- Plan a 32-byte descriptor at 0x1ff0. Compare split requests with the unsplit extent.
- Observe
- A descriptor may span 4 KiB boundaries; each ordinary Memory Request must stay inside one.
- Recover
- Split before submission; do not report an IOMMU page fault for packet construction.
- Source
- Intel 710 Series datasheet 4.1 · PCIe request boundaries and limits · PCIe data alignment / request size
- Scope
- Interactive planner. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
MPS and MRRS are distinctPCIe · Requests · Interactive planner
- Inject / compare
- Use a 512-byte transfer with MPS=128 and MRRS=512; toggle Write and Read.
- Observe
- Write payload uses MPS; Read request uses MRRS. The resulting packet counts can differ.
- Recover
- Use the negotiated/configured limits. The planner does not predict Completion packetization.
- Source
- Intel 710 Series datasheet 4.1 · PCIe request boundaries and limits · PCIe request size
- Scope
- Interactive planner. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Enabled bytes versus DW extentPCIe · Requests · Interactive planner
- Inject / compare
- Start at 0x1003 and request two contiguous bytes.
- Observe
- The header uses a DW-aligned address; Length covers two DWs, with first BE=8 and last BE=1.
- Recover
- Encode byte enables; do not round the requested application data into an extra write.
- Source
- AMD PG054 3.3 · Error Detection (PCIe implementation guidance) · §2.2.5 as cited by PG054
- Scope
- Interactive planner. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
One DW and maximum Length encodingPCIe · Requests · Interactive planner
- Inject / compare
- Compare a one-byte request with 4096 enabled bytes at 0x1000 using 4096 limits.
- Observe
- One DW uses LastBE=0; the 1024-DW request uses the zero Length-field encoding. Zero field does not mean empty data.
- Recover
- Keep decoded length separate from wire field. Zero-length request semantics are outside this planner.
- Source
- Intel 710 Series datasheet 4.1 · PCIe request boundaries and limits · PCIe Memory Request fields
- Scope
- Interactive planner. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
One Read can have several CompletionsPCIe · Completions · Reference recipe
- Inject / compare
- Receive only part of a Read response, with other tags interleaved.
- Observe
- Track the original request until all its data arrives; one Completion does not necessarily finish the request.
- Recover
- Track identity, remaining byte range and receive capacity.
- Source
- AMD PG054 · Tracking Non-Posted Requests and Inbound Completions · Tracking Non-Posted Requests
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Timeout followed by a late CompletionPCIe · Completions · Reference recipe
- Inject / compare
- Expire an outstanding Non-Posted request, then deliver its old response.
- Observe
- Late response must not complete a new request that reused state; PG054 treats it as Unexpected Completion.
- Recover
- Preserve timeout evidence and manage tag lifetime according to the applicable protocol.
- Source
- AMD PG054 · Completion Timeouts · Completion Timeouts
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Wrong or unsupported Completion shapePCIe · Completions · Reference recipe
- Inject / compare
- Test successful Cpl without data for a Memory Read and an unmatched locked Completion at an endpoint.
- Observe
- PCI-SIG permits alternative Malformed/Unexpected classifications in these documented cases; avoid an over-specific oracle.
- Recover
- Assert rejection and isolation, then use the implementation’s permitted reporting policy.
- Source
- PCI-SIG PCIe 3.0 FAQ · permitted error classifications · PCIe 3.0 FAQ §§2.3.1.1, 2.3.2
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Posted writes do not get a normal CompletionPCIe · Completions · Reference recipe
- Inject / compare
- Contrast an ordinary Memory Write with a Read and a failed Non-Posted request.
- Observe
- A posted write has no request Completion; software cannot infer durable success by waiting for a nonexistent packet.
- Recover
- Use the device’s completion/ordering protocol. Error reporting is separate from an ordinary Completion.
- Source
- AMD PG054 · Completer Abort · Completer Abort; request classes
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
PASID is not placed on a CompletionPCIe · Identity · Reference recipe
- Inject / compare
- Add a PASID prefix to a Completion in a PCIe 3.1 fixture.
- Observe
- PCI-SIG §6.20 FAQ excludes this. Do not copy request prefixes mechanically onto responses.
- Recover
- Keep request identity tracking in requester state; confirm newer-revision rules in the selected Base specification.
- Source
- PCI-SIG FAQ · PCIe 3.1 §6.20 PASID on Completions · PCIe 3.1 §6.20 FAQ
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Malformed packet versus translation denialPCIe · Errors · Reference recipe
- Inject / compare
- Mutate a packet Length/BE or address-boundary rule separately from a valid request to an absent mapping.
- Observe
- Packet checks and IOMMU walk faults belong to different layers; detection requirements can be optional.
- Recover
- Record which layer actually accepted the request before asserting its error family.
- Source
- AMD PG054 3.3 · Error Detection (PCIe implementation guidance) · PG054 Error Detection
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Completion receive capacityPCIe · Resources · Reference recipe
- Inject / compare
- Issue many Read requests without sufficient capacity to receive their responses.
- Observe
- Requester admission must account for outstanding Completions; request count alone is not a byte-capacity model.
- Recover
- Throttle issuance and test concurrent tags and response splitting.
- Source
- AMD PG054 · Tracking Non-Posted Requests and Inbound Completions · Tracking Non-Posted Requests
- Scope
- Reference recipe. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Newer wire modes and optional servicesPCIe · Scope · Needs Base specification
- Inject / compare
- Plan tests for FLIT mode, IDE, AtomicOps, ACS, SR-IOV and reset/hot-plug races.
- Observe
- These need the selected Base revision, ECNs and capability profile. The site makes no normative coverage claim for them.
- Recover
- Add exact normative references and hardware/VIP expectations before turning these into conformance assertions.
- Source
- PCI-SIG PCIe 3.0 FAQ · permitted error classifications · Revision-specific source needed
- Scope
- Needs Base specification. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
No event does not prove no trafficCross-layer · Evidence · Test design
- Inject / compare
- Repeat denied access with logging disabled, suppressed, full and with a notification failure.
- Observe
- Record submission, routing, memory and diagnostic evidence separately. Missing logs alone cannot prove that traffic bypassed or traversed translation.
- Recover
- Restore reporting and rerun a positive control plus a deliberately denied request.
- Source
- AMD 48882-PUB 3.11, April 2026 · AMD §2.5.16; Arm §§3.5.3, 7.4
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run COHERENCY-01
Warm cache versus repaired backingCross-layer · Lifetime · Test design
- Inject / compare
- Compare cold, stale-positive and stale-negative translation state around a mapping edit.
- Observe
- A backing-memory edit alone is not a publication/invalidation/completion sequence. A new request is needed to test recovery.
- Recover
- Track backing version, invalidation scope, completion and request identity.
- Source
- AMD 48882-PUB 3.11, April 2026 · AMD §2.4; Arm §§3.21, 4.3–4.7
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case · Run CACHE-DMA-01
Later request faults after earlier writesCross-layer · Partial progress · Test design
- Inject / compare
- Split a descriptor across a boundary; allow the first request and deny the next.
- Observe
- Do not claim whole-descriptor atomic rollback. Inspect changed and unchanged ranges separately.
- Recover
- Reconcile partial progress before retrying; repeated writes may be unsafe for device memory.
- Source
- AMD 48882-PUB 3.11, April 2026 · AMD §2.1.3.1; Arm §3.12
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Aliases and peer routingCross-layer · Identity · Test design
- Inject / compare
- Compare two requester identities sharing a context with a path that does not traverse the tested translation unit.
- Observe
- Valid page tables alone do not establish isolation or traversal. Preserve platform routing evidence.
- Recover
- Verify the actual requester/stream mapping and fabric topology; missing evidence stays inconclusive.
- Source
- AMD 48882-PUB 3.11, April 2026 · AMD §2.1; Arm §3.3
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Two faults at onceCross-layer · Oracle · Test design
- Inject / compare
- Combine absent translation, reserved bits and inaccessible metadata, with both warm and cold caches.
- Observe
- Do not invent a universal first-error priority. Use the relevant architecture priority rules and permitted outcome set.
- Recover
- Begin with isolated faults, then combine them with explicit preconditions and allowed observations.
- Source
- Arm IHI 0070 H.a, 6 March 2026 · AMD §2.5.16.1; Arm §7.3.23
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Acknowledgement is not repairCross-layer · Recovery · Test design
- Inject / compare
- Clear notification, consume an event, repair a descriptor and synchronize as separate operations.
- Observe
- Each action has a different effect. Retiring diagnostic evidence does not replay a terminated transaction or repair memory.
- Recover
- Preserve the first failure; repair, synchronize and issue/resume through the appropriate protocol.
- Source
- AMD 48882-PUB 3.11, April 2026 · AMD §§2.4–2.7; Arm §§3.12, 4.7, 7.5
- Scope
- Test design. A related lab is not proof that every variation in this recipe is executable. Open related material · Link to this case
Sources and revision boundaries
Reviewed 27 September 2026. Supplied AMD 3.11 and Arm H.a PDFs are the normative baselines. Public URLs can change edition. PCIe sources below have the limited scope stated in the guide.
- AMD 48882-PUB 3.11, April 2026
- Arm IHI 0070 H.a, 6 March 2026
- AMD PG054 3.3 · Error Detection (PCIe implementation guidance)
- Intel 710 Series datasheet 4.1 · PCIe request boundaries and limits
- AMD PG054 · Tracking Non-Posted Requests and Inbound Completions
- AMD PG054 · Completion Timeouts
- AMD PG054 · Completer Abort
- PCI-SIG FAQ · PCIe 3.1 §6.20 PASID on Completions
- PCI-SIG PCIe 3.0 FAQ · permitted error classifications