PCIe Chapter 10:裝置與連線如何省電

先看本章的角色與路徑

上下兩列分別是 Function 與 Link 的狀態;虛線指向 L1 子狀態的額外條件。上下兩列分別是 Function 與 Link 的狀態;虛線指向 L1 子狀態的額外條件。Function 的電源狀態D0D3hot依 PM 規則Link 的電源狀態L0L1依 ASPM 條件L1.1/L1.2另查兩端能力、控制與時間

作者的分層狀態示意,未列出全部狀態與雙向轉換;本章以適用的 L1.2 設定案例放大說明。

Function 電源狀態與 Link 電源狀態描述不同對象。D0 表示 Function 的工作電源狀態;在符合條件時,它使用的 Link 仍可透過 ASPM(Active State Power Management,主動狀態電源管理)進入省電狀態。

前情提要:Chapter 8 已建立相鄰兩端的 Link;本章再把這兩端的省電能力、控制與退出條件接起來。

規格路線:Tables 5-1/5-2 → PM Capability 與 Link 欄位 → Figures 7-146–7-150 的 L1 Substates → LTR 與退出時間條件。

LTR
Latency Tolerance Reporting,延遲容忍度回報

PCIe 電源管理同時涉及 Function、Link 與平台。D-state、ASPM、L1 Substates 與喚醒各有不同的控制與證據,不能只憑一個 Enable 推論目前狀態。本章用 PMCSR 與 L1.2 算例串起查詢、設定及恢復條件。

完整中文教學 · English · 課程路線

Function 的 D-state 與 Link 的 L-state 分開管理

D0 是 Function 正常工作狀態,但 ASPM 可在 D0 閒置期間降低 Link 耗電。D1、D2 是可選狀態;D3hot 保有主電源,D3cold 沒有主電源,仍可能由輔助電源支持喚醒。Reset 後的 D0uninitialized 也不等於工作介面已準備完成。

L0 可傳輸;L0s 可分方向省電,但 Flit Mode、有 Retimer、或指定的獨立 SSC 時脈條件不支援 L0s。L0p 只用於 Flit Mode,讓部分 Lane 閒置,雙向仍各至少有一條 active Lane。L1 可再細分 L1.0、L1.1、L1.2;L2/L3 則是主電源移除後,以是否有 Vaux 區分的狀態。

狀態來源

§5.2–§5.3.1、Tables 5-1/5-2(pp.600–609);L0s/L0p:§4.2.6.6–§4.2.6.7(p.445)。

讀 PM 能力,再以正確的寫值回 D0

傳統 Capability ID=0x01 指向 PM 結構。作者假設在 0x40 讀完整 DWORD=0xC8035001:ID=0x01、Next=0x50、Version=3,D1/D2 不支援;PME_Support=(value >> 27) & 0x1F = 0x19,支援從 D0、D3hot、D3cold 發出 PME。假設無可選 Data Register、Aux_Current=0 採自供電且必要供電可用。這是能力,不是完整喚醒路徑已就緒的證明。

PME
Power Management Event,電源管理事件
PMCSR 0x44 的 16-bit 操作
動作值意義
讀取0x810BD3hot、No_Soft_Reset=1、PME_En=1、PME_Status=1。
寫入回 D00x0108清 PowerState,對 RW1CS PME_Status 寫零以保留事件。
等待後讀取0x8108D0,PME 事件仍保留。
事件處理完畢後明確清除0x8108刻意對 PME_Status 寫 1;無新事件時讀回 0x0108。
PME
Power Management Event,電源管理事件

以上假設無並行改動或新事件。No_Soft_Reset=1 保留指定 D3hot→D0 軟體轉換的內部狀態,回 D0active;它不免除恢復等待。本例 Immediate Readiness=0、無其他時間例外,所以至少等 10 ms 才再次存取,包含 Configuration。No_Soft_Reset=0 時必須完整初始化,也不保證舊狀態已清除。D3cold、Fundamental Reset 或 L2/L3 Ready 導致的 DL_Down,不沿用這項保存結論。

PowerState 沒有 D3cold 編碼。寫入不支援的 D1/D2 會正常完成,但不改變狀態;PME_Status 也不因 PME_En=0 而停止記錄符合條件的事件。進入 D3hot 前仍須妥善處理未完成交易與需保存的狀態。

能力、寫入屬性與等待

Figures 7-17–7-19、Tables 7-14/7-15(pp.944–949);§5.3.1.4(pp.606–608);Figure 5-18/Table 5-14(pp.654–655)。Figure 7-18 使用包含 Header 的完整 DWORD bit 編號,不可與 +0x02 的 16-bit 讀值混用。

ASPM Enable 需要能力與延遲政策支持

ASPM 在 D0 期間由硬體管理閒置 Link;PCI-PM 則由軟體改變 D-state。普通非 ARI 多 Function 裝置,必須所有 Functions 都離開 D0,才可代表 PCI-PM 發起進 L1。

ARI
Alternative Routing-ID Interpretation,替代路由識別碼解讀

先查兩端 Link Capabilities 的 ASPM Support,再看 Link Control 的 ASPM Control;Enable 不代表當下已在 L1。Link Capabilities 的 L1 Exit Latency 與 Endpoint Device Capabilities 的 L1 Acceptable Latency 要配合整條路徑判斷。多段退出可以重疊,不能直接把所有 Port 延遲相加:Figure 5-8 的例子最後在 T+34 μs 完成。

ASPM 來源

§5.3.2(pp.609–610)、§5.4.1/Figure 5-8(pp.621–640);Tables 7-20、7-23、7-24(pp.956–957、967–972)。

沿時序看 L1 如何進入,再接回交易傳輸

先從 Figure 7-27/Table 7-23 確認 ASPM Support,再以 Figure 7-28/Table 7-24 查看 ASPM Control。這些設定允許 L1 進入;實際交換與兩端動作接到 Figure 5-7 閱讀。

【模擬資料】以下情境為教學用途建立,不代表特定硬體或平台。獨立案例為 8.0 GT/s、Non-Flit Mode Link:Switch Downstream Port 02:01.0 連到 Endpoint Upstream Port 03:00.0。兩端支援並已正確啟用 ASPM L1、延遲政策可用,Endpoint 的 D0 Functions 都允許 L1。本例不啟用 L1.1/L1.2,裝置維持 D0。協商前 Endpoint 已有各 FC 類別所需的最低 credit(接收緩衝額度),足以傳送相應的最大封包。

FC
Flow Control,流量控制

Endpoint 在這條 Link 的下游端,Port 類型卻是 Upstream Port。由它提出要求,Switch 的 Downstream Port 回應。螢幕較窄時,可左右滑動圖查看完整內容。

同一條 Link 的 ASPM L1 正常進入流程時間由上往下。Endpoint 停止新封包並等候重送副本獲得確認,才提出 L1 要求。Switch 接受前也先處理自己的未確認封包。Endpoint 先讓上行方向進入電氣閒置,Switch 再讓下行方向進入電氣閒置。Switch 02:01.0Downstream PortEndpoint 03:00.0Upstream Port停止排送新的 TLP等最後一筆的 Link 層確認停止排送新的 TLP等先前傳送獲得確認停止 TLP 與 DLLP 傳送上行方向進入 Electrical Idle觀察接收方向的 Electrical Idle下行方向也進入 Electrical IdlePM_Active_State_Request_L1 (DLLP)PM_Request_Ack (DLLP)兩端依規則完成 L1 進入
作者依 Base 6.0 Figure 5-7 與 §5.4.1.3.1 整理的教學時序圖。時間由上往下,不按比例;重複傳送的 DLLP 只畫一次。Ordered Sets、時間限制與中斷分支仍須搭配周圍文字查閱。
TLP
Transaction Layer Packet,交易層封包
DLLP
Data Link Layer Packet,資料鏈結層封包

原 Figure 5-7 的 T/D/P 是 Transaction、Data Link、Physical Layer;沿時間往下,查看哪一端先停止排送新封包,以及兩個方向如何先後進入 Electrical Idle(電氣閒置)。這些活動標示與 Figure 3-2 的 Data Link 狀態名稱分開判讀。

等待最後 TLP 的 Link 層確認,用來清空 Retry Buffer(保存重送副本的緩衝區);PM_Request_Ack 則是接受 L1 要求的 DLLP(Data Link Layer Packet,資料連結層封包)。它和 TLP 的 Ack DLLP、端到端讀取的 Completion 各有用途。若先前的 Memory Read 還在等 Completion,那筆讀取仍須繼續追蹤,進入 L1 不會替它完成交易。

延續接受分支:若 Switch 送出 PM_Request_Ack 後才有 Memory Write(記憶體寫入)要從此 Link 傳送,必須先完成 L1 轉換,再發起退出,即使當下沒有足夠的 Flow Control credit 也要退出。回到 L0 後,再按正常額度與排程規則傳送。接著讀 Figure 4-54:L1.Entry → L1.Idle,符合退出條件後到 Recovery,再依適用流程回 L0。這是正常的 L1 退出路徑。

Completion Timeout 在 L1 仍計時,Flow Control Update timers 則凍結。若改走 Figure 5-6 的拒絕分支,PM_Active_State_Nak 是 Message TLP,和要求重送的 Nak DLLP 不同;原圖以 L0s 已啟用為前提。只有無 TLP 的片段時,仍需 PM 協商、Electrical Idle 與 LTSSM 紀錄來核對工具的 L1 標示。

LTSSM
Link Training and Status State Machine,鏈結訓練與狀態機
能力、協商與退出來源

Base 6.0 Figures 7-27/7-28、Tables 7-23/7-24(PDF/印刷 pp.967–968、971);§5.4.1.3 ASPM L1 State、§5.4.1.3.1 ASPM Entry into the L1 State(pp.626–631);Figure 5-6 L1 Transition Sequence Ending with a Rejection (L0s Enabled)(p.632);Figure 5-7 L1 Successful Transition Sequence、§5.4.1.3.2 Exit from the L1 State(p.633);§4.2.7.7 L1/Figure 4-54 L1 Substate Machine(pp.519–520)。Data Link 狀態見 §3.2.1(pp.265–268)、Table 4-48(p.453)。本段的 PDF 與印刷頁碼相同。

L1.2 要依兩端能力與設定順序建立

獨立 L1.2 案例的設定快照
位置Downstream PortUpstream Port
Header,0x2000x0001001E0x0001001E
Capabilities,0x2040x00280A1F0x0051141F
Control 1,0x2080x408014040x40800004
Control 2,0x20C0x000000510x00000051

各自走訪 Extended 清單後,假設剛好在 0x200 找到 ID=0x001E、Version=1、Next=0;版本 1 沒有 +0x10 Status。兩端低五個 capability bits 都是 0x1F,支援四種 Substates 與總支援標記。宣告 T_POWER_ON 分別為 10/100 μs、common-mode 恢復為 10/20 μs;已設定 Control 2 的 Value=10、Scale=1,得到 100 μs。Control 1 只開 bit 2 的 ASPM L1.2。Common_Mode_Restore_Time 在 Downstream Port 設 20 μs,在 Upstream Port 是 RsvdP。

平台已確認此快照適合連接設計,不把兩端宣告值取最大值當成通用演算法。啟用前必須兩端都支援;ASPM Substate 設定期間先停用 ASPM L1,PCI-PM Substate 則在 D0 設定。先完成適用的時間與相同 LTR threshold,再依 Downstream Port、Upstream Port 順序開對應 Enable;停用順序相反。修改時間欄位須先清相應 L1.2 Enable,最後依政策恢復 ASPM L1。

L1 Substates 查詢與設定路徑

Figures 7-146–7-150/Tables 7-129–7-132(pp.1103–1108);§5.5、§5.5.4–§5.5.5/Table 5-11(pp.640、650–651)。L1.1 保持 common-mode,L1.2 不要求保持,皆使用 CLKREQ#;ASPM L1.2 需要 LTR。

相同 Enable,仍可能有不同的進入結果

Control 1 的 threshold Value=128、Scale=2,為 128 × 1024 ns=131072 ns(131.072 μs)。假設已在 ASPM L1.0、CLKREQ# 已 deassert、其他條件成立,最新有效 snoop/no-snoop LTR 需求若為 204800/102400 ns,後者不足,不能進 L1.2;改為 204800/153600 ns 後,兩者皆達 threshold,在上述條件下應進入。

某一類「無需求」可走另一判斷分支,不等於 Requirement=1、Value=0;後者要求盡可能低的延遲。這些是最近的有效回報,不是 Max Latency Register 上限。LTR 也不是 Root Complex 的硬性延遲承諾。本例未開 L1.1,不能假設不足時必然退到 L1.1。啟用 Endpoint LTR 前,Root Complex 與沿途 Switch 都須支援,並由靠近 Root Port 者先啟用。

LTR 與進入條件

§5.5.1(p.644);Figure 6-15、§6.18(pp.781–782);Table 7-131(pp.1107–1108)。

喚醒先恢復通路,再辨識事件來源

L2 不能傳一般 TLP。裝置依 form factor 用 WAKE# 或 Beacon 請平台恢復電源、時脈與 Link,再送含 Requester ID 的 PM_PME。因此仍需 PME_En、輔助供電與平台路徑配合。(§5.3.3.1–§5.3.3.2,pp.615–616。)

補充背景:ACPI 6.6 §7.3.8–§7.3.11 的 _PR0/_PR3 描述 D0/D3hot 所需電源資源,並非 PCIe Register。文件 pp.497–498 對應 PDF pp.568–569。

檢查條件是否足夠

No_Soft_Reset=1 能保證 D3cold 後保留全部狀態嗎?

不能;它只適用指定 D3hot→D0 軟體轉換。

只有 Endpoint 支援 L1.2,可以只開一端嗎?

不可以。兩端對應能力、設定順序、LTR 與時序條件都要成立。

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...