L1 ASPM

本文详细解析了PCI Express (PCIe) 设备如何协商进入L1低功耗状态的过程。主要包括:默认情况下L1ASPM是禁用的,下游设备在满足特定条件下发起L1entry协商,上游设备基于自身状态决定接受或拒绝请求,以及双方如何通过DLLP进行交互以完成状态转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

 

 

转载于:https://www.cnblogs.com/lybinger/p/10310437.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值