PCIe Chapter 19:LTSSM、Equalization 與 Retimer

LTSSM(Link Training and Status State Machine,鏈結訓練與狀態機)描述 Link 的偵測、訓練與運作。本章先讀正常路徑,再用 Polling 案例把狀態箭頭接上收發紀錄、計數及 Timeout;Retimer 與升速則按各自的適用條件接著看。

LTSSM 初次訓練與返回 L0初次訓練的部分路徑,以及L0經Recovery返回L0的分支;省略其他分支。Detect偵測遠端終端Polling交換訓練序列Configuration協商 Lane 與寬度Recovery重建鎖定、對齊或變速L0:正常操作完成訓練觸發恢復

主狀態用來定位進度,箭頭沒有代替子狀態的接收、計數與 Timeout 規則。L0 之後仍要分開確認 Data Link 與 Transaction 結果。

先找到狀態,再找轉換條件

讀 LTSSM(Link Training and Status State Machine,鏈結訓練與狀態機)紀錄時,先確認是哪一端的 Port、哪條 Link,以及資料記錄的方向與時間。Figure 4-48 用來定位主狀態;§4.2.6 解釋各狀態要完成的工作;§4.2.7 才定義子狀態的動作、接收條件與 Timeout。三者要接著讀。

本章選初次建立 Link 的 Polling 作完整示範。先查 Figure 4-49,確認 Receiver Detection(接收端終端偵測)之後如何進入 Polling;再放大 Figure 4-50,沿正常路徑讀 Polling.Active 與 Polling.Configuration。後節再接到速度提升、Equalization 與 Retimer,說明分析範圍如何隨情境改變。

Base 6.0 §4.2.6 Link Training and Status State Machine (LTSSM) Descriptions(pp.444–452);§4.2.7 Link Training and Status State Rules、Figure 4-48 Main State Diagram for Link Training and Status State Machine(pp.452–454);Figure 4-49 Detect Substate Machine(p.456)、Figure 4-50 Polling Substate Machine(p.464)。

看到 TS1 或 TS2,還差哪些條件才能前進?

一次收到正確序列,只代表那次接收有效;轉換條件還包含連續接收、傳送數量與 Lane 範圍。TS1、TS2 是 Training Sequence Ordered Sets(訓練用的有序符號組),兩端各自送出,也各自檢查收到的內容。

【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。Root Port 00:01.0 與 Endpoint 01:00.0 直接相連,沒有 Retimer。本次觀察 Root Port 的 LTSSM 與收發紀錄,初次訓練使用 2.5 GT/s、8b/10b;Detect 已在兩條候選 Lane 上偵測到 Receiver。以下暫稱 Lane A、Lane B,它們是工具已配對的接線通道,尚不是 Configuration 分配完成的 Logical Lane Number。

假設 Enter Compliance=0,沒有 Loopback 或 Compliance 測試要求。接收的 TS1 均以 PAD 填入 Link Number 與 Lane Number,Compliance Receive=0;本例也不涉及極性反轉。PAD 是尚未指派編號時使用的填充值,不是 Lane 0。所有下列觀察都在所屬子狀態的 Timeout 到期之前。

第一步:Polling.Active 同時看本端傳送量與每條 Lane 的接收

Root Port 在 Polling.Active 持續送出 TS1。依 p.457 的正常轉換路徑,至少要送出 1024 組 TS1,而且 Detect 曾偵測到 Receiver 的所有 Lane,都須連續收到八組符合條件的訓練序列。這裡的 1024 是本端傳送量,八組則是各 Lane 的接收條件,不能把兩個方向的數量相加。

同一次 Polling.Active 的時點本端已送 TS1Lane A 連續合格接收Lane B 連續合格接收依本例正常路徑的依本例條件的下一狀態
A0100087Polling.Active
A110233130Polling.Active
A210243231Polling.Configuration

A0 的兩項條件都還不完整。到了 A1,兩條 Lane 的連續接收都已足夠,但本端仍少送一組 TS1;A2 才同時滿足。數字是工具依完整紀錄整理出的接收次數,不是規格要求公開的 Configuration Register。

第二步:Polling.Configuration 的傳送計數有新的起點

Root Port 進入 Polling.Configuration 後改送 TS2,Link Number 與 Lane Number 仍為 PAD。接著查 §4.2.7.2.3:在 Detect 曾偵測到 Receiver 的 Lane 上,收到八組連續 TS2,並且從收到第一組 TS2 之後,再送出 16 組 TS2,才能前進到 Configuration。本例 Lane A、Lane B 都已連續收到八組,接收條件成立;接著核對首次接收後的傳送數量。

同一次 Polling.Configuration 的時點首次收到 TS2 前已送首次收到 TS2 後已送本端 TS2 合計Lane A/B 連續收到 TS2依本例條件的下一狀態
B0615218 / 8Polling.Configuration
B1616229 / 9Configuration

B0 雖然總共送過 21 組 TS2,但符合本次起算條件的只有 15 組;要等到 B1 才足夠。分析工具若只顯示「TS2 共 21 組」,還得找出首次收到 TS2 的位置,才能判斷這一條規則。

Polling 正常路徑的轉換條件等待迴圈僅適用尚未Timeout時;Timeout分支見後方表格。Polling.ActivePolling.ConfigurationConfiguration已送滿 1024 TS1,且各 Lane連續接收條件都成立?否:持續送 TS1連續收到 8 TS2,且自首次收到 TS2 後已送滿 16 TS2?否:持續送 TS2是是
作者依正常路徑繪製的條件圖;等待迴圈僅適用尚未 Timeout 的情況。Active 的接收條件依前文案例選用,完整可接受序列及 Timeout 分支仍須查 §4.2.7.2.1;此圖不是完整 LTSSM。

到了 Configuration,哪些工作仍未完成?

B1 只把本端推進 Configuration。後續還要依 Figure 4-51(p.482)的 Linkwidth 與 Lanenum 子狀態建立 Link Number、Logical Lane Number 與寬度,並完成後續訓練,才會到 L0。兩條候選 Lane 都通過 Polling,也還沒有直接決定最後必為 x2。先前的 Chapter 8 說明了 Link 能力與目前結果如何分開;L0 之後的 Data Link 與 Flow Control 初始化則接到 Chapter 17。

Base 6.0 §4.2.7.1.2 Detect.Active(p.456);§4.2.7.2.1 Polling.Active(pp.457–458);§4.2.7.2.3 Polling.Configuration、§4.2.7.2.4 Polling.Speed(p.463);Figure 4-50(p.464);§4.2.7.3 Configuration(p.464 起)。

等待超時後,並非一律返回 Detect

先前的案例只走正常轉換。若遲遲無法前進,就要分開查每個子狀態的 Timeout 規則,不能沿用一個共同的「失敗」箭頭。

目前位置規格的 Timeout 或條件接著查什麼
Detect.Active,只有部分 Lane 偵測到 Receiver等待 12 ms,再次執行 Receiver Detection兩次是否恰好相同 Lane 成功;相同才可走向 Polling,不同則回 Detect.Quiet
Polling.Active24 ms Timeout,另有部分 Lane 可前進的條件至少一條 Lane 連續收到八組合格序列、首次收到 TS1/TS2 後已再送出至少 1024 組 TS1,以及預先指定 Lane 集合是否曾退出 Electrical Idle;符合規則可到 Polling.Configuration,其他條件可能到 Polling.Compliance 或 Detect
Polling.Configuration48 ms Timeout 前仍未滿足轉換條件到期後回 Detect;原本缺的是連續接收,還是首次接收後的傳送量,須由紀錄分開確認

§4.2.6 的通則給 LTSSM Timeout「不得提早、最多延後 50%」的容許範圍,除非該處另有明文。因此,24 ms 與 48 ms 是規格標稱值,對應上限分別為 36 ms 與 72 ms;不能要求所有實作都恰好在第 24.000 ms 或 48.000 ms 轉移。分析前仍要確認 Timer 的起點、觀察時間及資料是否連續。

Polling.Active 的 Timeout 分支使用「至少一條」及 implementation-specific 的預定 Lane 集合,和正常路徑的「所有偵測成功 Lane」不同。這是規格容許進一步訓練的分支,不足以指出哪條 Lane 已損壞。Polling.Compliance 則還可能由 Enter Compliance 或指定的訓練控制條件觸發;實際進入原因要回查控制與序列內容。

Base 6.0 §4.2.6(p.444,Timeout 容許範圍);§4.2.7.1.2(p.456);§4.2.7.2.1(pp.457–458);§4.2.7.2.3(p.463)。

為什麼正在 Polling,Link Training 卻是零?

Link Status Register 的 Link Training bit 只描述特定狀態,並不是完整 LTSSM 的縮寫。本例讀 Root Port 的這個 bit;Endpoint、Switch Upstream Port 與 PCI Express to PCI/PCI-X Bridge 的此欄位不適用,必須固定為零。

本例 Root Port 的進度Link Training解讀方式
Polling0仍在交換訓練序列;零值不表示已進入 L0
初次 Configuration1已離開 Polling,正在處理寬度、Lane 與後續訓練
L00須結合其他狀態與歷史,才知道這次零值是在訓練前還是訓練後

先用 Table 4-48 把狀態對應到 bit,再回 Table 7-26 看欄位適用性。Table 4-48 的 LinkUp 是 Physical Layer 給 Data Link Layer 的狀態,和 Link Status 的 Data Link Layer Link Active 不同;後者還須確認回報能力與 DL_Active。相關跨層狀態在 Chapter 8 與 Chapter 17 已完整說明。

Base 6.0 Table 4-48 Link Status Mapped to the LTSSM(p.453);§7.5.3.8、Figure 7-29、Table 7-26 Link Status Register(pp.978–979)。

升速時,再沿 Recovery 追到 Equalization

初次 Link 先以 2.5 GT/s 到 L0,即使兩端都支援更高速率也是如此;之後可從 L0 進 Recovery 改變速度。Polling 中宣告的高速度能力,不代表當時已用該速度傳輸。§4.2.7.2.4 也明確指出 Polling.Speed 不可達,不要把它補進初次升速路徑。

Equalization(等化,調整每條 Lane 的發送與接收設定以補償通道影響)有速率相關的流程。§4.2.4 要求第一次切換到各個 8.0 GT/s 以上速率時執行適用程序,但另定義了所有元件共同支援與宣告後可採用的略過機制。這裡先分清一般程序、略過到最高 NRZ 速率,以及 No Equalization Needed;不可因某端宣告一個 bit,就替整條路徑省略訓練。

NRZ
Non-Return-to-Zero,不歸零編碼

升速紀錄需要接起「哪一端提出變更、進了哪些 Recovery 子狀態、適用的等化流程、最後速度與寬度」。Chapter 8 的雙端 Register 與狀態帶讀可作查詢入口。經過 Recovery 也不等於重新列舉或清掉所有 Data Link 狀態,須按實際的 LinkUp 與 Reset 歷史判斷。

Base 6.0 §4.2.6.4(p.445);§4.2.7.2.4 與 p.464 的 Support for Higher Data Rates Than 2.5 GT/s 說明;§4.2.4 Link Equalization Procedure for 8.0 GT/s and Higher Data Rates(pp.392–393)。

有 Retimer 時,一條 Link 與電氣區段怎麼分?

Retimer(重定時器)理解 Physical Layer 協定,並重新建立訊號時序。Figure 4-61 先畫出整條 Link,再把 Retimer 兩側標為 Link Segments。每個 Retimer 有兩個 Pseudo Ports(偽連接埠),朝向會在 Configuration 期間動態確定。

示意路徑:Root Port → 一個 Retimer → Endpoint角色分析位置
Root Port 到 RetimerRoot Port 的 Downstream Port 對向 Retimer 的 Upstream Pseudo Port第一段電氣通道
Retimer 到 EndpointRetimer 的 Downstream Pseudo Port 對向 Endpoint 的 Upstream Port第二段電氣通道
Root Port 到 Endpoint 整體仍是一條 PCIe LinkData Link 與 Transaction 不因 Retimer 多出一層 Switch

接著查 §4.3.2 的模式:Forwarding mode 轉送適用的符號及 Electrical Idle;Execution mode 則在 Polling.Compliance、等化 Phase 2/3 等指定情境參與協定。追查某一段的等化結果時,要標明 Pseudo Port 與方向,不能用 Root Port 的整體狀態替每一段補出相同結果。

Base 6.0 允許同一條 Link 最多兩個 Retimers,外形規格仍可能加上限制。這些元件對 Data Link 與 Transaction Layer 透明;不能替它們各配置一組 Bridge Bus Number,也不能把分段等化當成多組獨立的 TLP Ack/Replay。電氣品質是否合格,還需要 Chapter 8 的適用要求與實際量測。

TLP
Transaction Layer Packet,交易層封包

Base 6.0 §4.3 Retimers(pp.564–565);§4.3.2 Supported Retimer Topologies、Figure 4-61 同名圖(pp.566–567)。本節表格是作者整理的拓撲示意。

低功耗與測試分支,另外確認目的與條件

L0p(L0 內部分 Lane 省電的機制)只用於 Flit Mode,保持對稱的目標寬度,且每方向至少有一條活動 Lane。它不是讓整條 Link 先離開 L0 再重建;轉換期間兩側也可能短暫處於不同寬度。相對地,L0s 是另一種快速省電狀態,在 Flit Mode、有 Retimer,或使用獨立 SSC(Spread Spectrum Clocking,展頻時鐘)的分離參考時鐘時,不得支援與宣告。

Polling.Compliance 用於測試;Loopback 的 Lead 發起測試,Follower 負責回送資料;Hot Reset 用 in-band 訊號重設配置好的 Link 與相關下游裝置。它們在 Figure 4-48 都有各自的分支。分析工具若只留下「沒有 TLP」,仍要補上具體狀態與進入條件,才能分清訓練、低功耗或測試。L1、Function 電源狀態與平台政策則接到 Chapter 9。

TLP
Transaction Layer Packet,交易層封包

Base 6.0 §4.2.6.2(p.444)、§4.2.6.6–4.2.6.7(pp.445–447)、Figure 4-47 的轉換說明(p.450)、§4.2.6.8–4.2.6.12(pp.451–452)。

Link 從 x8 變成 x4,是降寬故障嗎?

教學假設:同一條 Link 連接 Switch Downstream Port A 與 Endpoint Upstream Port B;它已配置為 x8,正在 Flit Mode 運作。兩端的 Receiver L0p Supported 和 Remote L0p Supported 均有效,L0p Enable 為 1,Port A 的 Hardware Autonomous Width Disable 為 0。這些是作者設定的條件,不是實機量測。

先看 Device 3 Extended Capability 的 Figure 7-120:Capabilities 3 的 Receiver L0p Supported(接收端支援 L0p)描述本端能力;Status 3 的 Remote L0p Supported 描述對端支援資訊;Control 3 的 L0p Enable 則控制本 Port 能否發出要求及回覆 Ack。兩端支援且允許使用,是本案例開始前的條件,並不表示 Link 此刻已縮至 x4。

接著查 Table 7-109:在 L0p Enable=1 的條件下,向 Port A 的 Target Link Width 寫入 010b,會發起目標 x4 的 directed L0p 寬度變更。這個欄位只描述要求;實際是否完成,要看後續交換及 Lane 狀態。

L0p 降寬的示範時序Port A 請求 x4,Port B 回覆 Ack,兩端在後續 SKP 時機將指定 Lane 轉入 Electrical Idle。Port A:提出要求Port B:Link PartnerL0p Request:目標 x4L0p Request Ack:回覆 x4依後續 SKP 時機送 EIOSQ停用的 Lane 進入 Electrical Idle
作者依 Base 6.0 §4.2.6.7 繪製的正常降寬情境;省略無關交換。

Port B 回覆 Ack 後,兩端各自依下一個排定的 SKP 時機,讓要關閉的 Lane 送出 EIOSQ(進入電氣閒置的 Ordered Set),再進入 Electrical Idle;保留的 Lane 繼續傳送 Flit。這個示範是正常降寬流程;若看到 Nak、逾時、不同步或 Recovery,則需回到 §4.2.6.7 的對應分支。

配置時停用的 Lane 不能靠 L0p 開回來;進入 Recovery 時,Link 會回到最近進入 L0 時配置的寬度。因此,觀察到 x4 應先確認是 L0p 暫時縮減,還是配置或訓練得到的結果。Base 6.0 §4.2.6.7、§5.4.1.2、§7.7.9.2–§7.7.9.4,pp.445–447、626、1073–1077。

同樣表示 x4,為什麼封包和暫存器的編碼不同?

先用 Figure 3-15 辨識 Link Management DLLP(資料鏈結層的連線管理封包),再查 Table 4-44。以下四個 byte 是作者依規格建立的DLLP Payload;它們放在 Flit 的 DLP 2–5,不是完整 Flit,也不包含 DLP 0–1 或 Flit CRC。

DLLP
Data Link Layer Packet,資料鏈結層封包

手機閱讀時,可左右滑動表格查看完整內容。

方向與用途DLLP Payload bytes 0–3對照 Table 4-44
A → B:要求 x428 00 04 04Type=28h、Link Mgmt Type=00h;Cmd=0100b 是 Request、Priority=0,Byte 3 低四位 0100b 是 x4。
B → A:回覆 Ack28 00 06 40Cmd=0110b 是 Request Ack;Byte 3 高四位 0100b 回映要求的 x4。

對照前一節:Device Control 3 的 Target Link Width 用 010b 表示 x4;DLLP 的寬度欄位用 0100b。它們是不同欄位,不能直接搬用同一個位元編碼。接收端遇到 Table 4-44 列出的保留 Type、Cmd 或適用欄位編碼時,依規格無聲忽略,不能自行判成 Ack。

本例假設 Flit 有效,且 DLP 0 的 Type of DLLP Payload=0,表示 DLP 2–5 是 DLLP Payload;CRC、FEC 與 Flit 其他部分沒有在這四個 byte 中表示。Base 6.0 Figure 3-15、Table 4-44、Figure 4-30/Table 4-16,pp.285、359–360、448–449。

FEC
Forward Error Correction,前向錯誤更正

兩端回報的退出延遲,如何合併?

教學假設:Port A 的 Port L0p Exit Latency=010b(2 至小於 4 µs),關聯 Retimer L0p Exit Latency=001b(1 至小於 2 µs);Data Link Feature Status 的 Remote Data Link Feature Supported Valid=1,Remote L0p Exit Latency=011b(4 至小於 8 µs)。

先看 Table 7-108:Port A 的 Local L0p Exit Latency 取 Port 與關聯 Retimer 較大者,因此是 010b。再查 Tables 7-64/7-65:本端與對端值經 Data Link Feature 交換;確認 Remote 資訊有效後,Link 的有效退出延遲取 Local 與 Remote 較大者,這裡落在 011b 的區間。

這些編碼是規格定義的延遲區間,不是本次實測值。若 Remote Valid=0,先取得有效交換結果;不能把預設零值當成對端已確認小於 1 µs。Base 6.0 Tables 7-64、7-65、7-108,pp.1035–1037、1074。

版本與來源

本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準;上述文件印刷頁碼與 PDF 檢視器頁碼相同。案例的拓撲與計數均由作者建立;工具通道名稱不等同於規格分配的 Lane Number。

本章閱讀位置與用途
  • §4.2.6(pp.444–452):各主狀態目的與 Timeout 通則;Table 4-48(p.453)、Figure 4-48(p.454):狀態與狀態欄位的對照。
  • §4.2.7.1.1 Detect.Quiet(p.455)、§4.2.7.1.2 Detect.Active、Figure 4-49(p.456):偵測與重試分支。
  • §4.2.7.2.1 Polling.Active(pp.457–458)、§4.2.7.2.3 Polling.Configuration 與 §4.2.7.2.4 Polling.Speed(p.463)、Figure 4-50(p.464):本章傳送與連續接收算例。
  • §4.2.7.3 Configuration(p.464 起)、Figure 4-51 Configuration Substate Machine(p.482)、§4.2.7.3.1.1 Downstream Lanes(pp.464–465):Polling 後還須完成寬度與 Lane 配置。
  • §7.5.3.8 Link Status Register、Figure 7-29、Table 7-26(pp.978–979):Link Training 的作用與適用範圍。
  • §4.2.4(pp.392–393):首次等化及略過機制;§4.3、§4.3.2、Figure 4-61(pp.564–567):Retimer 角色、模式與電氣區段。
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...