PCIe掃盲——Power Management概述(二)——鏈路喚醒與PME產生

轉載地址:http://blog.chinaaet.com/justlxy/p/5100061891

鏈路喚醒機制可以讓處於非D0狀態的Endpoint,通過喚醒來請求Root(軟件層)讓其返回D0狀態。PCIe PM的軟件層和PCI PM是兼容的,儘管其硬件實現方式並非完全相同。PCI PM的喚醒機制是通過一個邊帶信號來實現的,而PCIe PM還支持一種inband的PME消息(Power Management Event Message)來實現這一功能。

需要注意的是,PME消息本質上也是Message,也就是說PME消息也是一種TLP,因此PME消息只能在鏈路處於L0狀態下,纔可以正常發送。

注:前面的文章中介紹過,當鏈路處於非L0狀態時,任何TLP和DLLP都不能正常發送。

PME消息包的格式如下圖所示:

image.png

有幾點需要注意的是:

    1、PME消息只能採用模糊尋址(Implicitly)方式;

    2、PME消息的TC和VC只能是0,即不支持QoS;

    3、PME消息是一種Message,因此其是Posted的,即不需要Completion與之對應;

    4、PME消息不支持Relaxed Ordering,且總是強制當前器件與Root之間的鏈路上的所有PCIe設備中的所有其他的事務層包(TLP)在PME消息之前發送。

注:當然,第4點可能會造成鏈路處於死鎖狀態,因爲如果鏈路中存在問題的話,可能會導致某些Non-Posted的TLP無法得到返回的Completion,如果一致等待的話,則會造成死鎖。解決方式是,Root在等待超過一定的時長後,仍然無法接收到返回的Completion,且發現有PME消息的存在,則開始處理PME消息。

實現PME機制還有一個前提:相關PCIe設備能夠在非D0狀態下處理PME消息,且收發PME消息時,鏈路已經被喚醒,且進入了L0狀態。此時,PME機制的實現流程如下:

    1、當前PCIe設備將PME消息發送至其上一級端口(Upstream Port);

    2、該PME消息通過模糊尋址的方式,通過Switch(如果有的話),最後達到Root;

    3、Root接收到了PME消息後,將其內容轉發給PM控制器(Power Management Controller);

    4、該控制器通知PM軟件,產生一箇中斷告知系統。軟件利用PME消息中的Requester ID來發起配置空間讀寫操作,並使得對應的PCIe設備返回至D0狀態(或者其他狀態)。在這個過程中,PCIe驅動可能需要暫時備份該設備的PCIe配置空間的寄存器值;

    5、軟件恢復該PCIe設備的相關信息(配置空間寄存器等)。

前面說到,PME消息是一種TLP,其需要鏈路(Link)處於L0狀態,才能正常收發。如果鏈路處於非L0狀態,則需要通過其他的方式先來喚醒鏈路。PCIe Spec定義了兩種方式:

    ※ Beacon,一種低速的信號(前面的文章介紹過),該信號只需要AUX電源供電即可;

    ※ WAKE#,一種邊帶信號(低電平有效),該信號同樣只需要AUX電源供電即可。

注:實現PME機制,還需要保證設備控制寄存器(Device Control Register)中的Aux Power PM Enable位被使能,如下圖所示:

image.png

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