PCIe Chapter 34:Readiness、進階熱插拔與平台管理
RN(Readiness Notifications,就緒通知)讓軟體在裝置或Function已可接受設定要求時得知消息。DRS(Device Readiness Status,裝置就緒狀態)與FRS(Function Readiness Status,功能就緒狀態)對應不同事件與範圍。先找事件與對象,再讀通知或等待條件。
看到 DRS 後,下一筆設定讀取怎麼理解?
- DRS
- Device Readiness Status,裝置就緒狀態
§6.22.1說明DRS涵蓋的Configuration-Ready範圍。裝置送出通知後,所指示的非VF功能不得再對設定要求回RRS,直到又發生後續適用事件。Switch的就緒範圍另有明確規則,不能把通知擴大到所有物理整合在下方的裝置。
- VF
- Virtual Function,虛擬功能
作者情境:重設後Link已啟動,管理者正在等待裝置就緒。若收到適用DRS,就依規則繼續設定;若尚未收到,應依支援狀態選擇適用的等待流程;§6.22 的 DRS-only 與 hybrid 建議各有前提。這裡的分支是不同就緒依據,不是「沒通知就永久無法使用」。
很多 Function 同時就緒,如何避免漏消息?
Root Port或RCEC若支援FRS,必須提供FRS Queueing。訊息依收到順序排隊;讀到最舊項目後,以規定的寫入操作移出。佇列滿時,丟棄新訊息並設Overflow,原有內容保留。這些是§6.22.3的明確行為,不能把Overflow當成佇列自動換成最新快照。
- FRS
- Function Readiness Status,功能就緒狀態
非同步拔除與外殼管理,還缺哪一塊?
先把Chapter 11–13的Hot-Plug、DPC與控制權接回來,再讀Appendix I。參考模型先確認管理者與所選機制,再處理插卡存在、就緒與中斷。DPC是建議機制,但整個參考流程本身不是強制規範。
- DPC
- Downstream Port Containment,下游連接埠錯誤隔離
NPEM(Native PCIe Enclosure Management,原生PCIe外殼管理)提供狀態燈等控制,可位於下游Port或Endpoint,位置要用Figures 6-35、6-36辨識。SFI(System Firmware Intermediary,系統韌體中介)另讓韌體介入部分事件;不要把LED狀態、裝置就緒與OS控制權混成一個bit。
重設後,要從哪裡開始等?
先確認發生的是裝置層級事件,還是特定 Function 的事件。DRS 對應裝置層級的就緒通知;FRS 對應特定 Function 的就緒通知。收到通知後,仍要確認它所涵蓋的對象,以及通知之後是否又發生新的適用事件。
手機閱讀時,可左右滑動表格查看完整內容。
| 作者情境 | 先讀哪個線索 | 接下來怎麼判斷 |
|---|---|---|
| 下游裝置的 Link 從 DL_Down 轉為 DL_Up | Downstream Port 的 DRS Supported 與 DRS Message Received;再看 §6.22.1 | 核對收到的 DRS 是否涵蓋目標非 VF Function。Switch Upstream Port 的 DRS 有自己的就緒範圍;Switch 下方物理整合裝置不由該 DRS 表示就緒。 |
| 某個 Function 執行 FLR | 若實作 FRS,檢查訊息的 Requester ID 與 FRS Reason;再看 §6.22.2 | 確認訊息對應哪個 Function、哪一次事件。其他 Function 不能只憑這筆訊息判定就緒。 |
| 尚未收到通知 | 看適用的等待機制及 §7.9.16 的 Valid | 規格提供多個入口;應先確認各自適用條件。已確認兩端 DRS 支援時,§6.22 的建議 DRS-only 流程與支援未知時的 hybrid 流程不同。 |
- VF
- Virtual Function,虛擬功能
- FLR
- Function Level Reset,以功能為範圍的重設
Configuration-Ready 指可依規則處理 Configuration Request;它本身不證明 BAR、驅動程式或裝置內部功能已完成初始化。上述情境為教學假設,並非實機資料。
- BAR
- Base Address Register,基底位址暫存器
DRS 在哪裡結束?FRS 又從哪裡來?
先查 §2.2.8.6.1 的 PCI-SIG Defined VDM 共通格式,再依目前模式讀 Figure 2-51(Non-Flit Mode)或 Figure 2-52(Flit Mode)。DRS 沒有 Payload:Type 是 Msg、TC 是 000b、Message Code 是 7Fh、Vendor ID 是 0001h、Subtype 是 08h;Attr 與 Tag 為 Reserved。Table 2-29 的 Routing 100b 表示接收端本地終止。
- TC
- Traffic Class,流量類別
教學情境:Endpoint 的 Upstream Port 在相關非 VF Function 已達 Configuration-Ready 後,向相鄰的 Root Port 發送 DRS。Root Port 收到 DRS 後,訊息就在這個接收端終止,不會原封不動繼續轉送。假設 Root Port 支援 FRS、DRS Signaling Control 設為 DRS to FRS Signaling Enabled,且 DRS Message Received 因這次收訊從 0 變為 1:依 §7.5.3.7,Port 必須另送一筆 FRS,Reason 是 0001b。該 FRS 的 Requester ID 指向這個 Downstream Port,Routing 000b 表示送往 Root Complex。如果 FRS Supported 為 0,卻將控制欄位設為此模式,結果未定義。
§6.22.1 規定支援 Flit Mode 的相關 Ports 必須實作 DRS,但不能由「目前速度或模式」單獨推論另一端的完整能力。DRS 本身沒有 Enable/Disable 機制;DRS Signaling Control 管的是收到通知後的訊號處理。接收端對格式規則的檢查各自可選,不得檢查 Reserved bits;已實作的檢查若發現違規,則在接收 Port 回報 Malformed TLP。未實作該 PCI-SIG Defined VDM 的 Completer 依共通規則靜默丟棄。
- TLP
- Transaction Layer Packet,交易層封包
收到 FRS 時,Requester ID 指向誰?
先依 §2.2.8.6.3 選擇目前模式的 Figure 2-53(Non-Flit Mode)或 Figure 2-54(Flit Mode),找到 Requester ID 與 FRS Reason;再查同節的 Reason 定義及 §6.22.2,判斷這次通知涵蓋誰。FRS 是沒有 Payload 的 PCI-SIG Defined Vendor_Defined Type 1 Message:Type 為 Msg、TC 為 000b、Subtype 為 09h。Table 2-30 的 Message Code 是 7Fh,Routing 是 000b,表示送往 Root Complex。§2.2.8.6.1 的 PCI-SIG VDM 共通規則將 Vendor ID 設為 0001h;FRS 的 Attr 與 Tag 則是 Reserved,不能拿來表示通知原因或對象。
- TC
- Traffic Class,流量類別
Reason 0011b 表示 Requester ID 所指 Function 已完成 FLR 並達到 Configuration-Ready。若 Reason 是 1000b,Requester ID 指向 Physical Function(PF,實體功能),就緒範圍是與它關聯的所有 Virtual Functions(VF,虛擬功能);1001b 則表示那些 VF 已停用,PF 的 SR-IOV 資料結構可供存取。Reason 0010b 描述所指 Function 完成 D3Hot 到 D0;回到 D0uninitialized 或 D0active 取決於 No_Soft_Reset。Reason 0001b 表示所指 Downstream Port 收到 DRS,且已啟用 DRS to FRS Signaling;DRS 的就緒範圍還須回讀 §6.22.1。其他 Reason 值為 Reserved。
- FLR
- Function Level Reset,以功能為範圍的重設
- SR-IOV
- Single Root I/O Virtualization,單根I/O虛擬化
教學假設:一筆 FRS 的 Requester ID 指向 PF A,Reason 為 1000b。這筆訊息說明 PF A 的關聯 VF 已達 Configuration-Ready;它沒有替其他 PF 的 VF 回報就緒。接收端對訊息形成規則的檢查是各自可選的;若實作檢查並發現違規,依 §2.2.8.6.3 在接收 Port 回報 Malformed TLP,且不得檢查 Reserved bits。另依 §2.2.8.6.1,沒有實作該 PCI-SIG Defined VDM 的 Completer 會靜默丟棄它;這與實作檢查後偵測到格式違規是不同情況。
- TLP
- Transaction Layer Packet,交易層封包
同一個時間值,該從哪個事件開始計時?
Readiness Time Reporting Extended Capability 是可選機制。先依 Capability 鏈結找到它,再看 Figure 7-314:兩個時間 Register 分別位於 Capability 起點的 +04h、+08h。接著查 Figure 7-317、7-318 與 Tables 7-279、7-280,確認欄位和適用對象。
手機閱讀時,可左右滑動表格查看完整內容。
| 時間欄位 | 計時起點 | 先確認 |
|---|---|---|
| Reset Time | Conventional Reset 完成 | 非 VF;Immediate Readiness 為 1 時,此欄位不適用。 |
| DL_Up Time | 上方 Downstream Port 回報 Data Link Layer Link Active | 適用於關聯 Upstream Port 的 Function;不適用 VF。 |
| FLR Time | 對該 Function 發出 FLR | 該 Function 支援 FLR。 |
| D3Hot to D0 Time | 要求該 Function 從 D3Hot 進入 D0 | Immediate_Readiness_on_Return_to_D0 與 VF 的特殊條件。 |
讀值前先看 Valid。Valid 為 0 時,時間欄位尚無定義,不能拿來計時。Valid 為 1 後,依 Figure 7-315 將編碼拆成 Scale 和 Value,以 Value × 32^Scale ns 解讀;Scale 6、7 為 Reserved。快取值僅可在同一裝置仍以相同方式運作時使用。
例如:FLR 發出後,符合條件的 FLR Time 是從發出 FLR 開始計算;DL_Up Time 則有不同起點,不能把兩個時間相加當成通用等待流程。若收到適用通知或其他規定的等待條件較早成立,應依 §7.9.16 的條件判斷。
FRS Queue 滿了,軟體還能知道什麼?
教學情境:假設 Root Port 的 Queue 已滿,內容依序為 A、B,此時新的 FRS 訊息 C 抵達。§6.22.3 規定保留 A、B,丟棄 C,並設置 FRS Message Overflow;讀 Queue Register 時先看到 A,寫入該 Register 才移除最舊項目,接著才能讀取 B。
FRS Message Received 或 Overflow 從 0 變成 1 時,若中斷已啟用則產生中斷。Overflow 告訴軟體曾有訊息未被排入,現存佇列無法補回 C 的內容。Reset 後 Queue 為空;Root Port 的 Link 轉為 DL_Down 時也會清空。RCEC 的 Queue 對應它自身或所關聯 RCiEP 產生的訊息,判讀前先辨識接收者。
裝置就緒、指示燈與熱插拔管理如何接起來?
Appendix I 的 Figure 與流程是非規範性的參考模型:先確認 OS 與系統韌體各自掌握哪些控制權,再選擇 Hot-Plug Surprise 或 DPC(Downstream Port Containment,下游連接埠隔離);該模型建議有 DPC 時使用 DPC,但不代表所有平台都必須採用同一流程。
外殼指示另由 NPEM 處理。Figures 6-35、6-36 分別展示能力位於 Downstream Port 或 SSD 端的例子;Figure 6-37 再接到寫入 NPEM Control 與 command completed。命令完成表示介面回報完成,外殼接線、燈數及閃爍模式不在 Base 6.0 定義範圍內。燈號也不能代替 DRS 或 FRS 判斷 Configuration-Ready。
- NPEM
- Native PCIe Enclosure Management,原生PCIe機箱管理
AF 的 FLR 可以直接套用一般 PCIe Function 嗎?
AF(Conventional PCI Advanced Features,傳統PCI進階功能)針對符合條件、整合在Root Complex內的傳統PCI裝置。§6.29限定其FLR與Transactions Pending的使用前提。一般PCIe Function仍讀自己的能力與Chapter 9流程;名稱相似,不代表暫存器位置與適用對象相同。
版本與來源
本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準,文件頁與 PDF 頁相同。案例的配置與讀值均為作者假設,並非實機測量。
完整來源定位
- Base 6.0 §2.2.8.6.1 PCI-SIG Defined VDMs, pp.181–182; Figures 2-49 Header for PCI-SIG-Defined VDMs - Non-Flit Mode, 2-50 Header for PCI-SIG-Defined VDMs - Flit Mode
- Base 6.0 §2.2.8.6.2 Device Readiness Status (DRS) Message, pp.182–183; Table 2-29 DRS Message; Figures 2-51 DRS Message - Non-Flit Mode, 2-52 DRS Message - Flit Mode; §7.5.3.7 Link Control Register, p.975; Table 7-24 Link Control Register
- Base 6.0 §2.2.8.6.3 Function Readiness Status Message (FRS Message), pp.183–185; Table 2-30 FRS Message; Figures 2-53 FRS Message - Non-Flit Mode, 2-54 FRS Message - Flit Mode
- Base 6.0 §6.22; §6.22.1; §6.22.2; §6.22.3; pp.805,808,809,810
- Base 6.0 §7.9.16 Readiness Time Reporting Extended Capability; §7.9.16.2–§7.9.16.3; pp.1264–1267; Figures 7-314 Readiness Time Reporting Extended Capability, 7-315 Readiness Time Encoding, 7-317 Readiness Time Reporting 1 Register, 7-318 Readiness Time Reporting 2 Register; Tables 7-279 Readiness Time Reporting 1 Register, 7-280 Readiness Time Reporting 2 Register
- Base 6.0 §I; §I.1; §I.2; pp.1587–1590
- Base 6.0 §6.28; §6.29; §7.9.22; pp.836–839,841,1288; Figures 6-35 Example NPEM Configuration using a Downstream Port, 6-36 Example NPEM Configuration using an Upstream Port, 6-37 NPEM Command Flow


Comments