5.3 PCI_PM L1

本文详细解析了PCIE设备如何从D状态转换至L1状态的全过程,包括软件配置、下游设备响应及物理链接状态变化等关键步骤,为理解PCIE设备的低功耗模式提供深入洞察。

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

PCIE设备的Power状态有D0,D1,D2,D3hot, D3cold.

在D0,D1,D2,D3hot状态,设备收到PME_Turn_Off message之后,必须返回PME_TO_Ack。

在任何D状态,下游设备在执行完PME_Turn_Off/PME_TO_Ack之后,必须通过PM_Enter_L23 DLLP来请求进入L2或L3.

如果下游设备被设置成D1/D2/D3hot,它的US Port必须切换link状态至L1。

进入L1的过程:

1. PM software通过发送Configuration Write TLP写下游设备的PMCSR寄存器,将下游设备设置成D1(D2或D3hot也可以);

2. 下游设备返回CFG TLP的completion;

3. 下游设备等待足够发送最大的FC DLLP的credit,并停止Transaction Layer层的TLP调度;

4. 下游设备等待上游发来针对completion和所有之前已发送的TLP的acknowledgement,还有可能需要重新发送TLP;

5. 如果所有的TLP都已被acknowledge了,下游设备开始不停地发送PM_Enter_L1 DLLP,中间的间隔不超过4个(8b10b)或16个(128b/130b)symbol 的idle时间。

    在期间如果需要发送SKP,SKP不计入IDLE的时间限制。下游设备持续发送PM_Enter_L1直到它收到了PM_Request_Ack。

    下游设备能继续接收上游发来的TLP和DLLP,并能返回DLLP,包括FC update DLLP和ACK/NAK DLLP。如果有TLP要发送的话,将会使下游设备进入L1之后立马开始L1的退出过程。

6. 上游设备接收到PM_Enter_L1 DLLP之后,中止所有新TLP的发送;

7. 上游设备必须等到之前发送的TLP的acknowledge,如果需要的话,还会重发retry buffer里面的TLP;

8. 一旦所有的TLP都已被acknowledge,上游设备必须发送PM_Request_Ack给下游,两个DLLP的间隔不超过4个(8b10b)或16个(128b/130b)symbol 的idle时间。

    在期间如果需要发送SKP,SKP不计入IDLE的时间限制。上游设备持续发送PM_Request_Ack直到它发现接收端已进入Electrical Idle状态。

9. 一旦下游设备获得PM_Request_Ack,它马上关闭DLLP的发送,并使physical link进入Electrical Idle,以表明自己进入了L1状态。

10. 当上游设备检测到Electrical Idle之后,就停止发送PM_Request_Ack,关闭DLLP的发送,并使发送端进入Electrical Idle状态,来完成L1的进入。

 

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

<think>好的,用户想了解PCIe PM Message TLP的规范和实现细节。首先,我需要回顾一下PCIe的基础知识,特别是电源管理相关的部分。 PCIe的电源管理涉及到多个层次,包括事务层、数据链路层和物理层。PM Message TLP属于事务层的数据包类型。根据PCIe规范,电源管理消息通过TLP(事务层数据包)进行传输,具体来说,这类消息属于Message TLP的一种。 接下来,PM Message的类型可能有几种,比如PM_Active_State_Nak或者PM_PME等。这些消息用于通知设备进入或退出低功耗状态,或者处理电源管理事件。需要确认具体的消息格式,比如头部的字段,例如Type字段、Length字段等。例如,PM Message TLP的头部可能包含特定的编码来表示电源管理消息类型。 实现细节方面,硬件设备需要能够生成和解析这些TLP。在驱动程序层面,操作系统或固件会发送这些消息来管理设备的电源状态。例如,当系统进入睡眠状态时,PM Message会被发送到相关设备,要求其进入低功耗模式。设备的控制器需要响应这些消息,调整电源状态,并可能发送确认或错误响应。 另外,用户提到的引用中有关于STP Token的内容,虽然主要与TLP长度字段有关,但可能涉及到数据包格式的验证。例如,某些特定格式的TLP可能需要被正确处理,避免错误解析为其他类型的包,如EDS Token。这可能与错误处理机制相关,确保电源管理消息的正确传输和解析。 还需要考虑不同版本的PCIe规范之间的差异,比如PCIe 3.0、4.0或5.0,可能在电源管理消息的实现上有细微差别。比如,随着版本升级,可能增加了新的电源状态或优化了消息传输机制。 此外,实际实现中可能涉及到的配置寄存器和电源管理控制状态机。例如,设备的Power Management Capability结构,其中包含PMCSR(电源管理控制与状态寄存器),驱动程序通过配置这些寄存器来管理电源状态,而PM Message TLP可能是这些配置变更的触发或结果。 最后,可能需要参考具体的规范文档,如PCI Express Base Specification中的Chapter 5(事务层描述)和Chapter 14(电源管理),以及相关的实现案例或厂商文档,如Intel或AMD的技术资料,来获取更详细的实现细节。</think>### PCIe Power Management Message TLP 详解 #### 1. **基本概念** PCIe电源管理消息(Power Management Message, PM Message)通过事务层数据包(Transaction Layer Packet, TLP)实现设备间的电源状态协调。PM Message TLP属于$Type=0x14$的Message类别,用于通知设备进入或退出低功耗状态(如L0s/L1/L2/L3 Ready)[^2]。 #### 2. **TLP格式** PM Message TLP的通用格式如下: $$ \begin{aligned} &\text{Header (4DW)} \\ &\text{Data Payload (可选)} \end{aligned} $$ - **Header字段**: - **Type[7:0]**:固定为$0x14$,表示电源管理消息。 - **Subtype[3:0]**:定义具体操作类型,如: - $0x0001$:PM_Active_State_Nak(拒绝进入低功耗状态) - $0x0002$:PM_PME(电源管理事件通知) - **Power State[2:0]**:目标电源状态编码(如L0s=0x1, L1=0x2)。 #### 3. **实现细节** - **硬件支持**:设备需实现PCIe电源管理能力结构(Power Management Capability Structure),包含PMCSR(Power Management Control/Status Register)[^2]。 - **驱动交互**:操作系统通过写入PMCSR的`PowerState`字段触发PM Message TLP发送。 - **状态转换**:设备收到PM Message后需在$T_{PHOLD}$时间内响应状态切换,否则触发超时错误[^3]。 #### 4. **典型应用场景** - **链路节能**:当链路空闲时,RC(Root Complex)发送PM_Enter_L1消息要求设备进入L1状态。 - **唤醒机制**:设备通过PM_PME消息通知系统需要唤醒(如外设检测到输入事件)。 ```plaintext 示例PM Message TLP发送流程: 1. 驱动设置PMCSR.PowerState = L1 2. 设备控制器生成PM_Enter_L1 TLP 3. 目标设备确认后返回Completion TLP 4. 双方链路进入L1状态 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值