PCIe Chapter 10:裝置與連線如何省電
先看本章的角色與路徑
作者的分層狀態示意,未列出全部狀態與雙向轉換;本章以適用的 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 算例串起查詢、設定及恢復條件。
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,電源管理事件
| 動作 | 值 | 意義 |
|---|---|---|
| 讀取 | 0x810B | D3hot、No_Soft_Reset=1、PME_En=1、PME_Status=1。 |
| 寫入回 D0 | 0x0108 | 清 PowerState,對 RW1CS PME_Status 寫零以保留事件。 |
| 等待後讀取 | 0x8108 | D0,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 回應。螢幕較窄時,可左右滑動圖查看完整內容。
- 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 要依兩端能力與設定順序建立
| 位置 | Downstream Port | Upstream Port |
|---|---|---|
| Header,0x200 | 0x0001001E | 0x0001001E |
| Capabilities,0x204 | 0x00280A1F | 0x0051141F |
| Control 1,0x208 | 0x40801404 | 0x40800004 |
| Control 2,0x20C | 0x00000051 | 0x00000051 |
各自走訪 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 與時序條件都要成立。


Comments