🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
上文《CXL寄存器分类》简单介绍了 CXL 的寄存器分布,接下来进一步介绍下 CXL 相关的 DVSEC。
PCIe DVSEC for CXL Devices(CXL 1.1 时称为 Flex Bus Devices,协议中有时简称为 CXL PCIe DVSEC),该能力结构中具备实现 CXL 所需的最基本的寄存器,用以指示 CXL 能力、控制相关能力/特性的开关及状态指示。
CXL PCIe DVSEC 能力结构寄存器布局如下图所示,其中有 Capability 寄存器、能力控制寄存器、状态指示寄存器、Range 配置寄存器及配置锁定寄存器。
PCIe 枚举时,软件根据 Device 是否实现了该 CXL PCIe DVSEC 来判断 Device 为 PCIe Device 还是 CXL Device 。进一步讲,若 CXL Device 为 RCD,其以 RCiEP 的形式展示给 Host,枚举过程中以该 RCD 所在的 Bus 作为 Root Bus 创建一个新的枚举 Hierarchy;若 CXL Device 非 RCD,则按照标准的 PCIe EP 进行枚举。无论哪种情况,CXL Device 的 Device0 Function0 配置空间中均应实现 CXL PCIe DVSEC 能力结构,并应用于该 Device 内的所有 Device/Function。
CXL PCIe DVSEC Header 中,CXL DVSEC ID=0x00 表示当前 DVSEC 为 CXL PCIe DVSEC,Revision ID 指示该能力结构所适用的 CXL 协议版本, 0/1/2 分别代表 CXL 1.1/2.0/3.0 。RCD 的版本可以为 0 及以上,非 RCD 的版本为 1 及以上。
CXL 链路训练过程中 Modified TS 中部分字段源于该 Capability 寄存器,Capability 能力指示寄存器指示该 Device:
能力控制寄存器对相关能力/特性进行配置、开关控制,其控制的能力/特性包括:
CXL PCIe DVSEC 中的状态指示寄存器用以指示以下状态:
CXL Device 支持最多 2 个 HDM Range,CXL PCIe DVSEC 中的 CXL Range 相关寄存器对各个 HDM 基地址及 Size 进行配置及指示。其中,CXL Range Size 还能够指示 Memory 是否 Active、Memory 类型、Interleave 方案等等。
注意:CXL Range 寄存器不适用于 FMLD,且只有在 Mem _Capable=1 时有效。
Lock 寄存器用以锁定 CXL PCIe DVSEC 中所有 RWL 类型的寄存器,锁定之后这些寄存器访问属性变为 RO。
Non-CXL Function Map DVSEC 能力结构用以指示 CXL Device 中不支持 CXL.cache/mem 协议的 Function。
我们知道,RCD 内部支持多个 Device 和 Function,非 RCD 类型的 CXL Device 内部支持一个 Device 及多个 Function。我们还知道,CXL Device 0 Function 0 配置空间中的 CXL PCIe DVSEC 该 Device 内的适用于所有 Device/Function。实际情况中,可能存在部分 Device 或 Function 不支持 CXL.cache/mem 协议,这部分 Device/Function 即通过 Non-CXL Function Map DVSEC 来指示。
Non-CXL Function Map DVSEC 能力结构寄存器布局如下图所示,其中包含 8 个 32b 宽的 Non-CXL Function Map 寄存器,每个 bit 对应一个特定的 Device/Function。
根据 Device 是否支持 ARI 分为两种情况:
CXL Device 的 Device 0 Function 0 必须支持 CXL.cache/mem 协议,这也意味着 Non-CXL Function Map Reg0 Bit0 不能为 1。
CXL Extensions DVSEC for Ports 能力结构,仅用于 RP、DSP 及 USP,在 PCIe 枚举层级之外维护一条 RCH-RCD 层级,其能力结构寄存器布局如下图所示。
该能力结构具有以下功能:
CXL RP、DSP、USP 必须实现该能力结构。当 RP 或 Switch 下挂载了 eRCD 时,该 DVSEC 可以来指示 RCRB Base、Alt Bus Base/Limit、Alt Memory Base/Limit。
*BME: Bus Master Enable,用以控制 Memory/IO 读写请求的开关
*MSE: Memory Space Enable,用以使能 Memory Space
GPF DVSEC for CXL Ports 能力结构用于 CXL Port 中的 GPF 相关能力,主要用以控制 GPF Phase1、Phase2 的 Timeout 值。该能力结构寄存器布局如下图所示。
GPF DVSEC for CXL Devices 能力结构用于 CXL Device 中的 GPF 相关能力,主要用以指示 GPF Phase2 的 Timeout 值及 Phase2 期间的功耗。该能力结构寄存器布局如下图所示。
PCIe DVSEC for Flex Bus Port(又称 Flex Bus Port DVSEC)用以控制及指示 Flex Bus 相关能力,CXL 链路训练期间 Modified TS 中的 Flex Bus 相关信息多来源于该能力结构中的寄存器,接收到对端发来的 Modified TS Info 也会记录在该能 DVSEC 相关寄存器中。
所有 CXL Port 都要实现 Flex Bus Port DVSEC 能力结构。对于没有实现 RCRB 的 CXL RP 及 CXL Switch USP/DSP,该能力结构 位于 CXL Device 的 Device 0 Function 0 的配置空间内 ;对于实现了 RCRB 空间的 RCH 及 RCD,Flex Bus Port DVSEC 实现于 RCRB 空间 。
Flex Bus Port DVSEC 能力结构寄存器布局如下图所示,其中主要为 Flex Bus Capability、Control 及 Status 寄存器。
CXL 链路训练过程中 Modified TS 中部分字段源于该 Capability 寄存器,Capability 能力指示寄存器指示该 Flex Bus Port:
该 DVSEC Capability 寄存器中部分字段于 CXL PCIe DVSEC Capability 存在重复,是给未来单个 Port 下存在多个具备不同 Capability 的 Device 的场景准备的。
能力控制寄存器对相关能力/特性进行配置、开关控制,其控制的能力/特性包括:
Flex Bus Port DVSEC 中的状态指示寄存器用以指示以下状态:
Register Locator DVSEC 内存放有一个或多个寄存器块的 Entry。下图为 3 个 Entry 的 Register Locator DVSEC 能力结构寄存器布局。
上述 Entry 每个 Entry 占用 2DW 寄存器,Entry 内含有相关信息来指示当前 Entry 归属于哪个寄存器块、位于哪个 BAR 范围内、在 BAR 内的地址偏移(64KB 对齐)是多少。
MLD DVSEC 用于 MLD 相关 Capability,比如指示支持的 LD 数量、LD-ID 热复位向量。MLD DVSEC 仅适用于 FM 所属的 LD,其能力结构寄存器布局如下图所示。
该 DVSEC 用于 CXL Compliance 测试。CXL Compliance 测试过程中对该 DVSEC 进行配置,并根据该 DVSEC 内容进行相关测试。下图是 CXL 协议建议的一种寄存器布局。
|
🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥
⬆️ 返回顶部 ⬆️
本文发布于:2024-02-05 01:44:31,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170721200761883.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |