LJgibbs · 2022年01月10日

PCI Express 学习篇_System_Reset

写在前面

笔者在工作中需要包个 PCIe wrapper,正在努力飞快学习 PCIe ing.
本文系转载,略做格式调整与增加解释(使用斜体表示),转自https://blog.csdn.net/weixin_48180416/article/details/115605331

相应内容可参考:

  • 《PCI Express 体系结构导读》 第 4.1.5 章

转载正文

PCI Express 复位主要分为两类

  • PCI Express Conventional Reset: 传统复位
  • Function Level Reset(FLR):功能级复位

PCI Express Conventional Reset: 传统复位,又分为Fundamental Reset和Non-Fundamental Reset.

Non-Fundamental Reset 指 Hot Reset

Fundamental Reset: 基本复位,在硬件中处理,复位整个device,重新初始化状态机、所有的硬件逻辑、Port状态和配置寄存器。

注意:一种特殊情况除外,sticky的寄存器是不能被Fundamental Reset复位的,sticky寄存器受到Aux Power的控制,如果有Aux Power没有Main Power寄存器的值不会丢失,如果所有的power都off了,寄存器的值也会丢失。这些寄存器在诊断链路问题的时候非常有用,重新复位链路使链路能重新工作,error status不会被复位,可以后续报告给软件。

Fundamental Reset又分为Cold reset和Warm reset. Fundamental Reset可以采用auxiliary signal---PERST#.

Cold reset:

应用Main Power时产生的复位。“A Fundamental Reset following the application of main power.”

Warm reset (Optional):

不关闭Main Power时,由硬件产生的复位。(Spec没有定义实现方法)

PCI Express 复位划分

所以整个 PCI Express 复位可以如此划分:

  • PCI Express Conventional Reset: 传统复位
  • Fundamental Reset
  • Cold Reset
  • Warm Reset
  • Non-Fundamental Reset (Hot Reset)
  • Function Level Reset(FLR):功能级复位

Reset 两个很重要的规则:

  1. Fundamental Reset(PERST#)释放后20ms内LTSSM要进入Detect状态; 如果component释放复位时间不同,各自分别要满足这个要求;
  2. 2.5GT/s时Fundamental Reset(PERST#)释放后软件至少等待100ms再发起Configuraion Request,

5GT/s及以上时link up后软件至少等待100ms再发起Configuration Request(因为高速时EQ可能会耗费50ms,导致如果从reset开始算100ms可能是不够用的)

注:

1)只有软件使能CRS Software Visibility才能用100ms等待时间,否则会产生Completion timeouts, platform timeouts, or lengthy processor instruction stalls

2)复位释放后的1s内,device必须收到Configuration Request并返回Successful Completion(运用Readiness Notifications会缩短这个时间限制)否则认为是broken device.

Configuration Request Retry Status

以下为关于Configuration Request Retry Status(CRS)的规定:

CRS Software Visibility未使能:

当RC收到CRS的Completion时,RC需要重新发新的请求;

CRS Software Visibility使能:

1) 当RC CfgRd Vendor ID的所有字节(枚举过程),但是收到CRS的Completion情况下,RC返回给host 0001h的Vendor ID,如果有其他字段设为全1,实际上是个假的Vendor ID;可以使软件先处理其他任务,稍后再来询问这个设备;

2) 当RC CfgRd其他字段或CfgWr,RC需要重新发新的请求,可以限制Request-CRS循环到一定数量后报错给host;

PERST#时序要求

以下为PERST#时序要求(摘自CEM手册):
image.png

版权声明:本文为CSDN博主「小雨滴落落」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:PCI Express学习篇---System Reset

转载自:知乎
作者:小雨滴落落

推荐阅读

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