PCIe Chapter 29:Enhanced Allocation、Resizable BAR 與拓樸轉譯
BAR(Base Address Register,基底位址暫存器)描述裝置資源;Resizable BAR(可調大小的 BAR)讓軟體從支援大小中選擇。配置還須通過上層視窗與平台資源限制。本章把「可選大小」接回 Chapter 4 的完整位址路徑,再介紹其他資源描述方式。
想調整 BAR,如何從能力找到可配置的範圍?
先沿 Extended Capability List 找到 ID=0015h、Version=1 的 Resizable BAR 結構。Figure 7-174 顯示每個可調 BAR 各有一組 Capability 和 Control;第一組 Control 的 Number of Resizable BARs 才告訴我們總共有幾組。再依 Figure 7-177 的 BAR Index 找原本的 BAR;Index=0 指向 Configuration Space offset 10h,64-bit BAR 則指向較低的 DWORD。
【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。假設某 Endpoint 的 BAR0 是 32-bit Memory BAR,Resizable BAR 結構起點為 R,只有一組 Capability/Control。Capability(R+04h)讀到 00005000h,Control(R+08h)讀到 00000820h;Control 中代表更大尺寸的支援位元均為零。平台目前只有一段符合條件的 256 MiB 範圍可用,沒有可用的 1 GiB 範圍。
| 讀取位置 | 讀值與欄位 | 下一步 |
|---|---|---|
| Capability R+04h | bit12=1、bit14=1 | Table 7-152:分別支援 256 MiB、1 GiB |
| Control R+08h | BAR Index=0;Number of Resizable BARs=1;BAR Size=8 | Table 7-153:目前選擇 220+8 bytes,即 256 MiB |
| 平台資源 | 可分配 90000000h–9FFFFFFFh | 範圍為 256 MiB,基址符合大小對齊 |
兩個支援位元提供選項;BAR Size 是目前設定。大小編碼 8 對應 256 MiB,編碼 10 對應 1 GiB。寫入未宣告支援的編碼會產生 undefined(規格未定義)的結果。1 GiB 仍可由 32-bit BAR 表示;規格只允許 64-bit BAR 宣告 4 GiB 或更大的選項。
假設之後平台騰出 C0000000h–FFFFFFFFh,並確認上層 Bridge Window 可以涵蓋這個 1 GiB 範圍。系統先依裝置與平台要求停止使用資源,再清除 Command Register 的 Memory Space Enable,將 BAR Size 寫為 10。此時對應 BAR 的內容為 undefined;軟體重新寫入基址 C0000000h,確認整條路徑後才重新啟用 Memory Space Enable。若資源未獲配置,則不啟用解碼。停止裝置工作的方法需查裝置與平台文件;完整 Window 配置見 Chapter 4。
一般 Resizable BAR 可由 PF(Physical Function,實體功能)實作,不改變 SR-IOV 的 VF BAR 設定。需要調整 VF(Virtual Function,虛擬功能)資源時,應在 PF 的 Configuration Space 查找獨立的 VF Resizable BAR Capability;該 Capability 不存在於 VF。VF BAR Size 變更前須清除 SR-IOV Control 的 VF MSE,之後重設 VF BAR;實際大小還須考慮 System Page Size。相關作用範圍見 Chapter 26。
- SR-IOV
- Single Root I/O Virtualization,單根I/O虛擬化
PCIe Base 6.0 §7.8.6,Figures 7-174、7-176、7-177,Tables 7-152、7-153,印刷/PDF pp.1134–1142;§7.8.7,p.1142。
EA 的 entry 如何描述一段資源?
- EA
- Enhanced Allocation,增強資源配置
EA(Enhanced Allocation,增強配置)在適用的永久連接拓樸中,以 entry 描述資源。先看 Figure 6-26 確認 Function 和 Bridge 兩側是否適用,再從 §7.8.5 找 entry。Type 0 的第一筆 entry 位於 Capability 起點加 04h;Type 1 有額外的第二個 DWORD,第一筆從 08h 開始。
【模擬資料】假設另一個永久連接的 Type 0 Function,其 EA 起點為 E,第一筆 entry 的三個 DWORD 依序為 80FF0022h、A0000000h、0000FFFCh。Figure 7-168/Table 7-148 顯示 Entry Size=2,表示首個 DWORD 後面還有兩個 DWORD,所以這筆共 12 bytes,下一筆從 E+10h 開始。BEI(BAR Equivalent Indicator,對應 BAR 的編號)=2 指向 offset 18h;Enable=1,Writable=0。Primary Properties=00h 是 Non-Prefetchable Memory,Secondary Properties=FFh 表示須使用 Primary 定義。
再看 Figure 7-169:Base 與 MaxOffset 的 Field Size 均為 0,兩者都是 32-bit。Base 的低兩個地址位元補 00b,得到 A0000000h;MaxOffset 的低兩位補 11b,得到 0000FFFFh。因此涵蓋 A0000000h–A000FFFFh,共 64 KiB。這是該 entry 的資源範圍;對應的 BAR2 必須硬接為零,不能把同一筆資源再算成另一個 BAR 需求。
Enable=0 不表示這段資源可轉配給其他 Function。Bridge 的 EA 也不必列出所有下游資源,軟體仍須搜尋下游 Function;Memory Space Enable 與 I/O Space Enable 的規則仍適用。
PCIe Base 6.0 §§6.23、7.8.5.2–7.8.5.3,Figure 6-26、Figures 7-168–7-169、Tables 7-148、7-150,印刷/PDF pp.810–812、1129–1133。
Hierarchy ID 和 FPB 要分別查什麼?
- FPB
- Flattening Portal Bridge,扁平化入口橋接器
在多個 Hierarchy 的系統裡,單靠 Routing ID(路由識別碼)不一定能跨階層區分 Function。§6.25 使用 System GUID 與 Authority ID、Hierarchy ID,以及該階層中的 Routing ID 一起識別。假設同一系統有 Hierarchy 0001h 和 0002h,兩者都出現 Routing ID 0300h;階層不同,不能當成同一個 Function。這個例子假設系統識別資訊有效;若 Authority ID=00h,System GUID 並無意義,不能拿它當有效的全球識別資訊。
Hierarchy ID Message 由 Downstream Port 在軟體要求下產生,接收端的 Upstream Port 可透過 Hierarchy ID Extended Capability 回報資訊。Figure 2-55/2-56 分別是 Non-Flit/Flit Mode 的訊息格式,§7.9.17 描述接收後的 Capability;實際如何使用資訊仍由平台決定。
FPB(Flattening Portal Bridge,扁平化入口橋接)處理另一個問題:如何分配 Routing ID 與 Memory Space。先看 Figure 6-28 定位採用 FPB 的邏輯 Bridge,再看 Figure 6-29 的 Switch 扁平化,最後以 Figure 6-30 理解 bit vector 如何將資源區段指派給 Secondary Side。這是需要支援與設定的可選機制,不能直接套用到未啟用 FPB 的 Bridge。
PCIe Base 6.0 §2.2.8.6.4,Figures 2-55/2-56,pp.185–186;§6.25,pp.815–816;§6.26.1,Figures 6-28–6-30,pp.819–821;§7.9.17,pp.1268–1271。印刷頁與 PDF 頁相同。
Hierarchy ID Message 的 System GUID 要從哪裡讀?
先讀 §2.2.8.6.4 與 Table 2-31,確認這是 PCI-SIG Defined Type 1 VDM:Message Code 7Fh、Vendor ID 0001h、Subtype 01h。它使用帶資料的 MsgD,Length 為 4 DW,也就是 16 bytes;TC 為 000b,Attr 與 Tag 為 Reserved;Routing 011b 表示 Broadcast from Root Complex。若要回顧 Message Code 與 Subtype 的差別,可先看 Chapter 36。
- DW
- Double Word,4 bytes的資料單位
- TC
- Traffic Class,流量類別
接著依模式選 Figure 2-55(Non-Flit)或 Figure 2-56(Flit)。Hierarchy ID 在 Header 的 bytes 8–9;byte 13 是 GUID Authority ID;bytes 14–15 是 System GUID 的高 16 bits。Payload 的 bytes 16–31 則包含 System GUID 的低 128 bits。因此,完整 System GUID 是高 16 bits 與低 128 bits 合成的 144 bits;只保存 Payload 會漏掉高位元。§6.25 列出各 byte 與 GUID 位元的對應。
比對系統身分時,依 §6.25 完整比較 Authority ID、System GUID 和 Hierarchy ID,再結合該 Hierarchy 內的 Routing ID。Authority ID 00h 時,依 Table 6-17,System GUID 沒有意義且必須為零,不能用它宣稱已取得有效的全球識別。接收端可以各自選擇是否檢查訊息格式,不得檢查 Reserved bits;若已實作的檢查發現違規,則在接收 Port 回報 Malformed TLP。
- TLP
- Transaction Layer Packet,交易層封包
版本與來源
本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準,文件頁與 PDF 頁相同。案例的配置與讀值均為作者假設,並非實機測量。
完整來源定位 / Complete source locations
- §7.8.6 Resizable BAR Extended Capability, pp.1134–1137; §7.8.6.2 Resizable BAR Capability Register, Figure 7-176 and Table 7-152, pp.1137–1140; §7.8.6.3 Resizable BAR Control Register, Figure 7-177 and Table 7-153, pp.1140–1142; §7.8.7 VF Resizable BAR Extended Capability, p.1142.
- §6.23 Enhanced Allocation, Figure 6-26, pp.810–812; §7.8.5.3 Enhanced Allocation Per-Entry Format (Offset 04h or 08h), Figures 7-168–7-169, Tables 7-148 and 7-150, pp.1129–1133.
- §2.2.8.6.4 Hierarchy ID Message, Table 2-31 Hierarchy ID Message, Figures 2-55 Hierarchy ID Message - Non-Flit Mode and 2-56 Hierarchy ID Message - Flit Mode, pp.185–186; §6.25 Hierarchy ID Message, Table 6-17 System GUID Authority ID Encoding, pp.815–817; §6.26.1 Introduction, Figures 6-28–6-30, pp.819–821; §7.9.17 Hierarchy ID Extended Capability, pp.1268–1271.


Comments