第五章 CXL ARB/MUX
ARB/MUX提供CXL.io和CXL.cache/CXL.mem链路层控制和数据信号的动态多路复用,以及与Flex Bus物理层接口,如下图中的黄色部分。
在发送方向上,ARB/MUX仲裁来自CXL链路层的请求,合并复用数据。ARB/MUX还处理来自链路层的电源状态转换请求:将其解析为单个请求,并转发到物理层,为每个链路层接口维护虚拟链路状态机(Virtual Link State Machine,VLSM),并生成ARB/MUX链路管理包(ARB/MUX Link Management Packet,ALMP),以代表每个链路层在链路上传递电源状态转换请求。
在接收方向上,ARB/MUX确定与flit关联的协议,并将flit转发到适当的链路层。它还处理ALMP数据包,参与任何所需的握手,并更新其VLSM。
5.1 VLSM状态
ARB/MUX为其接口的每个CXL链路层维护vLSM,并根据其从本地链路层,或从远程对端的ARB/MUX接收到的电源状态转换请求完成转换状态。这句话中翻中的意思就是,电源转换请求可能是本地上层链路层发来的(发送方向),也可能是CXL链接的另一端链路层发过来的(接收方向)。下表列出了vLSM的不同可能状态。去除L1.1,L1.2和L1.3,总共有9种状态。
ARB/MUX查看每个vLSM的状态,以解析为转发到物理层的单个状态请求。如下图,表中的行表示vLSM[0]状态,表中的列表示vLSM[1]状态。例如,当前vLSM[0]状态是L1.0,当前vLSM[1]状态是Active,则从ARB/MUX到物理层的已解析请求将是Active(图中红圈)。
下表描述了vLSM从一种状态转换到下一种状态的条件。
5.1.1 本地vLSM转换的其它规则
如果任何链路层请求进入到Retrain,ARB/MUX必须将请求转发到物理层,以启动LTSSM(Link Training and Status State Machine)转换到Recovery。 一旦vLSM处于Retrain状态,预计相应的链路层最终将请求ARB/MUX转换为Active。 如果LTSSM移动到Detect,每个vLSM必须最终转换到Reset。
插播一句,什么是LTSSM?在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用到LTSSM状态机。LTSSM状态机涵盖了11个状态,包括Detect,Polling,Configuration,Recovery,L0,L0s,L1,L2,Hot Reset,Loopback,Disable。再多的我就不懂了,以后有时间看看PCIe,补上这块。
5.1.2 跨链路的虚拟LSM状态转换规则
5.1.2.1 通用规则
如果CXL.io协议关闭,则链路无法针对任何其他协议运行(CXL.io操作是最低要求)。这个好理解,因为CXL.io基本等同PCIe了。
5.1.2.2 进入Active的交换协议
进入Active所需的ALMP协议包括本地和远程VLSM之间的4个ALMP交换,如下图所示。
5.1.2.3 状态同步协议
在初始链路训练期间达到最高协商操作速度后,必须向ARB/MUX发送所有后续LTSSM Recovery转换。Recovery退出后,必须执行vLSM状态同步协议。
5.1.2.4 状态请求ALMP
发送状态请求ALMP以请求将状态更改为Active或PM。对于PM,请求只能由上游端口上的ARB/MUX发起。
此处的PM,应该指的是L1。
5.1.2.5 状态ALMP
5.1.2.6 意外ALMP
以下描述了意外ALMP将触发链路recovery的情况:
退出recovery后执行状态同步协议时,状态ALMP以外的任何ALMP都被视为意外的ALMP,并将触发recovery。 当已发送active请求ALMP时,收到除active状态ALMP或active请求ALMP之外的任何ALMP都被视为意外ALMP,并将触发recovery。 没收到状态请求ALMP,就收到了状态ALMP。
5.1.3 vLSM状态转移规则的应用
5.1.3.1 初始链路训练
5.1.3.2 状态交换快照示例
5.1.3.3 L1中止示例
5.2 ARB/MUX链路管理包
5.2.1 ARB/MUX旁路功能
当FlexBus链路在PCIe模式下运行时,ARB/MUX必须禁用ALMP的生成。
5.3 仲裁和数据复用/解复用
ARB/MUX负责在来自CXL链路层的请求之间进行仲裁,并根据仲裁结果复用数据。仲裁策略是取决于具体实现。此外,需要有一种方法来控制CXL.io链路层和CXL.cache/CXL.mem链路层的相对仲裁权重。