LJgibbs · 2022年01月19日

PCIe扫盲——复位机制介绍(Fundamental & Hot)

写在前面

笔者在工作中需要包个 PCIe wrapper,正在努力飞快学习 PCIe ing.
本文系转载,略做格式调整与增加解释(使用斜体表示),转自:PCIe扫盲--复位机制介绍(Fundamental & Hot)

转载正文

相应内容可参考:

PCIe 四种复位方式:冷、暖、热、功能层

PCIe总线中定义了四种复位名称:冷复位(Cold Reset)、暖复位(Warm Reset)、热复位(Hot Reset)和功能层复位(Function-Level Reset,FLR)。

其中FLR是PCIe Spec V2.0加入的功能,因此一般把另外三种复位统称为传统的复位方式(Conventional Reset)。

其中冷复位和暖复位是基于边带信号PERST#的,又被统称为基本的复位方式(Fundamental Reset)。

基本复位

基本复位由硬件自动处理,会复位整个PCIe设备,初始化所有与状态机相关的硬件逻辑,端口状态以及配置空间中的配置寄存器等等。

但是,也有一个例外,就是前面介绍PCIe错误报告机制的相关文章中提到过Sticky(不受复位影响)的概念。这里指的不受复位影响的前提是,PCIe设备的电源并未被完全切断。Sticky这一功能有助于系统定位错误与分析错误起因。

基本复位中的冷复位(Cold Reset)指的是因为主电源断开后重新连接导致的复位。需要注意的是,即使主电源断开了,如果PCIe设备仍有辅助电源Vaux为其供电,该复位仍不会影响到Sticky的bits。
PCIe Spec允许两种实现基本复位的方式。

一是直接通过边带信号PERST#(PCI Express Reset);

二是不使用边带信号PERST#,PCIe设备在主电源被切断时,自行产生一个复位信号。一个简单的例子如下图所示:
image.png
暖复位(Warm Rest)是可选的,指的是在不关闭主电源的情况下,产生的复位。然而,PCIe Spec并未明确规定暖复位的产生机制,因此,如果产生暖复位完全是由系统设计者决定的。

热复位(Hot Reset)是一种In-band 复位,其并不使用边带信号。PCIe设备通过向其链路(Link)相邻的设备发送数个TS1 Ordered Set(其中第五个字符的bit0为1),如下图所示。这些TS1OS在所有的通道(Lane)上同时发送,并持续2ms左右。
image.png

注:关于Ordered Set以及LTSSM等相关内容,请参考前面介绍链路初始化与训练的相关文章。

主要注意的是,如果Switch的Upstream端口收到了热复位,则会将其广播至所有的Downstream端口,并复位其自己。如果PCIe设备的Downstream端口接收到热复位,则只需要复位其自己即可。

当PCIe设备接收到热复位后,LTSSM会进入Recovery and Hot Reset状态,然后返回值Detect状态,并重新开始链路初始化训练。其该PCIe设备的所有状态机,硬件逻辑,端口状态和配置空间中的寄存器(除了Sticky bits)都将被初始化值默认状态。
软件可以通过向桥设备的,特定端口的配置空间中的二级总线复位(Secondary Bus Reset)bit先写0再写1,来产生热复位,如下图所示:
image.png
需要注意的是,如果软件设置的是Switch的Upstream端口的二级总线复位bit,则该Switch会往其所有的Downstream端口广播热复位信号。而PCIe-to-PCI桥则会将接收到的热复位信号转换为PRST#置位,发送给PCI设备。
二级总线复位(Secondary Bus Reset)bit在配置空间的位置如下图所示:
image.png
PCIe Spec还允许软件禁止某个链路(Link),强制使其进入电气空闲状态(Electrical Idle)。如果将某个链路禁止,则该链路所有的下游PCIe设备都将收到链路禁止信号(通过TS1OS,如下图所示)。
image.png

版权声明

版权声明:本文为 AET 博主「Felix」的原创文章,转载请附上原文出处链接及本声明。

原文链接:PCIe扫盲--复位机制介绍(Fundamental & Hot)

转载自:知乎
作者:Felix

推荐阅读

更多招聘及面经请关注FPGA的逻辑
推荐阅读
关注数
10596
内容数
559
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息