PCI Configuration Space là gì?
Quicknote PCI Configuration Space là gì?
Khi firmware muốn biết một thiết bị PCIe là gì, nó không bắt đầu bằng driver. Nó bắt đầu bằng việc đọc vài register rất nhỏ trong PCI Configuration Space.
Nếu đọc Vendor ID ra 0xFFFF, firmware gần như đang nói: “ở BDF này không có thiết bị trả lời”. Nếu đọc được Vendor ID/Device ID nhưng BAR size bất thường, vấn đề chuyển sang resource allocation. Vì vậy config space là điểm kiểm tra đầu tiên khi một device “biến mất”.
Chọn Bus/Device/Function
Firmware scan từng địa chỉ BDF sau root bridge hoặc bridge.
Đọc Vendor ID / Device ID
0xFFFF thường nghĩa là không có device response.
Đọc Class Code
Biết device thuộc storage, network, display, bridge...
Probe BAR
Xác định device cần MMIO/I/O resource bao nhiêu.
Đọc capability
MSI/MSI-X, PCIe capability, power management...
Layout tối thiểu cần nhớ
| Mục | Giá trị | Ghi chú |
|---|---|---|
| 0x00 | Vendor ID | 0xFFFF thường là không có device tại BDF đó. |
| 0x02 | Device ID | Dùng cùng Vendor ID để match driver hoặc tra datasheet. |
| 0x08 | Revision ID / Class Code | Cho biết loại thiết bị và revision silicon. |
| 0x10 - 0x24 | BAR0 - BAR5 | Cho biết vùng MMIO/I/O mà device cần. |
| 0x34 | Capability Pointer | Trỏ tới linked list capability chuẩn PCI. |
Ví dụ dump
BDF 00:1f.2
Vendor ID : 8086
Device ID : 2922
Class Code: 010601 // SATA AHCI Controller
BAR5 : FED1C000 // AHCI MMIO base
Đọc nhanh output này, ta biết đây là thiết bị Intel, class là SATA/AHCI, và firmware/OS sẽ dùng vùng MMIO tại FED1C000 để access register AHCI.
Debug diary: device không xuất hiện
Một case quen thuộc là OS báo không thấy thiết bị, nhưng firmware log không có lỗi rõ ràng. Lúc này đừng vội debug driver. Tôi sẽ kiểm tra theo thứ tự:
Đọc Vendor ID
Nếu là 0xFFFF, kiểm tra link training, reset, power, bus number hoặc bridge window.
Đọc Header Type
Phân biệt endpoint, bridge, multi-function device.
Probe BAR
Nếu BAR size bằng 0 hoặc lạ, device có thể chưa được enable đúng.
Kiểm tra capability
MSI/MSI-X hoặc PCIe capability có thể ảnh hưởng driver sau này.
Checklist khi đọc PCI config space
Bài liên quan
- PCI Architecture Overview
- PCI Configuration Space là gì?
- BDF trong PCIe là gì?
- BAR trong PCIe là gì?
- PCI Resource Allocation là gì?
Nguồn tham khảo public
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.