分開看 Function 與 Link,再設定省電路徑

選擇步驟後,圖中對應的元件與下方解說會加上重點標示。完整圖與所有解說會持續顯示;也可用方向鍵切換步驟。

先區分上下兩列的對象,再讀各自控制。橫線表示各列有自己的轉換規則,不把 D-state 與 L-state 畫成同一條狀態鏈。

上下兩列分別是 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,延遲容忍度回報
  1. 先確定想省的是哪一部分

    本章分開說明不同 Mode 的支援條件;Flit Mode 不支援 L0s,不能照搬舊模式的狀態集合。

    分清 Function 的 D-state 與 Link 的 L-state,再選 PMCSR 或 Link 控制。

    Base 6.0 §5.2–§5.3.1/Tables 5-1–5-2,pp.600–609。

  2. 取得兩端的能力與控制

    ASPM 控制 Link;PMCSR 控制 Function。L1 子狀態的支援與 Enable 必須依兩端條件安排。

    讀 PM Capability、Link Capabilities/Control;需要 L1 子狀態時,再找到 L1 PM Substates Extended Capability。

    Base 6.0 Figures 7-17–7-19、7-24、7-27–7-28、7-146–7-150,pp.944–949、956–957、967–972、1103–1108。

  3. 依規則建立設定與時間參數

    本章逐項說明 Control 1/Control 2 的適用狀態及兩端先後;圖不省略這些設定前提。

    沿正文的設定順序處理 Enable 與退出時間,確認目前狀態允許修改相關欄位。

    Base 6.0 §5.5.4–§5.5.5、§7.8.3.3–§7.8.3.4,pp.650–651、1106–1108。

  4. 檢查進入及退出所需條件

    已支援、已啟用與當下允許進入省電狀態是相連的檢查步驟;喚醒另依電源與 PME 路徑處理。

    PME
    Power Management Event,電源管理事件

    Enable 設定完成後,仍依 LTR(Latency Tolerance Reporting,延遲容忍回報)與相關時間要求判斷是否可進入 L1.2;退出後再依狀態確認可用性。

    Base 6.0 §5.5.1、§6.18/Figure 6-15,pp.644、781–782;§5.8–§5.9,pp.654–655。

圖中元件

L1 子狀態

本章用同一條 Link 的兩端設定說明 L1.1/L1.2。

基本責任

子狀態屬於 Link 省電機制,不是 Function 的另一個 D-state。

1. 裝置在 D0,Link 還能省電嗎?

可以。D-state 描述 Function 的電源管理狀態,L-state 描述 Link 的狀態。D0 是 Function 的正常工作狀態,但在沒有傳輸需求時,啟用的 Active State Power Management(ASPM)仍可讓 Link 進入較省電的狀態。新流量出現時,Link 再恢復傳輸。

先分清楚誰進入低功耗
狀態管理對象與用途恢復時要注意
D0/D1/D2/D3hot/D3coldFunction。D1、D2 可選;D3hot 仍有主電源,D3cold 沒有主電源。D3hot 可透過 PMCSR 回 D0;D3cold 需要平台恢復電源與相應 Reset。
L0Link 正常傳輸;Flit Mode 的 L0p 可讓部分 Lane 閒置。L0p 仍至少保留雙向各一條 active Lane,不是整條 Link 停止傳輸。
L0s低恢復延遲的 Link 省電狀態,可分方向進入。Flit Mode 不支援;有 Retimer 或指定的獨立 SSC 時脈條件時,也不得宣告支援。
L1、L1.1、L1.2Link 降低耗電;Substates 可進一步處理時脈與電氣狀態。是否能用,取決於雙端能力、控制、時序與進入條件。
L2/L3主電源已移除的 Link 狀態;是否有 Vaux 區分 L2 與 L3。L2 不傳一般封包,要先喚醒電源/時脈與 Link。

Vaux 指輔助電源,實際供應方式取決於 form factor。D3cold 不是「完全沒有任何電源」的同義詞:若要在主電源移除後偵測喚醒事件,仍需適當的輔助供電。

此外,D0 還分 uninitialized 與 active。剛完成 Conventional Reset 或 FLR 的 Function 回到 D0uninitialized,不能只因 PowerState=00b 就假定裝置工作介面已可使用。

FLR
Function Level Reset,以功能為範圍的重設
D-state 與 L-state 的關係

§5.2、Table 5-1(pp.600–604);§5.3.1(pp.604–608);Table 5-2(p.609);D0 子狀態見 p.605。L0s 限制與 L0p 見 §4.2.6.6–§4.2.6.7(p.445)。這裡只建立狀態關係,不把圖表中的可能組合當成任意可直接轉移的操作。

2. 要查裝置的省電能力,先找哪個 Capability?

先走傳統 Capability 清單找 ID=0x01,再看 Figure 7-17 的 Power Management 結構。注意 Figure 7-18 把 Capability ID、Next Pointer 與能力欄位畫在同一個 32-bit 範圍內;如果只讀 +0x02 的 16-bit PMC,bit 編號要隨讀取起點調整。本例直接讀完整 DWORD,避免混用兩套編號。

PM 能力與狀態的教學讀值
位置與寬度值先取得的資訊
0x40,32 bits0xC8035001ID=0x01、Next=0x50、Version=3;D1/D2 不支援。
0x44,16 bits0x810BPowerState=3、No_Soft_Reset=1、PME_En=1、PME_Status=1。

(0xC8035001 >> 27) & 0x1F = 0x19,代表可從 D0、D3hot、D3cold 產生 PME。這是能力,不是保證系統目前已備妥所有喚醒資源。本例假設適當的輔助供電可用、沒有實作可選 Data Register,Aux_Current=0 採自供電情況;不把零解讀成所有情況都不需要供電。

PME
Power Management Event,電源管理事件

PME 是 Power Management Event。PME_En=1 表示允許發出通知,PME_Status=1 則記錄符合條件的事件;Status 的設定不受 Enable 值影響。因此「有事件」與「允許送通知」仍然要分開。

PMCSR 的 PowerState 只有 00b=D0、01b=D1、10b=D2、11b=D3hot,沒有「再寫一個值就進 D3cold」的編碼。寫入不支援的可選 D1/D2 時,寫入本身正常完成,但資料被丟棄,狀態不改變。

能力到控制的 Figure 路徑

Figure 7-17(p.944)→ Figure 7-18/Table 7-14(pp.945–947)→ Figure 7-19/Table 7-15(pp.947–949)。PME_Support 的 bit 31 與輔助電源條件見 p.947;Aux_Current=0 的解釋見 p.946。

3. 從 D3hot 回 D0,要不要重新初始化?

先讀 No_Soft_Reset。若為 1,透過 PowerState 寫入從 D3hot 回 D0,必須保留內部 Function 狀態,回到 D0active;若為 0,內部狀態未定義,軟體必須完整重新初始化。後者也不保證舊資料都已清除,所以 D3hot→D0 不能取代 FLR 的用途。

FLR
Function Level Reset,以功能為範圍的重設

本例 PMCSR=0x810B,想回到 D0 且暫時保留 PME_Status 供後續處理。除了清 PowerState bits 1:0,還要在寫值中將 RW1CS 的 bit 15 寫零;否則把讀到的 1 原樣寫回,就會提前清掉事件。

回到 D0,但不意外清除 PME 事件
動作16-bit 值結果或理由
起始讀值0x810BD3hot、No_Soft_Reset=1、通知已啟用、事件待處理。
寫入 D00x0108保留其他適用欄位;PowerState=0,對 PME_Status 寫 0。
等待適用恢復時間後讀取0x8108D0;PME_Status 仍是 1。
處理事件後,明確清除 PME_Status0x8108這次刻意對 bit 15 寫 1;若沒有新事件,後續讀回 0x0108。

這些值假設沒有其他軟體或新事件並行改動狀態。本例的 Immediate_Readiness_on_Return_to_D0=0,也未採其他就緒時間機制,所以 D3hot→D0 後至少等 10 ms,才再存取 Function,包括 Configuration Space。No_Soft_Reset=1 免除的是重新初始化,不是這段恢復等待。

進入 D3hot 前,驅動程式必須處理仍等待 Completion 的交易,並準備可能因主電源移除而遺失的狀態。若是經 Fundamental Reset 回 D0,或曾進入 L2/L3 Ready 而產生 DL_Down,不能沿用本例的狀態保存結論。

保存狀態與恢復時間

§5.3.1.4(pp.606–608);Figure 5-18/Table 5-14(pp.654–655);No_Soft_Reset、PME_En、PME_Status 見 Table 7-15(pp.948–949),Immediate Readiness 見 Table 7-14(p.945)。Flit-capable Function 必須設定 No_Soft_Reset,但它仍只適用指定的電源轉換。

4. ASPM 與把 Function 寫成 D3hot,有什麼不同?

ASPM 讓硬體在允許的條件下,於 D0 閒置時管理 Link。PCI-PM 軟體電源管理則先改變 Function 的 D-state,再由相關規則協調 Link。例如普通非 ARI 多 Function 裝置,不能只因其中一個 Function 離開 D0,就代表其他 Function 也都停止工作;其 Upstream Port 必須等所有 Functions 都離開 D0,才可代表 PCI-PM 發起進 L1。

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

查 ASPM 時,先讀兩端 Link Capabilities 的 ASPM Support,再查 Link Control 的 ASPM Control。前者宣告可用機制,後者表示軟體開放哪些機制;Enable 不是「這一刻已經在 L1」的狀態回報。

接著要比對恢復延遲:Link Capabilities 的 L1 Exit Latency 是 Port 恢復需要多久;Endpoint 的 Device Capabilities 則提供 Endpoint L1 Acceptable Latency,表示它可容忍多少延遲。兩者名字相近,卻不在同一個 Register。若經過多個 Switch,必須考慮整條路徑。

三段 Link 的 L1 exit latency,要直接相加嗎?

不能一概相加。Figure 5-8 的三段 Link 範例中,Switch 會及早在上游開始退出,退出過程可重疊;規格的結果為最後一段在 T+34 μs 完成,而不是把所有 Port 的數字相加。先讀 p.634 的時間敘述,再對照 p.635 的拓樸,才能理解延遲如何沿路傳播。

ASPM 能力、政策與延遲

§5.3.2(pp.609–610);§5.4.1(pp.621–640);Figure 5-8(pp.634–635)。Figure 7-27/Table 7-23(pp.967–970)、Figure 7-28/Table 7-24(pp.971–972);Endpoint 可容忍延遲見 Figure 7-24/Table 7-20(pp.956–957),不要沿用 p.640 敘述中對其 Register 的不精確交叉指稱。

5. 從省電設定接到 L1 的實際進入流程

允許 ASPM L1 之後,兩端還要完成協商,才會讓 Link 進入 L1。先讀 Figure 7-27/Table 7-23 的 ASPM Support,再查 Figure 7-28/Table 7-24 的 ASPM Control;接下來換到 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 Function 也都允許 L1。此例不啟用 L1.1/L1.2,裝置仍維持 D0,先帶讀基本 L1 的正常進入。

Endpoint 位於這條 Link 的下游端,但它的 Port 類型是 Upstream Port。圖中由 Endpoint 發起要求;Switch 以它的 Downstream Port 回應。開始協商前,Endpoint 已累積到 §5.4.1.3.1 對各 FC 類別要求的最低 credit(接收緩衝額度),足以傳送相應的最大封包。

FC
Flow Control,流量控制

螢幕較窄時,可左右滑動圖查看兩端的動作。

同一條 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(電氣閒置)。圖例中的 Active/Inactive 用來標示各層活動;Data Link 狀態機是否進入 DL_Inactive,仍須另依 Figure 3-2 的轉換條件判讀。

這裡有兩種不同的確認。等待最後一筆 TLP 的 Link 層確認,是為了讓 Retry Buffer(保存重送副本的緩衝區)清空;PM_Request_Ack 則表示對端接受 L1 進入要求。它也屬於 DLLP(Data Link Layer Packet,資料連結層封包),但不是確認某一筆 TLP 的 Ack DLLP,也不是 Memory Read 的 Completion。若先前的 Memory Read 還在等 Completion,軟體與硬體仍要繼續追蹤那筆讀取;進入 L1 不會替它完成交易。

Switch 已同意進 L1,這時卻有 Memory Write 要傳,怎麼辦?

延續圖中的接受分支:假設 Switch 已送出 PM_Request_Ack,接著才有一筆 Memory Write(記憶體寫入)排到這條下行 Link。依 §5.4.1.3.1,Switch 必須先完成 L1 轉換,再發起退出;即使當下還沒有傳送該封包所需的 Flow Control credit,也必須發起退出。回到 L0 後,封包仍須通過正常的額度與傳送條件。

接著讀 Figure 4-54 與 §4.2.7.7:L1.Entry 進到 L1.Idle,符合退出條件後轉到 Recovery,再依適用流程回 L0。這段 Recovery 是正常的退出路徑。若工具只留下「沒有 TLP」的區間,還需補上 PM 協商、Electrical Idle 與 LTSSM(連線訓練狀態機)紀錄,才能核對它標示的 L1。

LTSSM
Link Training and Status State Machine,鏈結訓練與狀態機

等候交易結果時,Completion Timeout 在 L1 期間仍繼續計時;Flow Control Update timers 則在 L1 期間凍結。省電轉換沒有讓所有計時器一起停止。若對端無法接受進入要求,則改讀 Figure 5-6 的拒絕分支:PM_Active_State_Nak 是 Message TLP,和 Link 層要求重送的 Nak DLLP 不同。Figure 5-6 畫的是 L0s 已啟用的範例,後續行為仍須依實際設定判斷。

從能力欄位、協商時序到 LTSSM

PCI Express Base Specification Revision 6.0:Figure 7-27/Table 7-23 Link Capabilities Register(PDF/印刷 pp.967–968)、Figure 7-28/Table 7-24 Link Control Register(PDF/印刷 p.971);§5.4.1.3 ASPM L1 State、§5.4.1.3.1 ASPM Entry into the L1 State(PDF/印刷 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(PDF/印刷 p.519)、Figure 4-54 L1 Substate Machine(p.520)接到實體層退出路徑。圖例的活動標示與資料連結層狀態機分開判讀,後者見 §3.2.1(pp.265–268);Table 4-48(p.453)將 L1 的 LinkUp 列為 1。本節的拓撲與待送 Memory Write 是作者推演;重複間距、計時與中斷例外以完整文字規則為準。

6. 已支援 L1,是否就能直接開 L1.2?

還不行。L1 PM Substates 是另一個 Extended Capability,ID=0x001E。L1.0 對應原本的 L1;L1.1 保持 Link common-mode 電壓,L1.2 不要求保持;兩者以 CLKREQ# 協調進出。ASPM L1.2 還需要 Latency Tolerance Reporting(LTR)支援,讓裝置回報可容忍的服務延遲。

以下換成一條獨立的作者假設 Link:兩端都支援 L1 Substates 與所需 LTR,平台已確認 CLKREQ#、時脈及時序設計可用。走訪各自的 Extended Capability 清單後,剛好都在 0x200 找到這個結構;不能把 0x200 當成固定標準位址。

L1.2 案例的兩端讀值
位置與寬度Downstream PortUpstream Port
Header,0x200,32 bits0x0001001E0x0001001E
Capabilities,0x204,32 bits0x00280A1F0x0051141F
已完成設定的 Control 1,0x208,32 bits0x408014040x40800004
已完成設定的 Control 2,0x20C,32 bits0x000000510x00000051

依 Figure 7-147/Table 7-129,Header 的 ID=0x001E、Version=1、Next=0;這一版沒有 +0x10 的 L1 PM Substates Status Register。Version=2 才表示實作該 Status Register,不能因為正在讀 Base 6.0,就假定每個 Capability 都是最高版本。

依 Figure 7-148/Table 7-130,兩端 Capabilities 的低五位都是 0x1F,表示總支援位元與四種 PCI-PM/ASPM 子狀態能力均存在。Downstream Port 的 Port T_POWER_ON Value=5、Scale=0,為 10 μs;Upstream Port 的 Value=10、Scale=1,為 100 μs。Port Common_Mode_Restore_Time 分別是 10、20 μs。

Control 2 的編碼位置不同:(0x51 >> 3) & 0x1F = 10、0x51 & 3 = 1,所以設定的 T_POWER_ON 是 10 × 10 μs=100 μs。不要拿 Capabilities 的 bits 23:19 去解 Control 2。

Control 1 的 bit 2=1,只開 ASPM L1.2;其餘三個子狀態 Enable=0。Downstream Port 的 Common_Mode_Restore_Time=20 μs;這個欄位在 Upstream Port 是 RsvdP,因此兩端完整值不同。本例假設平台已確認上述設定適合元件與連接設計;單憑兩端宣告值取最大值,不足以保證每個平台的時序都合適。

Extended Capability 的閱讀路徑

§7.8.3、Figure 7-146(pp.1103–1104)→ Figure 7-147/Table 7-129(p.1104)→ Figure 7-148/Table 7-130(pp.1105–1106)→ Figure 7-149/Table 7-131(pp.1106–1108)→ Figure 7-150/Table 7-132(p.1108)。多 Function Upstream Port 只在 Function 0 實作此 Capability,控制整個 Port。

7. 這組 Enable 值應該如何建立?

上表是設定後快照,不是四個 DWORD 可以任意順序寫入。§5.5.4 要求先確認兩端對應的 Supported bit 都為 1;否則啟用的行為未定義。實際安排還要符合下列順序。

  1. 設定 ASPM L1 Substates 前,兩端先停用 ASPM L1;若要設定 PCI-PM Substates,則須在 D0 進行。
  2. 啟用 L1.2 前,先設定適用的 T_POWER_ON、Common_Mode_Restore_Time,以及 ASPM L1.2 的 LTR threshold。修改時間欄位時,相應的 L1.2 Enable 必須保持清除。
  3. 兩端 LTR threshold 必須相同。先在 Downstream Port 設定所需的 Substate Enable,才可在 Upstream Port 設定對應 bit。
  4. 完成設定後,依 ASPM 與延遲政策恢復所需的 ASPM L1。將來停用 Substate 時順序相反:先清 Upstream Port,再清 Downstream Port。

「位於拓樸上游的元件」與「Upstream Port」不是同一句話:在 Endpoint 與 Switch 之間,Endpoint 的 Upstream Port 位於 Link 的下游端。設定順序要認 Port 類型,不能只憑中文的上下游方向猜。

設定順序與時序條件

§5.5.4(p.650)與 Table 5-11(p.651);欄位可修改條件見 Tables 7-131/7-132(pp.1107–1108)。T_POWER_ON 與 common-mode 設定還取決於元件、AC 耦合電容及連接設計,規格沒有指定單一通用算式。

8. Enable 已經是 1,為什麼還不能進 L1.2?

先看 Control 1 的 threshold:Value 在 bits 25:16,Scale 在 bits 31:29。因此 (0x40801404 >> 16) & 0x3FF = 128,Scale=2;依 Figure 6-15,scale 2 的單位是 1024 ns,得到 131072 ns,也就是 131.072 μs。Upstream Port 的 threshold 相同。

假設已在 ASPM L1.0、CLKREQ# 已 deassert,其他進入條件都成立。兩種服務需求仍須分別檢查;不能只看 snoop 那一欄。本例的 LTR 數字是已解碼的最近有效回報,不是 Max Latency Register 的上限。

同一個 threshold 下的兩次判斷
情境Snoop 需求No-snoop 需求ASPM L1.2 條件
A204800 ns102400 nsNo-snoop 小於 131072 ns,不滿足進入條件。
B204800 ns153600 ns兩者皆大於或等於 threshold;在上述前提下應進入 L1.2。

若某一類沒有服務延遲需求,該類可用「無需求」的分支判斷;這不等於 Requirement=1、Value=0。後者代表任何延遲都會影響裝置,要求盡可能快的服務。LTR 是裝置回報的容忍度,也不是 Root Complex 保證一定做到的硬性延遲承諾。

在情境 A,若另外開了 ASPM L1.1,還可以依規則進 L1.1;本例的 bit 3=0,因此不能假設有這個退路。只看到 L1.2 Enable=1,既不能證明正在 L1.2,也不能證明設定失敗。

進入條件與 LTR 單位

§5.5.1(p.644)要求兩類 LTR 分別滿足;Figure 6-15、§6.18(pp.781–782)定義 Requirement 與 Scale。啟用 Endpoint LTR 前,Root Complex 與所有中間 Switch 必須支援,且由靠近 Root Port 者先啟用(p.781)。Control 1 threshold 的兩端一致性見 p.650。

9. 主電源已移除,裝置如何通知系統醒來?

先分兩步:恢復能傳輸的環境,再送出辨識事件來源的 PM_PME Message。L2 中不能直接傳一般 TLP;支援喚醒的裝置必須利用適用的 WAKE# 或 Beacon 機制,讓平台恢復電源、時脈與 Link。具體使用哪一種,取決於 form factor。Link 重新可用後,PM_PME 帶著 Requester ID 向 Root Complex 傳遞來源。

因此,PME_Support=1 只是其中一項證據。還要有 PME_En、必要的輔助供電、平台喚醒路徑,以及沿途元件的配合。這也說明為什麼 PMCSR 的 D3hot 設定不能單獨代表整個平台已完成 D3cold 電源切換。

喚醒的兩個階段

Base 6.0 §5.3.3.1–§5.3.3.2(pp.615–616);D3cold 的供電與保存狀態見 §5.3.1.4.2(pp.608–609)。WAKE# 不是可不分插槽形式任意套用的通用接線指令。

10. 沿條件判讀省電行為

No_Soft_Reset=1,但裝置經歷 D3cold 再上電,還能直接沿用原先狀態嗎?

不能。No_Soft_Reset 保證的是指定的 D3hot→D0 軟體轉換;從 D3cold 恢復需要電源與 Fundamental Reset,回到 D0uninitialized,再建立工作狀態。(§5.3.1.4,pp.606–608。)

只有 Endpoint 支援 ASPM L1.2,上游 Port 不支援,可以只開 Endpoint 嗎?

不可以。對應能力必須兩端都支援才可啟用,否則行為未定義;還要遵守雙端設定順序與 LTR/時序前提。(§5.5.4,p.650。)

到這裡,課程已串起裝置發現、傳輸、可靠性、Reset 與省電。接著讀 Chapter 11 的 Hot-Plug,再串起錯誤回報與系統控制權,處理裝置在運作中改變狀態時,平台如何協調。