• 正文
  • 相关推荐
申请入驻 产业图谱

一文详解PCIe热插拔原理

05/19 10:35
8266
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 什么是PCIe热插拔

PCIe热插拔(Hot Plug)是指允许在系统运行时不关闭电源即可安全插入或拔出PCIe设备,其广泛应用于服务器数据中心等场景。PCIe热插拔是提升系统RAS能力的重要手段。

热插拔控制器所需的寄存器集成到了Root和Switch port中。在热插拔软件控制下,这些控制器和port接口必须控制PCIe卡的接口信号,以确保在热插拔时有序上电和下电。
PCIe热插拔是一种“no surprise”(非暴力)的热插拔方法,即需要事先通知系统,然后软件准备卡和插槽,并向用户表明热插拔过程的状态,通知用户现在可以进行热插拔。

暴力移除(Surprise Removal)注意:PCle CEM规定了PCIe设备存在检测引脚PRSNT1# 和 PRSNT2#,如下图,PRSNT#1固定接地,而PRSNT#2拉高(pull up)。这两个引脚(金手指)比其他引脚短,以便它们先断开连接(从插槽中移除PCIe卡时),可以提前通知软件“surprise” removal,从而有时间在断开接触之前移除电源。

2. PCIe热插拔的组成和结构

如下图所示,PCIe采用点到点的连接,每个跟连接器相连的port都需要一个hot plug控制器。为每个Root port和Switch port定义的标准软件接口控制热插拔操作。

热插拔所需的元素分为软件元素和硬件元素。

软件元素包括以下内容:

    User接口:由OS vendor提供。Hot Plug service:由OS vendor提供。标准的Hot Plug系统驱动:由system board vendor或OS vendor提供。device驱动:由Adapter card vendor提供。

硬件元素包括以下内容:

    Hot Plug控制器:负责接收和处理来自热插拔系统驱动的指令。
    Card Slot Power Switching逻辑:被Hot Plug控制器控制,用于开关电源
    Card Reset逻辑:Hot Plug控制器向指定Slot传送PERST#信号。
    Power Indicator:指示连接器上的电源状态。
    Attention Indicator:警示灯,提示用户热插拔失败状态,一般处于关闭状态。
    Attention Button:由用户按下,通知热插拔软件要更换PCIe设备。
    Card Present Detect Pins:有两个检测PCIe设备是否存在的信号PRSNT1#和PRSNT2#。
    PRSNT#1固定接地,当PCIe设备未插入插槽时,PRSNT#2为高电平,插入插槽后,PRSNT#2变为低电平。

3. PCIe热插拔的具体流程

接下来分别介绍PCIe设备的移除和插入的具体流程。

PCIe设备移除的流程:

正常运行时的指示状态如下:

    Attention Indicator为黄色 - OffPower Indicator为绿色 - On
    用户通过按下Attention按钮或在软件界面告知系统要移除PCIe设备。按下Attention按钮,Hot-Plug控制器检测到后,会发送中断给RC。然后Hot-Plug Service调用Hot-Plug驱动去读取slot状态信息并检测Attention按钮的状态。
    Hot-Plug驱动让Power指示灯闪烁5s给用户作指示,用户可以在这5s内再次按该按钮以取消请求。热插拔软件确认请求时,Power指示灯继续闪烁。如果PCIe设备当前处于关键的系统操作,软件可能会拒绝该请求。这种情况下,它会向热插拔控制器发出命令,重新打开电源指示灯。
    如果请求有效,设备驱动会停止(quiesce)该设备。即禁止其生成新请求,并完成或终止所有outstanding的Root或Switch端口请求。软件通过Link Control寄存器关闭PCIe链路。
    软件命令Hot-Plug控制器关闭slot。成功下电后,软件发请求关闭Power指示灯,以告知用户。用户释放机械锁(如果有的话),从而使热插拔控制器从slot中移除所有switched信号(例如SMBus和JTAG信号)。
    现在PCIe设备可以移除了。OS释放分配给该设备的memory空间、IO空间、中断线等。

PCIe设备插入的流程:

    用户插入PCIe设备,并锁定MRL机械锁(如果有的话)。用户按下Attention按钮或者在软件界面告知系统已插入PCIe设备。
    按钮按下后,导致状态寄存器位被置位,并发送中断给RC。然后软件从该端口读取slot状态并识别该请求。驱动程序命令控制器闪烁slot电源指示灯,通知用户不能移除设备。(从指示灯闪烁开始,用户在5s内再次按下按钮可以中止请求)。
    驱动程序命令Hot Plug控制器将slot打开。电源接通后,软件发出命令打开电源指示灯。链路训练完成后,软件通过分配必要的资源来配置PCIe function。OS为PCIe设备寻找对应的驱动,并将驱动加载到内存中。
    OS调用驱动完成对PCIe设备的初始化,并使能PCIe设备。

4. PCIe热插拔控制器的编程接口

PCIe热插拔控制器的编程接口是通过PCIe capability寄存器提供的,即下图红框里的寄存器。

slot capability寄存器如下图。这个寄存器的各域段是硬件负责初始化的,以反映这个port的特性,例如是否存在Attention按钮、是否支持Hot Plug能力(Capable)、是否支持暴力插拔(Surprise)等特性。

slot control寄存器如下图。软件通过slot control寄存器来控制Hot Plug event和相关操作,还有中断使能等。

slot status寄存器如下图。热插拔控制器监控各种event,并向驱动程序报告这些event。软件可以使用status位来确定发生了什么event。这些事件是否通过中断报告给系统,由slot control寄存器中相关的enable bit决定。

PCIe支持以下Hot Plug event,这些event都有一个status字段和一个enable字段。status表示事件发生了但是还没有被软件处理。enable表示是否使能通知软件。

    • Slot Event

Attention Button Pressed

Power Fault Detected

MRL Sensor Changed

Presence Detect Changed

Command Completed EventData Link Layer State Changed Event

参考:

    PCI Express Base SpecificationPCI Express Card Electromechanical SpecificationMindshare?PCI Express Technology

相关推荐