PCIe电源管理

Peter 于 2020-12-19 发布

电源管理其实指的就是在不同的使用场景下尽量的降低功耗。电源管理是处理器系统实现的热点,尤其是在现在移动和手持设备越来越流行的今天,更低的功耗就意味着更长的续航时间,所以电源管理是非常重要的一个功能。PCIe的电源管理包含ASPM(主动状态电源管理Active State Power Management)和基于软件控制的电源管理机制。

ASPM电源管理

ASPM是硬件自主实现的电源管理机制按照PCIe Spec的规定只有PCIe设备处于D0状态才可以应用ASPM机制。

aspms

L0状态

L0是PCIe设备的正常工作状态。此时的PCIe设备可以正常的收发TLP,DLLP,PLP。从之前的LTSSM状态机我们可以看出来,从L0状态可以切换到Recovery,L0s和L1/L2/L3的状态。ASPM只关注L0,L0s和L1;L2和L3我们就不做详细的介绍了。

lsstm

L0s状态

PCIe设备必须支持L0s状态。L0s是一个低功耗状态,进出完全有硬件控制不需要软件干预。L0s的状态转化由两部分组成,接收状态机和发送状态机,他们有不同的子状态。 发送状态机如下图所示,当PCIe设备处于L0状态发现链路为临时空闲状态时,它会进入Tx_L0s.Entry状态。当处于该状态时,发送逻辑TX会向对端发送1,2个EIOS序列,之后进入Electrical Idle的状态。再经过20ns延时后,发送逻辑TX进入 Tx_L0s.Idle状态。这时如果有数据报文需要发送,发送逻辑将退出Tx_L0s.Idle,进入Tx_L0s.FTS状态。然后向对方发送N_FTS个FTS序列和1个SKP序列然后进入L0状态。

txs

接收状态机如下图所示,当接收逻辑处于L0状态时,若果收到1个EIOS序列后,它会进入Rx_L0s.Entry状态然后进过一段时间的延时会进入Rx_L0s.Idle状态。在Rx_L0s.Idle状态中接收逻辑会持续的监测接收链路一旦发现发送逻辑退出‘Electrical Idle’状态时,它会进入Rx_L0s.FTS状态。而后它会收到N_FTS个FTS序列以及SKP序列并恢复到L0或者是Recovery状态(FTS数量不足)。

rxs

L1状态

L1是比L0s功耗更低的状态,但是它恢复到L0状态的时间会更长。它对于ASPM是可选的。PCIe进出该状态可以完全由硬件控制不需要软件的干预。但是软件也可以通过设置某些寄存器,使PCIe链路两端的设备同时进入L1状态。只有下游设备可以主动进入L1状态,上游设备必须与下游设备协商以后才能进入L1状态。如下图所示,PCIe设备从L0状态首先进入L1.Entry状态。在L1.Entry状态时,发送逻辑处于Electrical Idle状态,当停留时间满20ns后,就会进入L1.Idle状态。接下来接收逻辑会持续监测链路,若果发现对端发送逻辑退出Electrical Idle状态时,设备就会从L1.Idle状态迁移到Recovery状态。

rxs

ASPM虽然是硬件控制的但是如果要在PCIe设备中应用该功能我们还需要在Link Control Register中打开该功能。

lnkctl

Link Capabilities Register bit10-11反映出该设备所支持的ASPM的状态(L0s, L1)。

lnkCap

PCI-PM(软件控制的电源管理机制)

PCIe总线使用与PCI兼容PCI-PM管理机制。PCIe设备的扩展配置空间中定义了Power Management Capabilities结构,其中有一系列的寄存器可以用来使设备进入不同的工作状态。写入Power State会进行D-State的切换(00表示D0 01表示D1 02表示D2 03表示D3)。

pmcsr

D0是正常工作状态,功耗最高。D1、D2、D3都是低功耗状态。D1的休眠等级最低,功耗相对较高。D3休眠等级最高,功耗相对较低。其中D0和D3是必须支持的,D1和D2是可选的。

dstate

D-State的状态转换关系如下图所示,其中D0分为D0 Uinitializated和D0 Active两个子状态组成,D3由D3hot和D3cold两个子状态组成。当PCIe设备处于D0 Uinitializated状态时(系统复位是,Command寄存器为0),该设备还没有被使能只能接收配置读写请求TLP,不能主动发出其它TLP。当软件写Command寄存器的I/O space 位,Memory Space位,Bus Master位等使能位之后,状态会迁移到D0 Active的状态。D1/D2是休眠状态,设备只能接收PME消息,不能主动发送其它TLP;另外除了配置请求TLP以外,不能接收其他TLP。设备进入D1/D2时链路处在L1状态。设备可以从D1/D2直接回到D0 Active状态。D3 hot和D1/D2类似,但是它只能返回到D0 Uinitializated状态。当Vcc电源被移除,设备就会进入D3 cold的状态。

dtran

Refer:

  1. 《PCI Express Technology》

  2. 《PCI Express 体系结构导读》