👉个人主页:highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
参考书籍:《PCI.EXPRESS系统体系结构标准教材 Mindshare》
PCIe总线的电源管理包含ASPM和软件电源管理两方面内容。所谓ASPM是指PCIe链路在没有系统软件参与的情况下,由PCIe链路自发进行的电源管理方式。而软件电源管理指PCI PM机制,PCIe总线的软件电源管理与PCI总线兼容。本章节讲述ASPM,下章节再讲PCI-PM。
ASPM全称为Active State Power Management for the Link,是一个基于硬件的,自发的链路功耗状态管理单元,软件不能控制具体的过程只能enable/disable。讲LTSSM时我们提到了状态机中有几个和电源管理相关的状态,这里再详细列举一下:
L0状态:PCIe设备的正常工作状态。
L0s状态:PCIe设备处于低功耗状态。系统软件不能控制L0状态和L0s状态间的迁
移过程,这两个状态的迁移只能由ASPM控制。
L1状态:PCIe设备使用的功耗低于处于L0s状态时的功耗。支持两种方式进入PCI-PM,ASPM。L1子状态可以关闭参考时钟、Tx common mode电路,Rx electric idle detect电路更加省电。
L2/L3 Ready状态:PCI设备进入L2或者L3状态之前使用的过渡状态。
L2状态:仅支持PCI-PM方式进入,关闭参考时钟、关闭PLL、关闭Main Power, 但是需要保留Aux Power;。在PCIe总线中L1和L2状态是可选的。
L3状态:该状态也被称为“Link off”状态,此时PCIe设备使用的所有电源被关闭。仅支持PCI-PM方式。
LDn状态:该状态是一个“伪”状态,PCIe链路处于L2、L3状态时,需要通过LDn状态之后才能进入L0状态。该状态由LTSSM状态机的Detect、Polling和Configuration等状态组成。
各状态间的迁移如下图:
在PCIe设备中,Link Capabilities寄存器的ASPM Support字段表示当前PCIe设备可以支持的链路状态,该字段只读。而Link Control寄存器的ASPM Control字段为可读写的,PCIe设备根据ASPM Support字段判断当前PCIe链路是否支持L0s和L1状态,还是同时支持这两种状态,并设置ASPM Control字段。如下从PCIE 4.0规范的截图,大家可以到规范里具体查询:
前面讲LTSSM时提到过几种电源管理状态之间的转换,总结起来就几个原则:
1、如果PCIe设备发现链路“空闲”时,可以硬件自主从L0进入L0s状态。这里的“空闲”指的是没有要发送的TLP和DLLP。注意发送逻辑和接收逻辑可以一个处于L0,一个处于L0s,不要求同步转换状态。例如当一个EP进行DMA写操作时,其发送逻辑TX一直被使用,因此处于L0状态,而接收逻辑RX可能长时间没有被使用,从而可以暂时处于L0s状态,以降低功耗。
2、PCIe设备可以通过上层软件,将链路状态从L0状态迁移到L1或者L2状态。当PCIe设备进入D1~D3状态时,其上游链路将进入L1状态;而进入D3cold状态时,其上游链路将进入L2状态。D1~D3和D3cold状态的详细说明后面讲PCIE的软件电源管理时会讲。而PCIe链路的两端设备需要同时进入L1或者L2状态。
3、从L1恢复到L0时,是从L1先到recovery,再到配置,再到L0,而从L2恢复到L0,需要重新走一遍检测、轮询、配置流程,所以L2恢复到L0时间更长。L2状态可以通过Beacon(由AUX电源所驱动的一种信令技术,由一组通过D+和D-信号生成的脉冲信号组成。这些脉冲信号宽度的最小值为2ns,最大值为16us)机制唤醒。有同学有疑问了,不是用PME进行唤醒吗?这里要注意,要使用PME报文,必须要先将链路恢复到可以传输报文的L0状态,所以在L2状态就不能用这种方式了,只能通过带内硬件信标或者带外的WAKE信号进行唤醒。