L1 ASPM

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。

猜你喜欢

转载自www.cnblogs.com/lybinger/p/10310437.html