• 正文
  • 相关推荐
申请入驻 产业图谱

CXL复位、初始化和配置介绍

10/21 15:46
541
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. CXL的启动和复位介绍

CXL设备支持以下5种复位:

Hot reset:通过链路触发(通过LTSSM或link down)。

Warm reset:通过外部信号PERST# 触发。

Cold reset:通过主电源打开/重启和PERST# 触发。Function Level Reset:复位CXL function。

    CXL Reset:主要用于复位CXL.cache和CXL.mem状态。

其中,前三种复位统称为传统(Conventional)复位。Function level复位和CXL复位不属于传统复位。PCIe设备通常无法确定哪个系统级flow触发了Conventional复位。系统级复位和Sx-entry流程需要关闭coherency domain。因此,CXL flow将遵循以下规则:

在系统启动系统级复位和Sx-entry流程之前,应向所有CXL设备发出warning。

CXL PM消息用于主机和设备之间的通信。设备必须对这些消息作出正确应答。为防止下游组件没有响应导致死锁,主机必须实现超时机制,从而超时之后主机能像收到响应一样继续处理。

无论复位前是否有warning信息,设备都应正确处理复位。并非所有设备复位前都会有warning。例如,在设备上方的downstream端口设置次级总线复位bit会导致设备热复位,但在此之前没有warning。

注:Sx状态即system sleep状态,这些状态在ACPI规范中有明确定义。

CXL和PCIe的行为对比如下:

Warning:即将到来的事件的通知。

Signaling:启动状态转换,使用wire和/或链路层消息

2. CXL设备启动流程

CXL设备在启动流程方面须遵循相应的规范。CXL协议对warm reset与cold reset术语的使用方式与PCIe规范保持一致性。

3. CXL系统复位流程

在OS主导的复位流程中,期望在platform复位流程触发之前,CXL设备已经处于inactive状态,并且其相关上下文已刷新至系统内存或与CXL相连的内存中。在platform触发的复位流程中(例如由于fatal error),当CXL设备接收到ResetPrep消息时,该设备可能并未处于inactive状态。在系统复位过程中,host应该发送CXL PM VDM给下游CXL设备,具体值如下。

    • PM Logical Opcode[7:0]=RESETPREPParameter[15:0]=REQUEST

ResetType = System Reset

PrepType = General Prep

CXL设备应向host刷新相关上下文,清理为主机服务的数据,并将连接到CXL设备的内存置于安全状态,例如self-refresh。所有复位准备完成后,CXL设备发出以下CXL PM VDM给host。

?PM Logical Opcode[7:0]=RESETPREP

?Parameter[15:0]=RESPONSE

?ResetType = System Reset

?PrepType = General Prep

4. CXL设备睡眠状态流程

在触发Sx(System Sleep)流程之前,CXL设备通常已处于inactive状态,并且其上下文已刷新至与CPU相连的内存或CXL相连的内存。

在Sx流程期间,主机应向下游组件发出CXL PM VDM指令,并设置以下值:

? PM Logical Opcode[7:0]=RESETPREP

? Parameter[15:0]=REQUEST

? ResetType = System transition from S0 to Sx (S1, S3, S4, or S5)

? PrepType = General Prep

在完成所有的Sx准备工作后,CXL设备应发出具有以下值的CXL PM VDM:

? PM Logical Opcode[7:0]=RESETPREP

? Parameter[15:0]=RESPONSE

? ResetType = System transition from S0 to Sx (基于target sleep state)

? PrepType = General Prep

5. FLR复位

PCIe的FLR机制使软件能以Function粒度来复位Endpoint。CXL设备向主机软件呈现一个或多个PCIe Function。这些Function可以呈现FLR能力,从而PCIe兼容软件可以向其发出FLR。FLR复位不影响CXL.cache和CXL.mem协议。任何CXL.cache和CXL.mem相关的控制寄存器,包括CXL DVSEC结构和状态,不受FLR复位的影响。承载HDM的内存控制器不受FLR影响。

FLR复位后,根据PCIe规范,对应function的地址转换是invalid。由于CXL function使用地址转换cache中的物理地址访问缓存,所以该function无法在FLR复位后访问cache,直到软件显式地重新使能ATS。在FLR流程期间,设备不需要回写其缓存。为了避免对其他function的性能产生影响,强烈建议在FLR期间,如果缓存由多个function共享,则设备不要回写其缓存内容。缓存一致性必须得到维护。

在某些情况下,系统软件可能使用FLR来尝试错误恢复。在CXL设备中,CXL.cache和CXL.mem逻辑中的错误无法通过FLR恢复。FLR可以从CXL.io中恢复错误。

在除eRCD以外的CXL设备中,参与CXL.cache或CXL.mem的所有function需要支持FLR或CXL复位。

6. cache管理

CXL-unaware的OS或PCIe总线驱动不知道CXL.cache的能力。设备驱动程序应该知道CXL.cache能力,并可以管理CXL.cache。软件不应假定设备缓存中映射到HDM的cacheline被CPU缓存刷新指令刷新。这种行为因host而异。

系统软件希望在不复位系统或整个设备的情况下,确保支持CXL.cache的设备不包含任何有效的缓存。由于不需要设备通过FLR清除缓存内容,因此为此定义了单独的控制和状态位。对于支持CXL.cache的eRCD,强烈推荐使用此能力,对于其他支持CXL.cache的设备,此能力是必需的。该能力通过DVSEC CXL能力寄存器中的Cache Writeback和Invalidate Capable flag指示。

软件通过以下步骤来确保设备内没有有效的缓存行:

设置Disable Caching为1。该bit位于DVSEC CXL Control2寄存器。

设置Initiate Cache Write Back和Invalidation为1。这一步可以与上一步结合起来,写入DVSEC CXL Control2寄存器。

等待Cache Invalid=1。该bit位于DVSEC CXL Status2寄存器。软件可以利用DVSEC CXL Capability2寄存器中报告的缓存大小来计算适当的超时值。

软件需要设置Disable Caching=0来重新启用cache。当Disable Caching bt从1变为0时,如果Cache Invalid bit之前被置为1,则设备应将Cache Invalid bit变为0。

7. CXL复位

CXL.cache和CXL.mem资源,如控制器、buffer和cache可能在设备level共享。CXL Reset用于复位所有CXL.cache和CXL.mem状态,除了non-Virtual Function里的CXL.io。CXL.io复位与FLR具有相同的作用域。CXL复位不会影响非CXL的function和物理链路。非CXL的function Map DVSEC capability用于向系统软件指示哪些非虚拟function被视为非CXL。

SLD中参与CXL.cache或CXL.mem的所有function需要支持FLR或CXL复位。MLD需要支持CXL复位。

CXL复位的Capability和相关寄存器位于device 0,function 0的配置空间,但其会影响设备内参与CXL.cache或CXL.mem的所有物理和虚拟function。

系统软件负责暂停所有因复位CXL.cache和CXL.mem状态而受影响的function,并offline相关的HDM范围。一旦CXL复位完成,设备上的所有CXL function必须在使用前重新初始化。

在执行CXL复位时,系统软件应遵循以下步骤:

查询DVSEC CXL能力寄存器的CXL?Reset Capable位来判断设备是否支持CXL复位。

按照本节的描述,为CXL复位做准备。

查询DVSEC CXL能力寄存器来确定设备是否支持CXL Reset Mem Clr能力。

如果设备支持CXL Reset Mem Clr能力,则根据需要在DVSEC Control2寄存器中对CXL Reset Mem Clr使能位进行编程。

查询DVSEC CXL能力寄存器中的CXL Reset timeout字段来确定超时时间。

设置DVSEC CXL Control2寄存器的Initiate CXL Reset=1。

等待DVSEC CXL Status2寄存器中的CXL Reset Complete=1或CXL Reset Error=1直到超时。

重新初始化和online设备时,系统软件应遵循以下步骤:

根据需要来设置device,使能受CXL Reset影响的function。

可选检查CXL复位时设备是否对内存进行了清除或随机化。如果是,需要跳过软件初始化后再重新分配。如果没有,需要执行软件初始化。

8. Global Persistent Flush(GPF)

全局持久性刷新(GPF)是一种基于硬件的机制,用于将缓存和内存buffer刷新到持久性域(Persistent Domain)。持久性域定义为一个位置,用于保证重新启动设备时保留其数据内容。例如突然断电时,主机可以启动GPF以确保未完成的数据被写回持久介质中。

9. 热插拔

根据定义,RCD(Restricted CXL Device)和RCH(Restricted CXL Host)不支持热插拔

CXL Root Port和CXL Downstream Switch Port(DSP)可以支持Hot-Add和Hot-Remove。所有CXL port的设计应避免意外热拔时的电气损坏。除eRCD外,所有CXL Switch和CXL设备都应能够热插拔,但受外形因素的限制。在热移除流程中,软件会收到热移除请求的通知。这为CXL-aware系统软件提供机会在断电之前回写设备cacheline和离线设备内存。在热添加流程中,CXL-aware系统软件发现CXL.cache和CXL.mem能力,并初始化它们。

CXL利用PCIe热插拔模型和PCIe规范中定义的热插拔元素。

10. 软件枚举

本节介绍两种CXL设备枚举的流程。尽管CXL设备的发现遵循PCIe模型,但有一些区别:

RCD枚举:顾名思义,RCD(Restricted CXL Device)模式有一些限制,因此枚举流程更简单。通过设置PCIe Capability寄存器的Device/Port Type为RCiEP,每个RCD以PCIe RCiEP的形式暴露给host软件。每个RCD创建一个新的PCIe枚举层次结构,与ACPI定义的PCIe?Host Bridge兼容。

CXL VH(Virtual Hierarchy)枚举:CXL?root port是CXL VH的根端口。一个CXL VH可以包含零个或多个CXL Switch、零个或多个PCI Switch、零个或多个PCIe设备,以及一个或多个非RCD模式的CXL设备。CXL VH表示软件视图,可能与物理拓扑不同。

CXL设备不能声明I/O资源,因为它不是Legacy EP。

参考:cxl spec 3.0/3.1

相关推荐