PCIe 复位:必须了解的PERST#

1.什么是PERST#   

PERST#作为 Fundamental Reset,是直接通过边带信号PERST#(PCI Express Reset)产生的。Fundamental Reset会复位整个PCIe设备,初始化所有与状态机相关的硬件逻辑,端口状态以及配置空间中的配置寄存器等(every state machine and all the hardware logic, port states and configuration registers)。但是,也有一个例外,就是属性为“Sticky“配置寄存器字段。此类寄存器在辅助电源Vaux存在时,不受Fundamental Reset影响。但是如果主电源和Vaux都被移除,则也会被重置。“Sticky“配置寄存器字段对于诊断“problems that require a reset to get a Link working again”很有用。

图片

如图18-1所示,IO控制器中心(ICH)芯片可以根据系统电源信号“POWERGOOD”的状态产生PERST#,因为这表明主电源已打开且稳定。主机上电时和下电时,信号POWERGOOD的跳变会导致PERST# 复位和复位释放。如图所示,PERST#能够控制图中的多种设备,例如PCIE Switch、PCI Express to-PCI-X bridge,以及Add-In Card(Endpoint设备,常见设备类型有网卡和声卡)。

2.PERST#如何作用到EP设备  

   

图片

图2:PERST复位时序图

如图2所示为PERST#信号在主机上电时的时序图,初始状态(主机未上电)PERST#置为不定态(正常为0),一旦主机上电,马上PERST#置为0产生复位,保持一段时间(若干秒)后PERST#置为1表示复位撤销。不同主机上电时对PERST#信号的处理略有差异,有些主机存在两次PERST#复位。   

对PCIe Endpoint设备来说,PERST#信号来自PCIe卡槽,通过金手指传递到Add-In Card中的PCIe逻辑。如图3所示,当PERST#为0时,会通过复位产生逻辑(reset generate)产生phy_por_rstn和ctrl_rstn,phy_por_rstn用于复位PHY模块,ctrl_rstn用于复位controller模块。

需要注意的是,在主流的PCIe上电流程中,PCIe PHY需要加载firmware,为保证firmware加载正常进行会屏蔽PERST#,firmware加载完成后会解除PERST#屏蔽,并且后续的PERST#复位不会导致firmware二次加载(只要设备不断电)。

图片

图3:PERST#作为范围

3.如何处理PERST#  

作为EP设备,收到PERST#复位需要将PCIe寄存器和状态进行复位,在复位释放后重新进行PCIe链路训练,那么此时Add-In Card中除了PCIE之外的其他模块改怎么处理呢?也需要进行复位吗?

Add-In Card是否随着PERST#复位而进行整体复位需要根据芯片的应用场景进行选择。通常为了保证能够满足各类要求,至少要保证能够做到如下场景:

1)仅复位PCIE,其他模块不复位,PCIe链路协商成功后能够进行通信

2)复位PCIE以及耦合紧密的模块,其他模块不复位,,PCIe链路协商成功后能够进行通信

3)整个芯片均复位

以上3种处理方式可以根据配置进行选择。          

4.参考文档  

MindShare PCI Express Technology 3.0

PCI Express Base Specification Revision 5.0, Version 1.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值