CXL寄存器介绍(2)- CXL DVSEC

news2025/1/21 4:48:35


🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132553156】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 1. PCIe DVSEC for CXL Devices (DVSEC _ID=0x0000)
    • Header
    • Capability
    • Control
    • Status
    • Range
    • Lock
  • 2. Non-CXL Function Map DVSEC (DVSEC _ID=0x0002)
  • 3. CXL Extensions DVSEC for Ports (DVSEC _ID=0x0003)
  • 4. GPF DVSEC for CXL Ports (DVSEC _ID=0x0004)
  • 4. GPF DVSEC for CXL Devices (DVSEC _ID=0x0005)
  • 6. PCIe DVSEC for Flex Bus Port (DVSEC _ID=0x0007)
    • Capability
    • Control
    • Status
  • 7. Register Locator DVSEC (DVSEC _ID=0x0008)
  • 8. MLD DVSEC (DVSEC _ID=0x0009)
  • 9. PCIe DVSEC for Test Capability (DVSEC _ID=0x000a)
  • 10. 参考


  上文《CXL寄存器分类》简单介绍了 CXL 的寄存器分布,接下来进一步介绍下 CXL 相关的 DVSEC。



1. PCIe DVSEC for CXL Devices (DVSEC _ID=0x0000)

  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。

Header

  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 及以上。

Capability

  CXL 链路训练过程中 Modified TS 中部分字段源于该 Capability 寄存器,Capability 能力指示寄存器指示该 Device:

  • 是否支持 CXL.io、CXL.cache 及 CXL.cache 协议;
  • 是否支持 Memory 的硬件初始化,是否为 MLD 设备,支持的 HDM 范围数量;
  • 是否支持 Cache 的 Writeback 及 Invalidate;
  • 是否支持复位,各种复位之后的默认 Volatile HDM 状态;
  • 是否支持 Viral 处理、PM 初始化完成上报;
  • Cache Size 单位及数量;
  • 是否支持 Fallback Mode。

Control

  能力控制寄存器对相关能力/特性进行配置、开关控制,其控制的能力/特性包括:

  • 是否开启 CXL.io、CXL.cache、CXL.mem、Viral 处理;
  • Cache SF 的粒度、是否开启 Cache SF 的 Coverage;
  • 关闭对新 Cacheline 的 Caching 或关闭 Cache;
  • 发起 Cache 中 Modified Cacheline 的 Write Back 并 Invalidate 所有 Cacheline;
  • 发起 CXL 复位,等等。

Status

  CXL PCIe DVSEC 中的状态指示寄存器用以指示以下状态:

  • Viral 状态;
  • Cache Invalid 状态;
  • CXL 复位完成、复位错误;
  • Volatile HDM 保护出错;
  • PM 初始化完成状态。

Range

  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

  Lock 寄存器用以锁定 CXL PCIe DVSEC 中所有 RWL 类型的寄存器,锁定之后这些寄存器访问属性变为 RO。



2. Non-CXL Function Map DVSEC (DVSEC _ID=0x0002)

  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 分为两种情况:

  • 对于支持 ARI 的 Device,5b Device Number 合入 3b Function Number,最多支持 256 个 Function,8 个 32b 宽的 Non-CXL Function Map 寄存器每 1b 对应一个 Function。比如 Non-CXL Function Map Reg3 的 bit4 为 1,表示 Function 100 (3*32+4=100) 不支持 CXL.cache/mem 协议。
  • 对于不支持 ARI 的 Device,8 个 Non-CXL Function Map Reg 对于 Function [0:7],每个寄存器中的 32b 对应 32 个 Device。比如 Non-CXL Function Map Reg3 的 bit4 为 1,表示 Device 4 的 Function 3 不支持 CXL.cache/mem 协议。

  CXL Device 的 Device 0 Function 0 必须支持 CXL.cache/mem 协议,这也意味着 Non-CXL Function Map Reg0 Bit0 不能为 1。



3. CXL Extensions DVSEC for Ports (DVSEC _ID=0x0003)

  CXL Extensions DVSEC for Ports 能力结构,仅用于 RP、DSP 及 USP,在 PCIe 枚举层级之外维护一条 RCH-RCD 层级,其能力结构寄存器布局如下图所示。

在这里插入图片描述

  该能力结构具有以下功能:

  • 对该 Port 的 PM 初始化完成状态、Viral 状态进行指示;
  • 对该 Port 的控制寄存器中的 Secondary Bus Reset (SBR)、Link Disable 字段解屏蔽,使能该 Port 的 Alt Memory ID Space、Alt BME (Bus Master Enable)、UIO to HDM、Viral 生成等功能;
  • 配置 Alt Bus/Memory/Prefetch Memory 的 Base 及 Limit;
  • 使能并配置该 Port 的 RCRB 地址。

  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



4. GPF DVSEC for CXL Ports (DVSEC _ID=0x0004)

  GPF DVSEC for CXL Ports 能力结构用于 CXL Port 中的 GPF 相关能力,主要用以控制 GPF Phase1、Phase2 的 Timeout 值。该能力结构寄存器布局如下图所示。

在这里插入图片描述



4. GPF DVSEC for CXL Devices (DVSEC _ID=0x0005)

  GPF DVSEC for CXL Devices 能力结构用于 CXL Device 中的 GPF 相关能力,主要用以指示 GPF Phase2 的 Timeout 值及 Phase2 期间的功耗。该能力结构寄存器布局如下图所示。

在这里插入图片描述



6. PCIe DVSEC for Flex Bus Port (DVSEC _ID=0x0007)

  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 寄存器。

在这里插入图片描述

Capability

  CXL 链路训练过程中 Modified TS 中部分字段源于该 Capability 寄存器,Capability 能力指示寄存器指示该 Flex Bus Port:

  • 是否支持 CXL.io、CXL.cache 及 CXL.mem 协议;
  • 是否支持 68B、Latency-Optimized 256B、PBR 等 Flit Mode;
  • 是否支持 MLD;
  • 是否支持 NOP Hint。

  该 DVSEC Capability 寄存器中部分字段于 CXL PCIe DVSEC Capability 存在重复,是给未来单个 Port 下存在多个具备不同 Capability 的 Device 的场景准备的。

Control

  能力控制寄存器对相关能力/特性进行配置、开关控制,其控制的能力/特性包括:

  • 是否开启 CXL.io、CXL.cache、CXL.mem 等协议;
  • 是否开启 Sync Header Bypass、Drift Buffer;
  • 是否开启 68B/VH、Latency-Optimized 256B、PBR Flit Mode;
  • 是否开启对 MLD、NOP Hint 的支持;
  • 配置并指示 CXL 链路上是否存在 Retimer1/2。

Status

  Flex Bus Port DVSEC 中的状态指示寄存器用以指示以下状态:

  • 所使能的 CXL 协议;
  • Flit Mode 使能状态;
  • Sync Header Bypass 及 Drift Buffer 使能状态;
  • Even Half 错误状态、CXL Frame Error 状态;
  • Retimer1/2 Present 状态,等等。


7. Register Locator DVSEC (DVSEC _ID=0x0008)

  Register Locator DVSEC 内存放有一个或多个寄存器块的 Entry。下图为 3 个 Entry 的 Register Locator DVSEC 能力结构寄存器布局。

在这里插入图片描述

  上述 Entry 每个 Entry 占用 2DW 寄存器,Entry 内含有相关信息来指示当前 Entry 归属于哪个寄存器块、位于哪个 BAR 范围内、在 BAR 内的地址偏移(64KB 对齐)是多少。



8. MLD DVSEC (DVSEC _ID=0x0009)

  MLD DVSEC 用于 MLD 相关 Capability,比如指示支持的 LD 数量、LD-ID 热复位向量。MLD DVSEC 仅适用于 FM 所属的 LD,其能力结构寄存器布局如下图所示。

在这里插入图片描述



9. PCIe DVSEC for Test Capability (DVSEC _ID=0x000a)

  该 DVSEC 用于 CXL Compliance 测试。CXL Compliance 测试过程中对该 DVSEC 进行配置,并根据该 DVSEC 内容进行相关测试。下图是 CXL 协议建议的一种寄存器布局。

在这里插入图片描述



10. 参考

  1. CXL Base Spec, r3.0

— END —


🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥

⬆️ 返回顶部 ⬆️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.0 Spring与Dubbo整合原理与源码分析

#Dubbo# 文章介绍 Dubbo中propertie文件解析以及处理原理Dubbo中@Service注解解析以及处理原理Dubbo中@Reference注解解析以及处理原理1.0 整体架构和流程 应用启动类与配置 public class Application {public static void main(String[] args) throws Exception {Annotation…

Idea中 css 、js 压缩插件会自动生成xxx.min.css、xxx.min.js文件

第一步:下载yuicompressor-2.4.8.jar 下载路径:打开搜索 YUI compressor Maven Repository: Search/Browse/Explore (mvnrepository.com)https://mvnrepository.com/ 找到点击下载即用(如下图) 创建文件夹,放入idea文…

进制转换(二进制、八进制、十六进制、十进制)

一、进制表示 二进制:每一位只有两种符号表示 -> 0,1 例如 (101011)₂,也可写作101011B,其中B是Binary英文的缩写。八进制: 每一位有8种符号表示(0~7),例如(1652)₈,也可写作1652O,其中O是O…

如何查看Windows下软件使用的端口号和PID

文章目录 解决方法 解决方法 打开资源管理器:按下Win R,输入"resmon",然后按Enter键 在资源监视器窗口中,切换到"网络"选项卡。 在"侦听端口"部分,你可以看到正在使用的端口号和PID…

Android——基本控件(下)(二十一)

1. 数据存储 1.1 知识点 (1)掌握Android数据存储的分类; (2)可以使用SharedPreferences存储数据。 1.2 具体内容 对于我们数据的存储而言,Android一共提供了5个数据存储的方式:SharedPrefe…

JS算法与树(二)

前言 二叉搜索树(BST)存在一个问题:当你添加的节点数够多的时候,树的一边可能会非常的深。而其他的分支却只有几层。 AVL树 为了解决上面的问题,我们提出一种自平衡二叉搜索树。意思是任何一个节点左右两侧子树的高度之…

NTT功能与实现

NTT的基础功用与拓展功能: 1.evaluate和interpolate evaluate的本质是选择n个点(假设f(x)的度为n),计算得到其值,因此根据定义可以直接进行代入计算。为了加快计算的过程选取 w n w_n wn​的幂次(DFT问题即离散傅里叶变换),使用FFT算法来加…

CXL.cachemem 简介(背景通道)

🔥点击查看精选 CXL 系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

无涯教程-JavaScript - TDIST函数

The TDIST function replaces the T.DIST.2T & T.DIST.RT functions in Excel 2010. 描述 该函数返回学生t分布的百分点(概率)​​,其中数值(x)是t的计算值,将为其计算百分点。 t分布用于小样本数据集的假设检验。使用此函数代替t分布的临界值表。 语法 TDIST(x,deg_fr…

iOS 设置下载部分文件,如何获取完整文件的大小

在视频的需求中,遇到这样一个需求,播放一视频的时候,要预下载 后面10条视频,但是只下载后面十条视频的前面1M 实现方法 1 创建请求时设置cacheLength resource [[IdiotResource alloc] init];resource.requestURL task.request…

屋大人少,凶多吉少

在这个世界上,包括人在内的万事万物,都是有自己的气场存在的。 那么,人所产生的气场,我们称之为人气。 道法自然,阴阳二象,同样,人的身上也是有阴阳二气, 二气平衡充盈,会…

【Python】批量下载页面资源

【背景】 有一些非常不错的资源网站,比如一些MP3资源网站。资源很丰富,但是每一个资源都不大,一个一个下载费时费力,想用Python快速实现可复用的批量下载程序。 【思路】 获得包含资源链接的静态页面,用beautifulsoup分析页面,获得所有MP3资源的实际地址,然后下载。…

将 Spring Boot 应用程序与 Amazon DocumentDB 集成

Amazon DocumentDB(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工…

bazel介绍以及其发展历史

简介 Bazel Google开源的,是一款与 Make、Maven 和 Gradle 类似的开源构建和测试工具。 它使用人类可读的高级构建语言。Bazel 支持多种语言的项目,可为多个平台构建输出。Bazel支持任意大小的构建目标,并支持跨多个代码库和大量用户的大型代…

JavaSE基础(1)

1 初识Java 知识导图 1.1 Java简介及发展史 1.1.1 Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。 不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软…

系统学习Linux-PXE无人值守装机(附改密)

目录 pxe实现系统自动安装pxe工作原理 大致的工作过程如下: PXE的组件: 一、配置vsftpd 二、配置tftp 三、准备pxelinx.0文件、引导文件、内核文件 四、配置dhcp 配置ip 配置dhcp 五、创建default文件 六、新建测试主机用来测试装机效果 七、…

github指南

记录一些Github上的宝贵功能 1、github trending/star 1.1查看github的热门趋势 可以选择点击上面热门趋势的链接,从主页点进去的方式如下 在这个页面中,你可以选择language/data range等来搜索到你想要的 1.2 查看github的star排行 比如&#xff1a…

出货量腰斩,不用中国芯片,美国PC巨头要凉了,苹果成为大赢家

市调机构Canalys公布的二季度数据显示美国PC巨头戴尔在中国市场的出货量同比暴跌52%,显示出它在公开宣布舍弃中国芯片之后,中国消费者正纷纷抛弃它,毕竟如今的PC品牌如此之多,完全有更多的替代选择。 Canalys公布的数据显示&#…

Python Opencv实践 - 拉普拉斯(Laplacian)算子边缘检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_GRAYSCALE) print(img.shape)#拉普拉斯边缘检测 #cv.Laplacian(src, ddepth, dst, ksize, scale, delta, borderType) #src:原图 …

正中优配:沪指震荡涨0.23%,保险、酿酒等板块走强,半导体板块下挫

1日早盘,沪指、深成指盘中强势震动上扬,创业板指回落翻绿,科创50指数跌超1%;两市半日成交缺乏5000亿元。 到午间收盘,沪指涨0.23%报3127.19点,深成指涨0.25%,创业板指跌0.23%,科创5…