這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
pcie_mechanism [2025/06/23 16:31] don [Mechanism #1:I/O Port-based(0xCF8 / 0xCFC)] |
pcie_mechanism [2025/06/23 18:20] (目前版本) don |
||
---|---|---|---|
行 14: | 行 14: | ||
| 🚫 限制 | 無法存取多段 Bus 空間、無法支援完整 PCIe 擴展功能 | 需 BIOS/ACPI 支援並正確配置 MMCONFIG | | | 🚫 限制 | 無法存取多段 Bus 空間、無法支援完整 PCIe 擴展功能 | 需 BIOS/ACPI 支援並正確配置 MMCONFIG | | ||
- | ==== Mechanism #1:I/O Port-based(0xCF8 / 0xCFC) ==== | + | ==== Mechanism #1:I/O Port-based(0xCF8 / 0xCFC)==== |
< | < | ||
行 27: | 行 27: | ||
* 不能存取 offset 超過 256B(無法取到 PCIe Capability 結構) | * 不能存取 offset 超過 256B(無法取到 PCIe Capability 結構) | ||
* 項目適用於老式 PCI 裝置或 BIOS 內存取 Host Bridge | * 項目適用於老式 PCI 裝置或 BIOS 內存取 Host Bridge | ||
+ | |||
+ | <color # | ||
+ | ^ Bit ^ 範圍 名稱 ^ 寬度 ^ 說明 ^ | ||
+ | | 31 | Enable Bit | 1 | 必須設為 1 才能啟用 | | ||
+ | | 30–24 | Reserved | 7 | 必須為 0 | | ||
+ | | 23–16 | Bus | 8 | Bus number | | ||
+ | | 15–11 | Device | 5 | Device number | | ||
+ | | 10–8 | Function | 3 | Function number | | ||
+ | | 7–2 | Register | 6 | Config register number (dword aligned)| | ||
+ | | 1–0 | Always 0 | 2 | 必須為 0(因為只能對齊讀取)| | ||
< | < | ||
如何透過 Mechanism 1 存取 bus 0 device 31 function 0 offset 0 | 如何透過 Mechanism 1 存取 bus 0 device 31 function 0 offset 0 | ||
- | Bus | + | UINT32 pci_addr |
- | Device | + | | (0x00 << 16) // Bus 0 |
- | Function | + | |
- | Offset | + | | (0x0 << 8) // |
+ | | (0x10 & 0xFC); | ||
- | 0x80000000 | + | Enable Bit |
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | ------------------------------- | ||
+ | 最終地址 | ||
+ | 將最終 32bit 地址放入IO 0xCF8 , 再從 0xCFC 讀回 | ||
</ | </ | ||
行 51: | 行 69: | ||
* 可完整存取 PCIe Capabilities(超過 256 bytes) | * 可完整存取 PCIe Capabilities(超過 256 bytes) | ||
* 搭配 ACPI 的 MCFG Table 可以動態獲得配置空間範圍 | * 搭配 ACPI 的 MCFG Table 可以動態獲得配置空間範圍 | ||
+ | |||
+ | |||
+ | ^ 欄位 ^ 位元區間 ^ 寬度 ^ 對應意義 ^ | ||
+ | | Bus | 27–20 | 8 位元 | 支援 Bus 0–255 | | ||
+ | | Device | 19–15 | 5 位元 | 支援 Device 0–31 | | ||
+ | | Function | 14–12 | 3 位元 | 支援 Function 0–7 | | ||
+ | | Offset | 11–0 | 12 位元 | 支援 4KB 配置空間 | | ||
+ | | MMCONFIG BASE | 28+ | 不定 平台定義的起始地址 | | ||
+ | |||
行 69: | 行 96: | ||
使用 Utility -> RW -> Memory 讀取 0xC00F8000 | 使用 Utility -> RW -> Memory 讀取 0xC00F8000 | ||
+ | |||
</ | </ | ||
+ | |||
+ | <color # | ||
+ | |||
+ | P2SB Device / Bus 0 Device 31 Function 1 0ffset 0 | ||
+ | PMC Device |