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

CXL协议:CSR寄存器介绍

22小时前
131
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

CXL的CSR寄存器分为以下两部分:

1. 配置空间寄存器:通过configure读和configure写来访问。

2. memory map空间寄存器:通过memory读和memory写来访问。

1. 配置空间寄存器

配置空间寄存器主要用来发现和配置CXL功能。RCH Downstream Port不映射任何寄存器到配置空间。

1.1 PCIe  (DVSEC) ID Assignment

DVSEC的全称为Designated Vendor-Specific Extended Capability。CXL协议定义的配置空间寄存器分为多个块(block),每个块都被视为一个PCIe的厂商特定扩展能力(DVSEC)结构。DVSEC Vendor ID字段设置为1E98h,以表明这些能力结构是CXL规范定义的。

1.2 CXL DOE Type Assignment

DOE即Data Object Exchange,是PCI-SIG定义的一种机制,用于host与PCIe function之间进行数据对象的交换。

1.3 PCIe DVSEC for CXL Device

RCD(Restricted CXL Device)会创建一个新的PCIe枚举层次结构。因此它会生成一个新的Root Bus,并可以在该总线号处有一个或多个PCIe device号和function号。这些会作为RCiEP来呈现。device 0,function 0的PCIe配置空间应包含下图所示的CXL PCIe DVSEC。

non-RCD枚举方式与标准PCIe EP相同,并位于CXL RP或CXL Switch之下。non-RCD应在父端口的次级总线上呈现一个PCIe设备号以及一个或多个function号。这些设备会以标准PCIe EP的形式呈现。device 0,function 0的PCIe配置空间应包含上图的CXL PCIe DVSEC。

软件可利用此DVSEC来区分CXL设备和PCIe设备。因此,标准的PCIe设备不能呈现此DVSEC。

其中,CXL Lock寄存器的CONFIG_LOCK字段置1后,CXL PCIe DVSEC寄存器中带有RWL属性的字段都变为只读。只有PCIe的hot reset、warm reset或cold reset才能将其清0。

如果DVSEC CXL Capability寄存器的Mem_Capable为1,CXL Range 1寄存器必须实现。如果DVSEC CXL Capability寄存器的Mem_Capable=1且HDM_Count=10b,CXL Range 2寄存器必须实现。

2. memory map寄存器

CXL的memory map寄存器位于6个区域内,如下表所示。其中,RCD即Restricted CXL Device,RCH即Restricted CXL HOST。

需要注意,RCH Downstream Port(DP)和RCD Upstream Port(UP)不是通过PCIe配置空间来发现的,而是使用PCIe Root Complex register block(RCRB)实现的。RCRB的大小为4KB,后面会具体介绍。

此外,RCH DP和RCD UP各自实现一个MEMBAR0区域(即component寄存器),用于承载相应端口的CXL组件的配置寄存器。MEMBAR0寄存器保存component寄存器的地址。

软件应该使用CXL.io memory读/写来访问memory map寄存器。

2.1 RCD Upstream Port和RCH Downstream Port寄存器

RCH Downstream Port RCRB是4KB的memory region,布局如下图。前64字节(除了第一个DWORD)是PCIe的Type 1 Configuration Header。64-bit的MEMBAR0寄存器的地址是10h和14h,它指向用于配置CXL子系统组件的MEMBAR0区域。

支持的PCIe capability和扩展capability是通过指针链表来发现的。PCIe能力寄存器位于040h到0FFh,PCIe扩展能力寄存器位于100h到FFFh。

Flex Bus Port DVSEC寄存器是CXL port都需要实现的,布局如下图,其位于RCD UP和RCH DP的RCRB里。如果没有实现CXL RCRB,Flex Bus Port DVSEC也位于CXL的配置空间。

2.2 Component寄存器

Component寄存器就是MEMBAR0区域。下表为CXL.io、CXL.cachemem和CXL ARB/MUX寄存器的相对地址偏移。注:CXL.io寄存器是reserved的,因为CXL协议没有定义。

CXL Host Bridge包含Component寄存器,用来控制一个或多个CXL RP的功能。这些寄存器被标记为CHBCR,也映射在内存空间中,其基地址通过ACPI CEDT获取。

对于所有的CXL组件和CXL Host Bridge,component寄存器的布局和发现机制是相同的。软件应使用CXL.io memory读/写来访问component寄存器,并遵循以下规则:

32-bit的寄存器应该4字节访问。不允许partial读操作。

64-bit的寄存器应该8字节访问。不允许partial读操作。

访问应映射到连续的字节。

2.3 CXL.cache和CXL.mem寄存器

CXL.cachemem寄存器位于CXL.cachemem Primary Range

(1000h-1FFFh) 或者CXL.cachemem Extended Range。在CXL.cachemem的每个4KB空间内,使用指针数组来描述架构寄存器的位置。如下表8-23中描述,起始位置位于4K区域的偏移00h。数组的第一个元素将声明CXL.cache和CXL.mem协议的版本以及数组的大小。随后的每个元素是指向4KB内capability寄存器块的指针。

CXL Link Capability寄存器如下,包含link控制/状态、link credit等寄存器。

CXL HDM Decoder Capability寄存器用于CXL.mem以及针对HDM的UIO事务的路由,并可选择在CXL.mem-capable设备中实现HDM的交织。(HDM即Host-managed Device Memory,UIO即Unordered Input/Output)。

CXL Host Bridge被标识为ACPI设备,并与一个或多个CXL RP相关联。与多个CXL RP相关联的CXL Host Bridge必须在CHBCR中包含此能力结构。此能力结构根据给定的内存地址解析target CXL RP。

CXL Switch可以包含一个Upstream Switch Port和一个或多个Downstream Switch Port。如果能够路由CXL.mem事务到一个以上Downstream Switch Port,那么Upstream Switch Port应该包含这个能力结构,根据内存地址解析target Downstream Switch Port。

非eRCD(exclusive Restricted CXL Device)的CXL Type 3设备应包含该能力结构。支持BI或UIO访问其HDM的CXL Type 2设备应该包含这种能力结构。位于设备中的能力结构,将主机物理地址(HPA)转换为设备物理地址(DPA)。

CXL RAS Capability寄存器结构如下,

CXL Snoop Filter Capability寄存器结构如下,

CXL Timeout and Isolation Capability寄存器如下,

CXL Cache ID Decoder Capability寄存器如下,该结构可能存在于DSP(Downstream Switch Port)和root port中。该能力结构的存在表明组件支持多设备扩展的CXL.cache协议增强。如果Switch或Host支持多设备扩展的CXL.cache协议增强,此能力结构是必需的。

参考:CXL Specification 3.0/3.1

相关推荐