1. 链路训练的阶段
CXL 链路训练过程发生在 PCIe LTSSM(Link Training and Status State Machine)状态机的不同阶段,主要包括以下步骤:
1.1 LTSSM Detect
● 链路训练从 LTSSM 的 Detect 状态开始。
● 在 Detect 状态,设备检测物理链路的存在,并准备进入链路训练阶段。
1.2 LTSSM Configuration
● 在 Configuration 状态,链路宽度和速度的协商开始。
● Flex Bus 模式协商:
○ 使用 PCIe 的替代协议协商机制(Alternate Protocol Negotiation)。
○ 下游端口(Downstream Port)通过发送修改后的 TS1 Ordered Sets 广告其 Flex Bus 能力。
○ 上游端口(Upstream Port)根据自身能力和主机广告的能力进行响应,并发送提议。
○ 主机通过发送修改后的 TS2 Ordered Sets 确定最终的协商结果。
1.3 LTSSM L0
● 在链路进入 L0 状态之前,链路训练完成。
● 如果协商了 CXL 模式,链路速度必须达到至少 8 GT/s。
● 如果链路无法达到 8 GT/s,则链路可能无法进入 CXL 模式,即使设备支持 PCIe。
2. Flex Bus 模式协商
Flex Bus 是 CXL 的链路模式,支持动态硬件协商。以下是 Flex Bus 模式协商的关键点:
2.1 TS1 和 TS2 Ordered Sets
● TS1 和 TS2 是 PCIe Base Specification 定义的 Ordered Sets,用于链路训练和配置。
● 在 CXL 模式下,TS1 和 TS2 被修改以支持 Flex Bus 模式协商。
● TS1 Ordered Sets:
○ 下游端口发送 TS1 Ordered Sets 告知其 Flex Bus 能力。
● TS2 Ordered Sets:
○ 上游端口响应并发送 TS2 Ordered Sets,确认最终的协商结果。
2.2 Retimer 配置
● 如果链路中存在 Retimer(信号中继器),必须在 Flex Bus Port DVSEC(Device-Specific Extended Capability)中由软件进行编程。
● Retimer 的相关位会在 TS1 和 TS2 Ordered Sets 中使用。
3. CXL 模式的链路速度要求
● CXL 模式要求链路速度至少达到 8 GT/s。
● 如果链路在 2.5 GT/s 的训练过程中协商了 CXL 模式,但无法达到 8 GT/s,则链路可能会失败。
4. Sync Header Bypass
● 在链路速度达到 8 GT/s、16 GT/s 或 32 GT/s 时,可以协商 Sync Header Bypass。
● 如果协商了 Sync Header Bypass:
○ 在链路速度达到 8 GT/s 或更高时,Sync Headers 会被跳过。
○ 设备会发送 NULL Flits 替代 PCIe Idle Symbols,以支持 LTSSM 的某些状态转换。
5. Flit 模式
CXL 使用 Flit(固定大小的数据包)进行数据传输,支持两种 Flit 模式:
● 68B Flit 模式:
○ 在链路速度达到 8 GT/s 或更高时,设备发送 NULL Flits 替代 PCIe Idle Symbols。
○ NULL Flits 用于支持 LTSSM 的状态转换。
● 256B Flit 模式:
○ 在链路速度达到 8 GT/s 或更高时,设备可以发送 256B Flits。
6. 上游端口的行为
● 上游端口在接收到非下游端口生成的 Flit 后,通知上层链路已准备好进行数据传输。
● 如果链路协商了 CXL 模式,上游端口会等待有效的 Flit 才能进入数据传输状态。
7. 链路训练失败的可能原因
● 链路无法达到 8 GT/s 或更高速度。
● Retimer 配置错误或未正确编程。
● TS1 和 TS2 Ordered Sets 的协商失败
总结
CXL LTSSM 是一个动态链路训练和模式协商的过程,确保链路能够正确进入 PCIe 或 CXL 模式。关键步骤包括 TS1/TS2 Ordered Sets 的交换、Flex Bus 能力的协商以及链路速度的验证。链路训练失败时,状态机会回退到 Detect 状态以重新开始训练。