l1ss
每个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.