FIELD NOTES / PCIe · ONE GUIDE, NINE CHAPTERS
One N100. Every link a request crosses.
Nine chapters on how a PCIe device is found, configured and allowed to
write to memory, drawn from a reader's real lspci on an
Intel N100 mini PC (the same chip serves this site). Each has a lab on
an emulated card you can change and break.
A reader's N100, from its lspci -tv (on a narrow screen, swipe it sideways). A device's DMA write climbs this tree to memory; each box with an arrow opens the chapter that explains it, and Memory is only where the writes land. What each box is.
A short first route
Three chapters, about 40 minutes. One outcome each; the Next link at the end of each chapter follows this route.
- Reading lspci Read one card's address, class and BusMaster bit.
- Before DMA: PCIe setup See the one switch that lets it write to memory.
- Boot discovery Learn how it got its address at boot.
Jump to a topic
Already working with devices? Go straight to the job in front of you.
- Decode a device
- Reading lspci
- Understand the link
- Physical layer, Gen 1 to 7
- Bring up or enumerate a host
- Boot discovery, Enumeration
- Set up PASID, ATS and SR-IOV
- PASID, ATS & SR-IOV, SR-IOV: two tenants
- Debug bridges and AtomicOps
- Bridges & AtomicOps
- Explore CXL
- CXL
- Check what DMA needs first
- Before DMA: PCIe setup
The full course, in order
All nine chapters, front to back. This is longer than the first route; it covers the link, boot, SR-IOV, bridges and CXL too.
- Reading lspci ≈ 12 min
- Physical layer, Gen 1 to 7 ≈ 20 min
- Boot discovery ≈ 25 min
- Enumeration ≈ 20 min
- PASID, ATS & SR-IOV ≈ 12 min
- SR-IOV: two tenants ≈ 30 min
- Bridges & AtomicOps ≈ 12 min
- CXL ≈ 25 min
- Before DMA: PCIe setup ≈ 3 min
Where the request goes next: the IOMMU guide picks it up at the IOMMU. All three topics in one sitting: One NIC, three stops follows this card through PCIe, the IOMMU and a sleep and wake.
The N100's hardware
- 00:02.0 UHD Graphics: no bridge above it. Offers PASID, ATS (on), PRI and SR-IOV with 7 virtual functions, none enabled.
- 00:1c.0 root port: could run Gen 3 x1, runs Gen 2. Completes no AtomicOps, so no card behind it gets them. The Renesas USB 3 controller (01:00.0) is a Gen 2 x1 card behind it.
- Root ports 00:1c.2, 1c.3, 1c.6, 1d.0: bridges like 1c.0, each with one card alone on the bus below it (02 to 05), all writing to memory on their own.
- The IOMMU: lspci prints IOMMU groups, which shows an IOMMU is present. Which memory a device's writes reach depends on its domain: check the configuration and a controlled transfer.
Model handoff: this tree is a real Intel N100's lspci, which has Intel's VT-d. The IOMMU chapters it links to run an AMD-style model with AMD's terms (DTE, event log). The same device identity gives continuity; it does not make the two translation architectures interchangeable.