PCIe Chapter 34:Readiness、進階熱插拔與平台管理

RN(Readiness Notifications,就緒通知)讓軟體在裝置或Function已可接受設定要求時得知消息。DRS(Device Readiness Status,裝置就緒狀態)與FRS(Function Readiness Status,功能就緒狀態)對應不同事件與範圍。先找事件與對象,再讀通知或等待條件。

本章角色與事件就緒通知縮短等待,但要保留事件、對象與時限。先辨識裝置/功能事件確認管理者與支援機制等對應就緒通知或有效時限開始設定,再接事件處理
作者依 Base 6.0 繪製的教學示意;省略與本章無關的交換。

看到 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_UpDownstream 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 TimeConventional 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 進入 D0Immediate_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
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...