透過協議看PCIe ASPM L1.2


背景:

ASPM--ACTIVE STATE POWER MANAGEMENT

         ASPM是硬件自主的,軟件無法控制且也無視其狀態的變化,軟件只能通過配置寄存器來使能或禁止ASMP。

PCI-PM--PCI Power Management

        是PCIe設備之間通過功耗管理事件(Power Management Event,PME)來進行相互通信,並控制功耗狀態的切換的協議。其要求PCIe設備的每個Function都包含PCI Power Management Capability寄存器。軟件可以通過配置請求(Configuration Request)的方式來切換PCIe設備的某個Function的PM狀態。

L1.2--Pcie規范還定義了L1低功耗子狀態

        L1是PCIe 鏈路的一種低功耗狀態, L1.2是它的子狀態也是目前功耗最低的狀態,當在進入L1.2鏈路狀態只保留CLKReq#信號,大部分模塊處於掉電狀態。

PCI-PM和ASPM都可以承載在L1.2之上。

NO SNOOP--一般情況下,內存數據是被CACHED的,但CACHE操作,費時有的時候,軟件已知,某些內存是肯定不被CACHED的這樣,就不需要SNOOP了。
注:這里的SNOOP,就是針對CACHE的操作
 

LTR--Latency Tolerance Reporting

       The Latency Tolerance Reporting (LTR) mechanism enables Endpoints to report their service latency requirements for Memory Reads and Writes to the Root Complex, so that power management policies for central platform resources (such as main memory, RC internal  interconnects, and snoop resources) can be implemented to consider Endpoint service requirements.

       說人話就是控制端到端packet 延遲時間。(看起來似乎不太重要, 但是L1.2 必須要支持這個feature)

從協議分析L1.2--初始化配置

    1. 配置T_Power_Value

   如圖L1 PM substates control2 bit 1~0表示T_Power_On scale, bit 7~3表示T_Power_On value, 這里T_Power_On scale和T_Power_On value共同決定L1.2 <-> L1.0之間的時間。

如圖,這里配置host配置為 0x31,即T_Power_On scale = 10us,T_Power_On value = 6,那么T_Power_on為600us。(Latency Value and Scale:這兩個參數配合使用,可以將 Latency 配置為 1 納秒 ~ 34 秒。如果將這兩個值都設置為0,那就意味着任何延遲都會對設備產生影響,因此系統需要在第一時間響應該設備提出的請求)

2. 配置PCI-PM / ASPM enable , 配置LTR threshold:

       使用PCI-PM / ASPM 之前需要使能。如圖:

   如圖配置PCI-PM enable,ASPM enable。

      如圖配置LTR_L1.2_THRESHOLD_Value = 0xA0, LTR_L1.2_THRESHOLD_Scale = 2,這里LTR_L1.2_THRESHOLD_Value 和LTR_L1.2_THRESHOLD_Scale共同決定LTR threshold時間。

3. 配置Link Control

     

    如圖控制Link Control bit 1~0, set L1 entry enable。

 

4. LTR enable

如圖控制device Control2 bit 10, enable LTR。

5. LTR latency 

如圖設置No-snoop Latency register / snoop Latency register 為0x1003.

 

6. PM Active req

    如圖,device發起PM request L1.2, host 回復ACK, PM握手成功。一PCIe End point在這個階段會處理好內部的IO,當內部Idle發起這個請求,並對大部門模塊掉電,只保留CLKReq#可以喚醒的Hardware模塊。

7. CLKReq# 拉高

     CLKReq#拉高是L1.2 進入的最一步,之的該信號保持。

8. CLKReq#拉低

    表示L1.2 退出請求, 該信號是host喚醒device的第一步,之的該信號保持, 之開始Link trianing。

9. 進入L0

   link training完成,進入L0, 並設置start data order set。

10. 收到報文

    如圖,可以看到喚醒device的是兩條Config  Read Packet。

 

11. PM L1 Request

   再處理完報文之,如果沒有新的TLP / DLLP, ASIC會再次進入L1.2.

 

   ASPM是一種Hardware主動進入的power management的協議,以上11步是ASPM整個流程,6~11步在PCIe ASPM L1.2 整個過程的循環執行。

            PCI-PM / ASPM博大進深,本文僅介紹ASPM L1.2的協議流程,該協議可以適用於大部分PCIe EP, 比如PCIe 顯卡, PCIe 網卡,PCIe存儲設備(NVMe SSD)等。

本文來自博客園,作者:ingram14,轉載請注明原文鏈接:https://www.cnblogs.com/ingram14/p/15778940.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM