본문으로 건너뛰기
PCIe Deep Dive · 18/19

Ch 18: Register Maps — Config Space·Capability 비트 reference

· Hawk · 13분 읽기

#한 줄 요약

“본 reference는 PCIe 진단·tuning에 자주 쓰이는 register의 비트 layout을 모은 cheat sheet입니다.” — 정확한 spec은 PCIe Base 6.1 § 7가 1차 자료. 본 reference는 setpci·driver 코드 작성 시 빠른 lookup용. *Linux include/uapi/linux/pci_regs.h*가 symbolic 이름 출처.

Ch 1~17에서 각 register의 의미·동작을 봤습니다. 이 장은 비트 layout을 한 곳에 모은 reference입니다.

#Type 0 Header (Endpoint)

Offset크기필드설명
0x002Vendor IDPCI-SIG 부여
0x022Device IDVendor 부여
0x042Commandenable·bus master·memory 등
0x062Statuserror·capability·int 등
0x081Revision ID
0x093Class Codebase·sub·programming interface
0x0C1Cache Line Size
0x0D1Latency Timer(legacy PCI)
0x0E1Header Typebit 7: multi-func, bit 0~6: 0=Type 0
0x0F1BISTbuilt-in self test
0x104BAR 0
0x144BAR 1
0x184BAR 2
0x1C4BAR 3
0x204BAR 4
0x244BAR 5
0x284Cardbus CIS Pointer
0x2C2Subsystem Vendor ID
0x2E2Subsystem Device ID
0x304Expansion ROM Base Address
0x341Capabilities Pointerfirst cap offset
0x3C1Interrupt Line
0x3D1Interrupt PinINTA/B/C/D
0x3E1Min_Gnt(legacy)
0x3F1Max_Lat(legacy)

#Command Register (0x04)

Bit의미
0I/O Space Enable
1Memory Space Enable
2Bus Master Enable
3Special Cycle Enable (legacy)
4Memory Write and Invalidate (legacy)
5VGA Palette Snoop (legacy)
6Parity Error Response
8SERR# Enable
9Fast Back-to-Back (legacy)
10Interrupt Disable

#Status Register (0x06)

Bit의미
3Interrupt Status
4Capabilities List (이 device가 capability 가짐)
566 MHz Capable (legacy)
7Fast Back-to-Back Capable (legacy)
8Master Data Parity Error
11Signaled Target Abort
12Received Target Abort
13Received Master Abort
14Signaled System Error
15Detected Parity Error

#Type 1 Header (Bridge) — 차이점

Offset필드
0x18Primary Bus Number
0x19Secondary Bus Number
0x1ASubordinate Bus Number
0x1BSecondary Latency Timer
0x1CI/O Base
0x1DI/O Limit
0x1ESecondary Status
0x20Memory Base
0x22Memory Limit
0x24Prefetchable Memory Base
0x26Prefetchable Memory Limit
0x28Prefetchable Base Upper 32
0x2CPrefetchable Limit Upper 32
0x30I/O Base Upper 16
0x32I/O Limit Upper 16
0x3EBridge Control

#PCIe Capability (ID 0x10) — Sub-register

Offset필드
+0x00PCIe Cap List (ID + Next + Cap Version)
+0x02PCIe Capabilities (Device/Port Type)
+0x04Device Capabilities
+0x08Device Control
+0x0ADevice Status
+0x0CLink Capabilities
+0x10Link Control
+0x12Link Status
+0x14Slot Capabilities
+0x18Slot Control
+0x1ASlot Status
+0x1CRoot Control
+0x20Root Status
+0x24Device Capabilities 2
+0x28Device Control 2
+0x2ADevice Status 2
+0x2CLink Capabilities 2
+0x30Link Control 2
+0x32Link Status 2

#Device Control (+0x08)

Bit의미
0Correctable Error Reporting Enable
1Non-Fatal Error Reporting Enable
2Fatal Error Reporting Enable
3Unsupported Request Reporting Enable
4Relaxed Ordering Enable
5~7MaxPayload (000=128, 001=256, …, 101=4096)
8Extended Tag Field Enable
9Phantom Functions Enable
10Auxiliary Power PM Enable
11No Snoop Enable
12~14MaxReadRequest (000=128, …, 101=4096)
15Initiate Function Level Reset (FLR)
Bit의미
0~3Current Link Speed (0001=2.5GT, 0010=5GT, …, 0110=64GT)
4~9Negotiated Link Width
10Undefined
11Link Training
12Slot Clock Configuration
13Data Link Layer Link Active
14Link BW Management Status
15Link Autonomous BW Status

#AER Capability (Extended ID 0x0001)

Offset필드
+0x00Capability ID·Version·Next
+0x04Uncorrectable Error Status
+0x08Uncorrectable Error Mask
+0x0CUncorrectable Error Severity
+0x10Correctable Error Status
+0x14Correctable Error Mask
+0x18AER Capabilities·Control
+0x1CHeader Log (4 DW = 16 byte)
+0x2CRoot Error Command (Root Port only)
+0x30Root Error Status

#Uncorrectable Error Status·Mask·Severity (+0x04/+0x08/+0x0C)

Bit의미
4Data Link Protocol Error
5Surprise Down Error
12Poisoned TLP
13Flow Control Protocol Error
14Completion Timeout
15Completer Abort
16Unexpected Completion
17Receiver Overflow
18Malformed TLP
19ECRC Error
20Unsupported Request
21ACS Violation
22Uncorrectable Internal Error
23MC Blocked TLP
24AtomicOp Egress Blocked
25TLP Prefix Blocked Error

#Correctable Error Status·Mask (+0x10/+0x14)

Bit의미
0Receiver Error
6Bad TLP
7Bad DLLP
8Replay Number Rollover
12Replay Timer Timeout
13Advisory Non-Fatal Error
14Corrected Internal Error
15Header Log Overflow

#MSI Capability (ID 0x05)

Offset필드
+0x00Cap ID·Next
+0x02Message Control
+0x04Message Address (32-bit)
+0x08Message Address Upper (64-bit MSI만)
+0x08 또는 +0x0CMessage Data
+0x10Mask Bits (per-vector mask 지원 시)
+0x14Pending Bits

#Message Control

Bit의미
0MSI Enable
1~3Multiple Message Capable (000=1, 001=2, …, 101=32)
4~6Multiple Message Enable
764-bit Address Capable
8Per-vector Masking Capable

#MSI-X Capability (ID 0x11)

Offset필드
+0x00Cap ID·Next
+0x02Message Control
+0x04Table BIR (BAR index) + Table Offset
+0x08PBA BIR + PBA Offset

#Message Control

Bit의미
10
Table Size – 1 (max 2048)
14Function Mask
15MSI-X Enable

#Table Entry (16 byte)

Offset필드
0Message Address Low
4Message Address Upper
8Message Data
12Vector Control (bit 0: mask)

#SR-IOV Capability (Extended ID 0x0010)

Offset필드
+0x00Cap ID·Version·Next
+0x04SR-IOV Capabilities
+0x08SR-IOV Control
+0x0ASR-IOV Status
+0x0CInitialVFs
+0x0ETotalVFs
+0x10NumVFs
+0x12Function Dependency Link
+0x14First VF Offset
+0x16VF Stride
+0x1AVF Device ID
+0x1CSupported Page Sizes
+0x20System Page Size
+0x24~0x38VF BAR 0~5
+0x3CVF Migration State Array Offset

#ACS Capability (Extended ID 0x000F)

Offset필드
+0x00Cap ID·Version·Next
+0x04ACS Capability
+0x06ACS Control
+0x08Egress Control Vector

#ACS Capability (bit 표시)

Bit의미
0Source Validation
1Translation Blocking
2P2P Request Redirect
3P2P Completion Redirect
4Upstream Forwarding
5P2P Egress Control
6Direct Translated P2P

#LTR Capability (Extended ID 0x0018)

Offset필드
+0x00Cap ID·Version·Next
+0x04Max Snoop Latency
+0x06Max No-Snoop Latency

#Latency Format

Bit의미
0~9Value
10~12Scale (0=1ns·1=32ns·2=1024ns·3=32768ns·4=1048576ns·5=33554432ns)
15Requirement (1: Required)

#ECAM 주소 계산

ECAM_address = ECAM_BASE
+ (Bus << 20)
+ (Device << 15)
+ (Function << 12)
+ (Register_offset)
단위크기
1 function4 KB
1 device (8 functions)32 KB
1 bus (32 devices)1 MB
1 segment (256 buses)256 MB

#Linux include/uapi/linux/pci_regs.h

이 헤더가 모든 register·bit symbolic 이름. 예:

상수
PCI_COMMAND_MEMORY0x02
PCI_COMMAND_MASTER0x04
PCI_EXP_DEVCTL8
PCI_EXP_DEVCTL_PAYLOAD0x00e0
PCI_EXP_LNKSTA_CLS0x000f
PCI_ERR_UNCOR_STATUS0x04 (AER offset)
PCI_MSIX_TBL_BIR0x07
PCI_EXT_CAP_ID_AER0x01
PCI_EXT_CAP_ID_SRIOV0x10

driver 코드는 symbolic 이름 사용 권장magic number 회피.

#시리즈 마무리 — 18편 회고

본 시리즈는 PCIe의 동작·구현·운영18편으로 풀었습니다.

  • Ch 1: Fundamentals — Gen·encoding·stack·topology
  • Ch 2: TLP — 5 가족·split transaction·routing·ordering
  • Ch 3: Configuration Space — 4 KB ECAM·Capability chain
  • Ch 4: BAR & MMIO — size probe·ReBAR·VF BAR
  • Ch 5: Interrupts — INTx·MSI·MSI-X·Interrupt Remapping
  • Ch 6: Power Management — D/L states·ASPM·L1 substates·PME
  • Ch 7: Error Handling — AER 3-tier·DPC·Poisoned TLP
  • Ch 8: DLLP — ACK/NAK·Flow Control·FLIT mode
  • Ch 9: Physical Layer — LTSSM·Equalization·SerDes
  • Ch 10: Linux Basics — struct pci_dev·driver model·sysfs
  • Ch 11: DMA·IOMMU — coherent·streaming·ATS·PASID·IOMMUFD
  • Ch 12: Virtualization I — SR-IOV·VFIO·DPDK·SPDK·ACS
  • Ch 13: Virtualization II — vIOMMU·S-IOV·VirtIO·IDE·TDISP
  • Ch 14: Linux Operations — pciehp·AER recovery·DPC·ARI
  • Ch 15: Tools — lspci·setpci·pcimem·debugfs·analyzer
  • Ch 16: Troubleshooting — 10 시나리오북
  • Ch 17: Performance — BW·MPS·NUMA·DDIO·P2P
  • Ch 18: Register Maps — 본 reference

PCIe는 CXL·UCIe·NVMe의 토대이고 2025~2026 datacenter interconnect의 공유 인프라입니다. Gen 6 FLIT mode·PAM4·Confidential I/O·IOMMUFD·Scalable IOV 등의 최신 기능도 함께 다뤘습니다. upstream tracking 인프라(audit-upstream-freshness.py)로 *Linux drivers/pci/*의 변경을 자동 추적합니다.

#관련 항목

#시리즈 자료 출처 안내

본 글의 1차 자료는 PCIe Base Specification·Linux include/uapi/linux/pci_regs.h·Linux drivers/pci/·CPU 벤더 매뉴얼입니다. PCIe Specification은 § navigation aid로만 인용 — spec 본문 재생산 없음. 자세한 정책은 Ch 1 footer 참고.

PCI Express® and PCIe® are registered trademarks of PCI-SIG. Spec 인용은 PCI-SIG의 저작권을 따릅니다.