• 正文
    • 1. 什么是PCIe熱插拔
    • 2. PCIe熱插拔的組成和結(jié)構(gòu)
    • 3. PCIe熱插拔的具體流程
    • 4. PCIe熱插拔控制器的編程接口
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

一文詳解PCIe熱插拔原理

5小時前
238
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1. 什么是PCIe熱插拔

PCIe熱插拔(Hot Plug)是指允許在系統(tǒng)運行時不關(guān)閉電源即可安全插入或拔出PCIe設(shè)備,其廣泛應用于服務(wù)器數(shù)據(jù)中心等場景。PCIe熱插拔是提升系統(tǒng)RAS能力的重要手段。

熱插拔控制器所需的寄存器集成到了Root和Switch port中。在熱插拔軟件控制下,這些控制器和port接口必須控制PCIe卡的接口信號,以確保在熱插拔時有序上電和下電。
PCIe熱插拔是一種“no surprise”(非暴力)的熱插拔方法,即需要事先通知系統(tǒng),然后軟件準備卡和插槽,并向用戶表明熱插拔過程的狀態(tài),通知用戶現(xiàn)在可以進行熱插拔。

暴力移除(Surprise Removal)注意:PCle CEM規(guī)定了PCIe設(shè)備存在檢測引腳PRSNT1# 和 PRSNT2#,如下圖,PRSNT#1固定接地,而PRSNT#2拉高(pull up)。這兩個引腳(金手指)比其他引腳短,以便它們先斷開連接(從插槽中移除PCIe卡時),可以提前通知軟件“surprise” removal,從而有時間在斷開接觸之前移除電源。

2. PCIe熱插拔的組成和結(jié)構(gòu)

如下圖所示,PCIe采用點到點的連接,每個跟連接器相連的port都需要一個hot plug控制器。為每個Root port和Switch port定義的標準軟件接口控制熱插拔操作。

熱插拔所需的元素分為軟件元素和硬件元素。

軟件元素包括以下內(nèi)容:

    User接口:由OS vendor提供。Hot Plug service:由OS vendor提供。標準的Hot Plug系統(tǒng)驅(qū)動:由system board vendor或OS vendor提供。device驅(qū)動:由Adapter card vendor提供。

硬件元素包括以下內(nèi)容:

    Hot Plug控制器:負責接收和處理來自熱插拔系統(tǒng)驅(qū)動的指令。
    Card Reset邏輯:Hot Plug控制器向指定Slot傳送PERST#信號。
    Power Indicator:指示連接器上的電源狀態(tài)。
    Attention Indicator:警示燈,提示用戶熱插拔失敗狀態(tài),一般處于關(guān)閉狀態(tài)。
    Attention Button:由用戶按下,通知熱插拔軟件要更換PCIe設(shè)備。
    Card Present Detect Pins:有兩個檢測PCIe設(shè)備是否存在的信號PRSNT1#和PRSNT2#。
    PRSNT#1固定接地,當PCIe設(shè)備未插入插槽時,PRSNT#2為高電平,插入插槽后,PRSNT#2變?yōu)榈碗娖健?/ul>

    3. PCIe熱插拔的具體流程

    接下來分別介紹PCIe設(shè)備的移除和插入的具體流程。

    PCIe設(shè)備移除的流程:

    正常運行時的指示狀態(tài)如下:

      Attention Indicator為黃色 - OffPower Indicator為綠色 - On
      用戶通過按下Attention按鈕或在軟件界面告知系統(tǒng)要移除PCIe設(shè)備。按下Attention按鈕,Hot-Plug控制器檢測到后,會發(fā)送中斷給RC。然后Hot-Plug Service調(diào)用Hot-Plug驅(qū)動去讀取slot狀態(tài)信息并檢測Attention按鈕的狀態(tài)。
      Hot-Plug驅(qū)動讓Power指示燈閃爍5s給用戶作指示,用戶可以在這5s內(nèi)再次按該按鈕以取消請求。熱插拔軟件確認請求時,Power指示燈繼續(xù)閃爍。如果PCIe設(shè)備當前處于關(guān)鍵的系統(tǒng)操作,軟件可能會拒絕該請求。這種情況下,它會向熱插拔控制器發(fā)出命令,重新打開電源指示燈。
      如果請求有效,設(shè)備驅(qū)動會停止(quiesce)該設(shè)備。即禁止其生成新請求,并完成或終止所有outstanding的Root或Switch端口請求。軟件通過Link Control寄存器關(guān)閉PCIe鏈路。
      軟件命令Hot-Plug控制器關(guān)閉slot。成功下電后,軟件發(fā)請求關(guān)閉Power指示燈,以告知用戶。用戶釋放機械鎖(如果有的話),從而使熱插拔控制器從slot中移除所有switched信號(例如SMBus和JTAG信號)。
      現(xiàn)在PCIe設(shè)備可以移除了。OS釋放分配給該設(shè)備的memory空間、IO空間、中斷線等。

    PCIe設(shè)備插入的流程:

      用戶插入PCIe設(shè)備,并鎖定MRL機械鎖(如果有的話)。用戶按下Attention按鈕或者在軟件界面告知系統(tǒng)已插入PCIe設(shè)備。
      按鈕按下后,導致狀態(tài)寄存器位被置位,并發(fā)送中斷給RC。然后軟件從該端口讀取slot狀態(tài)并識別該請求。驅(qū)動程序命令控制器閃爍slot電源指示燈,通知用戶不能移除設(shè)備。(從指示燈閃爍開始,用戶在5s內(nèi)再次按下按鈕可以中止請求)。
      驅(qū)動程序命令Hot Plug控制器將slot打開。電源接通后,軟件發(fā)出命令打開電源指示燈。鏈路訓練完成后,軟件通過分配必要的資源來配置PCIe function。OS為PCIe設(shè)備尋找對應的驅(qū)動,并將驅(qū)動加載到內(nèi)存中。
      OS調(diào)用驅(qū)動完成對PCIe設(shè)備的初始化,并使能PCIe設(shè)備。

    4. PCIe熱插拔控制器的編程接口

    PCIe熱插拔控制器的編程接口是通過PCIe capability寄存器提供的,即下圖紅框里的寄存器。

    slot capability寄存器如下圖。這個寄存器的各域段是硬件負責初始化的,以反映這個port的特性,例如是否存在Attention按鈕、是否支持Hot Plug能力(Capable)、是否支持暴力插拔(Surprise)等特性。

    slot control寄存器如下圖。軟件通過slot control寄存器來控制Hot Plug event和相關(guān)操作,還有中斷使能等。

    slot status寄存器如下圖。熱插拔控制器監(jiān)控各種event,并向驅(qū)動程序報告這些event。軟件可以使用status位來確定發(fā)生了什么event。這些事件是否通過中斷報告給系統(tǒng),由slot control寄存器中相關(guān)的enable bit決定。

    PCIe支持以下Hot Plug event,這些event都有一個status字段和一個enable字段。status表示事件發(fā)生了但是還沒有被軟件處理。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

相關(guān)推薦