L1 ASPM默认是disabled。
Upstream Port启动ASPM L1 entry流程。
一种情况是当US port的RX和TX都处在L0s状态,并超过一定时间,US Port将会开始进入L1。
还有一种情况是,当不支持L0s时,US Port在L0并处于IDLE状态超过一定时间后,会开始进入L1。
有三种DLLP用于ASPM L1 Entry的协商过程:
PM_Active_State_Request_L1
PM_Request_Ack
PM_Active_State_Nak
下游设备开启与上游设备的L1 entry negotiation.
DS Port只有当以下条件满足了,才会接受L1 entry请求:
DS Port支持ASPM L1,并且已enabled;
没有TLP要发送;
没有Ack或Nak需要发送。
注意Software只有在上游设备enable ASPM L1的前提下才会enable下游设备的ASPM L1。
ASPM L1 negotiation规则:
1. 下游设备在收集到发送最大的FC包所需的最少credit之前,不能开始ASPM L1entry。
2. 在准备进入low power状态后,下游设备必须中止将任何包(包括completion)从Transaction层转移至Data Link层。
如果在进入L1的过程中,下游设备有Transaction层有TLP需要发送,下游设备首先得先进入L1,然后再进行从L1退出到L0的操作。
3. 下游设备必须等到上个TLP的Ack,如果有需要还得从retry buffer重新发送这个TLP。
4. 然后,下游设备通过发送PM_Active_State_Request_L1 DLLP来开始ASPM L1协商。
下游设备持续不断地发送PM_Active_State_Request_L1 DLLP,直到收到上游设备的回复,相邻DLLP之间有不超过4个symbol时间的idle(对于128B130B是16个symbol time)。
在发送PM_Active_State_Request_L1之间,下游设备也可以按协议要求发送其他的DLLP或者SKP OS,并且不受上面所提到的idle time的限制。
在等待上游设备回复的过程中,下游设备不能发送TLP包,但仍可以接收上游设备的TLP和DLLP,对于接收到的TLP,先储存起来,等到以后再返回response。
下游设备可以响应收到的DLLP,包括FC update DLLP。
5. 上游设备必须及时响应进入L1的请求,要么接受,要么拒绝。
Rejection L1 request的原则:
1. 上游端口应该尽快通过发送PM_Active_State_Nak给下游设备来拒绝L1 Request。一旦此Nak发出之后,上游设备允许发送任何TLP和DLLP。
2. 如果L1 Request被拒绝,一般建议下游设备及时将其发送端切换至L0s状态,如果条件满足的话。
3. 在收到L1 Request Rejectin之后,下游端口需要进入和退出L0s,或者等待10us,才能再次进行L1 request,这是为了避免当两次L1 Request离得太紧而产生混乱。所以上游端口也会通过时间来判断收到的L1 Request是否是新的request。
接受L1 request的规则:
1. 如果上游设备已准备好来接受L1请求,它必须从Transaction Layer就停止发送TLP。
2. 如果之前已发送了TLP,则上游设备必须等待ACK,如果满足了重发需求,则需要重发TLP。
3. 如果所有的TLP都已经收到了ACK,上游设备则发送PM_Request_Ack给下游,上游重复发送PM_Request_Ack给下游,相邻DLLP之间有不超过4个symbol时间的idle(对于128B130B是16个symbol time),期间仍可按照Clock compensation规则来发送SKP OS,SKP不需要遵循idle的时间限制。
4. 上游持续发送PM_Request_Ack DLLP,直到检测到它的接收端已进入Electrical Idle状态。
5. 上游在发送了PM_Request_Ack之后,如果需要发送TLP,必须得先完成L1 entry过程,然后再发起退出L1的请求,注意,即使没有足够的Flow Control Credit来发送TLP,上游设备也得先退出L1。
6. 下游收到PM_Request_Ack之后,停止发送PM_Active_State_Request_L1,并取消DLLP和TLP的发送,使发送端进入Electrical Idle状态。
7. 上游在检测到自己的接收端进入Electrical Idle之后,停止发送PM_Request_Ack,并取消DLLP/TLP的发送,使发送端进入Electrical Idle状态。
8. 需要注意的是Transactin Layer的TLP Completion Timeout机制并不受L1状态的影响,它仍将继续计数。Flow Control Update计数器在L1状态会被frozen,以防止timer expiration会导致Link回到L0。