[PCIe] [電源管理] 面向硬件的ASPM鏈路狀態和L1子狀態

PCIe設備的低功耗狀態要求系統驅動程序顯式地將設備置於低功耗狀態,從而PCIe鏈路則可以依次變爲低功耗鏈路狀態。PCIe規範允許PCIe鏈路在沒有系統驅動的情況下進入低功耗狀態。這個特性就是所謂的主動狀態電源管理(ASPM)。一般來說,無論是系統驅動端硬件(RC)還是設備硬件(EP)都可以通過檢測pcie鏈路上的空閒時間,然後啓動電源狀態轉移。

有兩種低功率鏈路狀態:

  1. L0s,也叫L0 standby。對於所有的pcie設備都是強制性的。L0s是一個單向的pcie鏈路狀態。所以設備在初始化L0s時,可以在rx保持在L0狀態,但讓tx進入L0s。
  2. L1 ASPM。可選的。pcie鏈路的兩個方向都需要在L1中。

爲了使ASPM工作,系統驅動程序需要首先讀取設備配置空間中的鏈接功能寄存器,以瞭解該pcie設備是否支持ASPM。link capabilities register [11:10]是活動狀態鏈路的PM支持位。 [11:10] = 00保留。[11:10]=01表示支持L0s。[11:10]=10又保留了。[11:10]=11表示同時支持L0s和L1。設備也使用[14:12]和[17:15]來指示L0s和L1的退出延遲。

在系統驅動程序讀取鏈路能力寄存器後,驅動程序可以在配置空間中寫入鏈路控制寄存器( link control register )來啓用L0S和ASPM L1。 link control register[1:0]是活動狀態的PM控制位。[1:0]=00表示兩者都是禁用的。01表示啓用了L0s,禁用了ASPM L1。10表示禁用L0s,啓用ASPM L1。11表示兩者都是啓用的。

當系統或設備端pcie硬件在pcie鏈路上檢測到空閒時間時,可以將其tx置爲L0s狀態。它不需要告訴高層軟件來阻止outbound (出站)TLP事務。L0s狀態退出相應的也由phy 硬件來發起。

L1狀態進入不同,因爲L1需要兩個方向都處在L1中。下面是設備如何請求鏈接進入ASPM L1:

  1. 設備端phy檢測pcie鏈路上一定的空閒時間。注意,這個空閒時間長度依賴於具體實現,通常是7-10us。然後設備阻塞新的出站事務(outbound transaction)到系統(RC)。
  2. 設備一直向系統端(RC)發送PM_Active_State_Request_L1 DLLP,直到它從系統端(RC)接收PM_Request_ACK。
  3. 系統(RC)接收到PM_Active_State_Request_L1,阻塞要發送給設備的新事務,並不斷髮送PM_Request_ACK,直到接收到電氣空閒ordered set。
  4. 設備接收PM_Request_ACK,發送電氣空閒ordered set,將其tx進入電氣空閒
  5. 系統接收到電氣空閒,將其tx轉入電氣空閒。現在Pcie鏈路處於ASPM L1狀態。

系統或設備都可以啓動ASPM L1退出。

PCIE教程中提到的設備低功耗狀態序列,可以看出L1的啓動不需要系統驅動介入。這是很重要的,因爲設備可以將自己置於低功耗狀態,然後將pcie鏈路放入L1中。設備比任何人都更瞭解自己的電源狀態。

讓我們看一下用力科Teledyne LeCroy pcie分析儀捕獲的pcie包。首先設備端檢測到幾個us(微秒)的鏈接空閒。它將PM_Active_State_Request_L1 DLLP發送到Root Complex,即系統軟件端。RC使用PM_Request_Ack DLLP進行響應。如果沒有收到電空閒,RC可以發送另一個PM_Request_Ack到設備。這個ack DLLP可以表示爲包錯誤,但它是ok的。這實際上是預期的,因爲對方是在電氣閒置狀態。

下面是另一個例子。設備像先前一樣向RC發送PM_Active_State_Request_L1。但是設備立即注意到它有mem wr TLP到RC。它現將這筆數據發送出去。重新檢測到鏈路空閒後,需要再次發送PM_Active_State_Request_L1。最後,當RC返回PM_Request_Ack時,鏈接可以到達L1。

 

Pcie規範還定義了L1.1和L1.2低功耗子狀態。

下面是對L1.1和L1.2的歷史和總體思想的一個很好的描述:

 

到PCI Express在2002年開發時,附加的“鏈接狀態”又稱“L-States”已經包含在規範中。這些模式兼容現有的“D - state”模式。“L0”反映了一個PCI Express鏈路完全運行。“L1”是一個不傳輸數據的鏈路,但可以相對較快地恢復正常運行。“L2”和“L3”分別反映一個主電源已被移除的連接(“L2”表示一個輔助電源處於活動狀態,爲設備提供“保持通電”的電源)。還定義了“L0s”狀態,在這種狀態下,PCI Express鏈路的各個方向都可以獨立關閉,快速恢復正常運行。“D0”中完全活動的設備可以在“L0”、“L0s”和“L1”之間自由切換,不需要軟件干預,不需要任何操作系統的交互,自動省電。

雖然這似乎是設備主動節能問題的一個解決方案,但“L-States”的致命弱點卻是電源的啓動或關閉速度。PCI Express規範要求設備在不到1微秒的時間內從“L0s”退出,從“L1”退出的時間約爲2-4微秒。雖然物理層設計人員可以讓處於L1中的接收器和發射機邏輯空轉以滿足這些恢復時間,但是他們不得不讓他們的共模電壓保持器和鎖相環(PLLs)保持通電並運行。這意味着“L1”中的每條PCIe通道(lane)仍然可能消耗20-30毫瓦的能量,這對於電池供電的設備來說顯然是太高了。

到2012年,人們越來越清楚地認識到,這種移動設備中專門的硬件和軟件組合可以處理正常和低功耗狀態之間的PCI Express組件轉換,只要它們有這樣的機制。進而引入“帶CLKREQ的L1 PM子狀態”到PCI Express(通常簡稱爲“L1子狀態”)是爲了允許PCI Express設備進入更深層的省電狀態(“L1.1”和“L1.2”),同時仍然顯示讓軟件處於“L1”狀態。

L1子態的關鍵是提供一個數字信號(“clkreq#”),供物理系統喚醒並恢復正常工作。這允許PCI Express PHYs在新的子狀態完全關閉他們的接收器和發射機邏輯,因爲它不再需要檢測或信號的鏈路恢復。當ECN指定了兩級恢復延遲時,它們還可以關閉它們的PLLs,甚至可能關閉共模電壓保持器。L1.1子狀態的目標恢復時間爲20微秒(比L1子狀態允許的時間長5到10倍),而L1.2子狀態的目標恢復時間爲100微秒(比L1子狀態長50倍)。兩個狀態都應該允許好的物理層設計來關閉他們的鎖相環。L1.1子狀態要求維持共模電壓,而L1.2子狀態允許其釋放。在L1.1狀態下設計良好的PCI Express PHYs應該能夠達到L1狀態下的1/100左右的功率水平。同樣地,在L1.2子狀態中,PHYs的功耗應該降低到L1態的1/1000左右。

傳統的L1狀態也是新的L1.0子狀態。

L1.1的功耗比L1.0低。這是因爲不需要啓用pcie端口來檢測電力空閒狀態。但是pcie鏈路的共模電壓仍然保持不變。

L1.2的功率甚至比L1.1還要低,因爲沒有保持鏈路共模電壓。

L1.1和L1.2都需要一個雙向開漏的CLKREQ#來進入和退出狀態。

L1.1和L1.2進入順序如下:

  1. 首先設備在pcie鏈路上檢測到一些空閒時間,它想進入L1.0,這是傳統的L1狀態。
  2. 設備將檢查L1.1和L1.2是否由系統驅動程序啓用。
    1. 如果禁用,設備將轉到L1.0。
    2. 如果啓用,設備將根據L1.1和L1.2預先編程的LTR閾值檢查LTR值。如果LTR值不小於LTR閾值,則設備應進一步檢查CLKREQ#
  3. 如果clkreq#是高指示系統不需要設備在L0,設備可以得到pcie鏈接到L1.1或L1.2。

LTR閾值在配置空間中。LTR值是定期發送到系統的LTR消息設備。LTR表示延遲容忍報告。這是爲了讓設備向系統端報告其內存讀寫的服務延遲需求,以便能夠在不影響設備功能和性能的情況下對系統進行電源管理。LTR消息值不小於LTR閾值,表示設備能夠容忍長時間的讀寫系統內存延遲(因此可以將鏈接置於低功耗狀態)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章