談到PCIe的電源管理,可以聯想到該介面與傳統的「PCI Bus PM Interface Specification」,以及「Advanced Configuration and Power Interface (ACPI),Revision 2.0」規範彼此相容...
談到PCIe的電源管理,可以聯想到該介面與傳統的「PCI Bus PM Interface Specification」,以及「Advanced Configuration and Power Interface (ACPI),Revision 2.0」規範彼此相容。
而PCIe另一個與電源有密切關係的項目,就是所支援的熱插拔(Hot Plug)功能。在不關機的情況下,將介面卡直接放進插槽,經過一些機制與對策步驟,才能夠辦得到,否則,將使主機板或介面卡陷入容易毀損的狀況。當然,使用者也需帶點勇氣與智慧。
嚴格說來,PCIe的熱插拔衍生於為PCI匯流排而制定的「Standard Hot Plug Controller Specifi-cation(SHPC1.0)」規範。PCIe熱插拔的設計理念是屬於一種「No Surprises」式的策略,意思是說,使用者在插入或拔除介面卡時,必須先行告知系統軟體。系統軟體也得做好準備,經由顯示元件來通知使用者熱插拔的狀態或拔除是否就緒。
回想過去PCI匯流排發展的歷程,起初定義並沒有針對熱插拔而來,後來由於工業應用上的需要,支援熱插拔的機制才出現,CompactPCI就是很明顯的案例。
如果就熱插拔的系統觀點來說,PCI(圖1)與PCIe(圖2)理念上是一致的,都需要所謂熱插拔控制器(Hot-plug Controller)的角色來控制。
請勿忘了PCI匯流排是一個共享式的並列介面(Share Bus),因此,隔離措施的邏輯線路是必要的。然而,PCIe介面架構卻是屬於點對點(Point to Point)的連接型態,消除了隔離邏輯線路的存在,也允許分佈式的熱插拔控制器,分別各自處理相關之連接埠,於是PCIe構成元件每一個連接埠,定義了標準的軟體介面。由此可知程式介面的差異,自然PCI與PCIe是需要不同的驅動軟體。
從實體介面上觀察,PCIe不同於PCI之處,乃在於PCIe的接腳定義了介面卡存在偵測的信號(PRSNT1#及PRSNT2#)。即使不小心或被惡意拔除,系統軟體依然有足夠時間來處置。
欲在PCIe環境下完全支援如圖2所示熱插拔的機能,其實是需要軟、硬體雙方面的搭配,才有辦法做得圓滿。
在軟體方面,比如說作業系統OS要擔當使用者介面、熱插拔系統軟體提供之服務,還有裝置驅動軟體(Device Driver)等。
至於在硬體方面,在連接埠元件端需要熱插拔控制器、介面卡電源開關邏輯線路、介面卡重置線路、按鍵(Attention Button)、指示器(Power Indicator,Attention Indicator)與介面卡存在偵測接腳(就是指PRSNT1#與PRSNT2#信號)等。
以下就熱插拔機能介面卡的插入與移除步驟做個約略性的敘述。但是先要建立一個觀念,就是插槽「On」與「Off」狀態的內在涵義是什麼。
所謂插槽「On」,意指以下幾件要項:
‧電源加諸在介面卡上
‧REFCLK參考時脈信號開起
‧傳輸連結(Link)處於動態或是經由ASPM進入省電模式(L0s或L1狀態)
‧關閉PERST#信號
而插槽「Off」的涵義,則是呈現相反:
‧關閉加諸在介面卡上之電源
‧REFCLK參考時脈信號關閉
‧傳輸連結(Link)處於無效狀態(Inactive)
‧啟動PERST#信號
正常的動作情況下,電源指示器(Power Indicator,綠色)開啟,注意指示器(Attention Indicator,琥珀色或黃色)則是在關閉的狀態。
軟體會利用組態寫入交易的傳輸模式,對熱插拔控制器送出指令請求(Request),以控制加諸在介面上的電源以及指示器的狀態。當使用者要移除(Removal)介面卡的時候,觸發可以有兩種方式,藉由「按鍵」或是軟體程式的「使用者介面」來激發。
當使用按鍵來移除時的詳細步驟如下:
‧步驟一:使用者壓下「Attention Button」鍵,此時,熱插拔控制器就會獲知這個事件,會送出中斷到「Root Complex」端,讓系統軟體來讀取插槽的資訊並確認按鍵的請求。
‧步驟二:系統軟體會命令熱插拔控制器將電源指示器閃爍。
‧步驟三:熱插拔服務常式會下令中止驅動程式,不會對介面卡產生任何的請求動作。
‧步驟四:軟體就會朝向介面卡插槽的連接埠的「Link Control Register」,利用命令來使連結(Link)失效,當然連結雙端的連接埠都失效。
‧步驟五:軟體就會下令熱插拔控制器將插槽關閉。
‧步驟六:軟體送出「Power Indicator Off」之請求,當指示器關閉之後,使用者就得知可以安然無恙地移除介面卡。
‧步驟七:使用者將會釋放MRL (Manual Retention Latch),讓熱插拔控制器可以從插槽移走SMBus與JTAG等開關信號。然後,將介面卡拔起。
‧步驟八:作業系統可以將原本該介面卡所用到的資源,諸如記憶體空間、中斷信號線等,讓渡給別人使用。
至於介面卡的插入步驟,基本上與上面所描述是呈現相反的程序。
回顧以往PCI Hot Plug1.0,並未定義有標準的暫存器以及使用者介面。業者在硬體與軟體上的實踐方式,各顯神通。因此,消費者購買不同廠商的產品時,都要耗時間去學習與熟悉其使用方式。為此,PCI Hot-Plug Controller(HPC)之1.0版,就特意去描述了底下兩件重要的事情:其一,定義了一套標準的使用者介面(User Interface),消費者在使用上就更輕鬆了;其二,針對熱插拔控制器提供了一個標準化的程式介面(Programming Interface),因此,將一個標準化的熱插拔驅動軟體,納入作業系統中是可行的。比較遺憾的是,攸關PCIe的暫存器並未在HPC中有所定義。標準的熱插拔控制器驅動軟體在處理PCI與PCIe時就略顯不同。
先來談標準的使用者介面。這個標準的使用者介面必須具有注意指示器、電源指示器(Power Indicator,或稱Slot State Indicator)、手動介面卡固定栓鎖MRL(Manual Retention Latch)、插槽確認(Slot Numbering Identifi-cation)、軟體使用介面,以及留意按鍵或注意按鍵等。
就「注意指示器」而言,盡可能接近介面插槽,可以採用黃色或琥珀色的LED指示器,該指示器的主要用意乃是用來吸引使用者的高度注意,告知熱插拔的操作失敗,因此,正常情況下該指示器是關閉的。而電源指示器主要是反映主電源已經分派到插槽上,乃是由熱插拔相關軟體所控制,顯示顏色規定是綠色。所以指示器顯示狀態,就是言明不可以插進或移除介面卡。
MRL最主要的目的當然是要堅固地鎖著介面卡,以避免鬆動,至於要不要額外加入感應器元件(Sensor)是選項可選擇的,MRL所控制的開關信號不外乎Vaux輔助電源以及SMbus信號(SMBCLK與SMBDAT信號)等。
若是仔細研讀PCIe的核心規格與CEM(Card ElectroMechanical)規格,就可以發現該規範定義了PCIe熱插拔所需的插槽信號。圖3呈現一個典型熱插拔控制器所需的介面信號。
‧PWRLED#:電源指示器(Power Indicator)的輸出信號
‧ATNLED#:注意指示器(Attention Indicator)的輸出信號
‧PWREN:主電源到插槽之控制信號
‧REFCLKEN#:參考時脈到插槽的控制信號
‧PERST#:基本重置信號
‧PRSNT1#:在連接器端接地
‧PRSNT2#:介面卡存在信號,在系統主機板端接拉高電阻
‧PWRFLT#:外部邏輯用來告知熱插拔控制器電源有誤的輸入信號
‧AUXEN#:AUX信號與輔助電源之控制信號
‧MRL#:MRL感應器的輸入信號
‧BUTTON#:也就是「Attention Button」,用來通知熱插拔控制器,使用者要進行熱插拔的動作
PCIe對於熱插拔控制器的標準程式介面是藉由「PCI Express Capability Register」暫存器來達成的(圖4)。「Slot Capabilities」的位元定義則如圖5,至於按鍵與指示器的支援與否,系統軟體必須去讀取「Device Capability Register」暫存器才會知道。
系統控制熱插拔事件與動作,乃是透過「Slot Control Register」暫存器來完成的,其相關的位元定義如圖6。
熱插拔控制器追蹤各種事件並報告通知給攸關熱插拔的系統驅動軟體,軟體可以經由狀態位元來加以確認(圖7)。
圖8是一個範例,用來說明攸關按鍵與指示器位置的安排案例。通常系統主機板上會有不少插槽,各個插槽之間的識別當然需要身分確認數值(Physical Slot ID)。然而,這些識別值卻是由系統設計者來指定的,這些識別值也必須讓諸如晶片值的Root或Switch元件的連接埠知道。畢竟,硬體在起初必須針對各個插槽的「Slot Status Register」作初始化的動作處理。
此外,在PCIe規格裡也提到電源預算(Power Budgeting)這個議題(圖9),也就是規格書上所言「Power Budgeting Capability」的機能,是隸屬於一個設計選項(Option)。雖然,不是百分之百針對熱插拔的介面卡,起碼讓系統設計者對於介面卡設計有足夠的電源預算,盡可能減少彼此之間的衝突問題,在散熱處理方面也可以精確地加以控制。
規格中定義了支援電源預算相關之組態暫存器,卻沒有描述詳細的實踐之道與方法。
系統韌體(System Firmware)必須知道整體的可用系統電源、系統裝置的電源配置,及介面上的插槽等資訊。
一個允許熱插拔的連接埠(Port)在「Slot Capabilities Register」暫存器中的「Slot Power Limit」以及「Slot Power Scale」欄位,電源軟體或韌體必須在初始化時在此欄位中載入數值,代表著該連接埠所允許的最大電源提供量。同時,連接埠也會利用「Set Slot Power Limit」的訊息來告知介面卡裝置。
而支援電源預算的介面卡,「Device Capabilities Register」暫存器就是存放連接埠送過來的訊息數值。同時,「Power Budgeting Capability Re-gister」暫存器存放在裏頭的數值就是用來報告電源相關的資訊。
那麼,裝置驅動程式(Device Driver)在電源管理也有它的職責,它必須在啟動之前先去檢驗電源是否足夠(表1)。
總之,本文純粹是站在技術的立場,畢竟,一般家用或公司用的消費者有膽識直接來熱插拔介面卡就是一件不簡單的事情了。何況該介面卡的索價是數張大鈔,相信消費者更會心疼,哪捨得在不關閉電源的情況下,去插入介面卡呢?