每個component必須上報它支持ASPM的程度,以及L0s和L1的退出latency(從L0s/L1到L0所需的時間)。endpoint必須報告它能承受的最差latency,例如因為L0s/L1到L0的轉換時延導致的內部FIFO 溢出(overrun)。 Power management軟件可以利用各component提供的信息來進行合適的aspm。
PM L1ss:
首先得enable PM L1.1或者PM L1.2,在進入L1之后,通過CLKREQ#來進入L1.1或L.2, CLKREQ#也用來退出L1ss。注意CLKREQ#是個open-drain三態雙向端口,當有一端將其拉低,則CLKREQ#為低。如果兩端都不drive CLKREQ#,則為高,表明可以關斷REFCLK。注意進入L1的請求是由upstream端口發起。
當link處在PCI-PM L1.0,且PCI_PM L1.2 enable位已被設置,如果CLKREQ#被拉高,則必須進入L1.2;
當link處在PCI-PM L1.0,且PCI_PM L1.1 enable位已被設置,如果CLKREQ#被拉高且PCI_PM L1.2沒被enable,則必須進入L1.1;
支持ASPM L1.2的端口必須支持Latency Tolerance Reporting (LTR)。
當link處在ASPM L1.0,且ASPM L1.2 enable位已被設置,當CLKREQ#被拉高后,如果下面兩個條件都滿足,就會進入ASPM L1.2:
1. 上報的snooped LTR值大於或等於LTR_L1.2_THRESHOLD中的value和scale確定的值,或者沒有snoop service latency的需求;
2. 上報的non-snooped LTR值大於或等於LTR_L1.2_THRESHOLD中的value和scale確定的值,或者沒有non-snoop service latency的需求。
當link處在ASPM L1.0,且ASPM L1.1 enable位已被設置,當CLKREQ#被拉高后,如果不滿足進入L1.2的條件,就會進入ASPM L1.1.
當進入L1.2的條件已經滿足,則:
1.upstream和downstream端口都必須監測CLKREQ#的邏輯狀態;
2. upstream端口在進入L1.0前不能拉高CLKREQ#;
3. 允許任何端口將CLKREQ#拉低來阻止link進入L1.2;
4. 當CLKREQ#被拉高,端口進入L1.2.Entry.
