PCIe电源管理系统

PCIe电源管理系统

PCIe总线的电源管理包含了ASPM和软件电源管理两方面的内容,所谓ASPM是指PCIe路在没有系统软件参与的情况下,由PCIe链路自发进行的电源管理方式;而软件电源管理是指PCI-PM机制(与PCI总线兼容)。PCIe总线为PCIe设备提供了几种低功耗模式,对于一个处理器系统来说,PCIe设备的低功耗模式(D0D1D2D3)应该与处理器本身的低功耗模式协调工作(举个栗子:x86支持非常丰富的低功耗状态设置:G0S0)、G1S1/S2/S3/S4)、G2S5)、G3),才能最优化整个处理器系统的功耗。

PCIe的电源管理(PM)定义了4个主要的应用:

1. PCI‐Compatible PM.PCIe电源管理在软硬件上与PCI - PMACPI规格兼容;这要求所有功能,包括PCI电源管理(PCI-PM)寄存器,允许软件使用配置请求来控制PM状态;

——在PCIe 2.1规范修订版中对PM功能进行了修改,新增了动态功率分配(DPA)寄存器,为D0状态添加了几个子状态(32个),从而为软件提供了更细颗粒度的PM机制。

2. Native PCIe Extensions:定义了链路基于硬件的(非软件参与)有源状态电源管理(ASPMActive State Power Management),以及系统唤醒机制、电源管理事件(PME)报告的消息事务,以及提供计算并上报从低功耗到正常状态延迟时间的方法。

3. Bandwidth ManagementPCIe 2.1规范新增了硬件自动更改链路宽度(Link Width)和链路数据速率(Link Date Rate)或同时更改两者的能力,以降低PCIe设备功耗;该功能允许PCIe设备根据实际应用需求,来提供高链路性能或降低性能以保持节省功耗;

——带宽管理虽然是电源管理的范围,但它是在LTSSM(链路训练)中实现的,忘记的胖友请参考《链路训练》相关章节。

4. Event Timing OptimizationPCIe总线上的外设直接启动总线主事件,会导致其它PCIe系统组件一直工作在高功耗的状态,从而导致更高的功耗(相比于正常功耗)。在PCIe 2.1规范中增加了两个新机制来解决:

1,优化的缓冲区刷新和填充(OBFFOptimized Buffer Flush and Fill):通知外设当前系统的电源状态;

2,报告延迟容忍(LTR Latency Tolerance Reporting):外设上报它们当前最大可容忍的服务延迟。

二,PCI-PM

1PM寄存器设置

PCI‐PM规范定义了Power Management Capability配置寄存器,这些寄存器对于PCI是可选的,但对于PCIe是必需的,而且寄存器位于PCI兼容的配置空间中:Capability ID01h(如下图所示);软件可以通过如下步骤来找到该配置寄存器并进行操作。

1. 如果该功能的Configuration Status 寄存器Bit 4被置位,则说明该功能配置头中的Capability指针是有效的;然后读取Pointer to Next Capabilities寄存器会得到指向的另外一个功能Capability的偏移量;

——如在《PCIe总线基础》中所述,PCIe设备提供了0x100~0xFFF段扩展功能的配置空间,就像一串糖葫芦一样,这串支持不同功能的Capability结构根据指针顺序定位,从而找到所需的Capability

2. 如果该偏移量处的Dword的最低有效字节的Capability ID 01h(如上图所示),那么就是PM寄存器集了,在Capability ID字节后的字节是指向下一个Capability的指针(指向下一个Capability配置空间的偏移量);

——“Next Capability”只要是个非零值,就表示是一个有效的指针,而00h的值表示链表的结束。

2PM状态

每个PCIe设备必须支持D0状态(全开启)和D3状态(全关闭),而D1D2是可选的。接下来将简要说明各个可能的PM状态。

2.1 D0状态

D0状态(规范强制要求支持):在该状态下设备完全运行,没有任何的节能措施。所有PCIe功能都必须支持D0状态,又分为两种子状态:D0-UninitializedD0-Active。设备在处于该状态时,通过ASPM硬件控制改变链路功率。

1. D0-Uninitialized(未初始化):正常复位或软件控制PCIe设备从D3-hot状态迁移至D0状态时,进入D0-Uninitialized;此时PCIe设备相关寄存器恢复到默认状态,在该状态下的特性如下:

1,只响应配置相关事务的处理;

2,命令寄存器使能位全部恢复到了默认状态,这意味着它不能发起MemoryI/O读写事务。

2. D0-Active:一旦PCIe相关配置寄存器被软件配置和启用,它将处于D0激活状态,并完全运行。

——这里需要注意:D状态是PCIe设备的电源状态,而L状态是PCIe链路的电源状态,两者是有差别的;所有L状态都是在LTSSM状态机中,是链路训练中的一个状态

PCIe 2.1版本规范中新加另一个功能:动态功耗分配(DPA Dynamic Power Allocation),DPAD0定义了32个的子状态,这是为了方便设备的驱动程序、操作系统和执行应用程序之间关于电源管理的协商。该模式的一个优点是:PCIe设备在技术上来说保持在D0状态,因此可以在PCIe设备性能减弱的情况下继续工作,而不是像D1状态(或更低的功耗状态)那样PCIe链路被直接断开。

DPA寄存器仅在D0状态时适用,而在D1‐D3状态时不适用;DPA最多可以定义32个子态:编号从031,初始默认值是0(表示工作在最大功耗);软件可以随意对D0的各子状态进行迁移,甚至不需要等到前一个迁移完成后才请求更改为另一个,因此当完成一个子状态的更改时,软件必须检查目前的配置,如果与设置的子状态不匹配,它必须重新更改为配置的值。支持DPA的寄存器如下图所示。

DPA寄存器组成如下图所示:

1. Substate_Max:表示该Capability结构中描述了多少个子状态(这些数字必须连续地从0增加到该值)。

2. Transition Latency Vaule0/1Xlcy0/1):每个子状态将通过延迟指示器寄存器(Transition Latency Register)与其它子状态相关联,每个可能的子状态都包含一个Bit10(指示使用Transition Latency Value 10);

1Transition Latency Value给定了从任何其他子状态迁移到该子状态所需的最大时间;

2,延迟乘以TlunitTransition Latency Unit),得到具体延迟时间(毫秒);

3,类似的,PASPower Allocation Scale)给出了每个子状态所使用功率的乘数(瓦)。

——DPA功率分配阵列(DPA Power Allocation Array)中的32位域描述用于该状态的功率,其中第一个位于偏移量010h,其余的在后续的Dwords中实现。

2.2 D1状态

PCIe设备进入轻度(Light)睡眠的状态,在进入该状态之前,软件必须确保所有Non-Posted的请求都已收到了Clp/ClpD报文,然后可以通过进入Polling状态,设置PCIe设备状态寄存器中的Transactions Pending位来实现;在PCIe设备的低功耗状态下,只能发起PME消息请求(其它业务被暂停);

D1状态下的其它特性如下:

1. PCIe设备进入D1状态时,强制链路进入L1状态;

2. 在该状态下,可以进行配置和消息请求,不支持处理除此之外的所有其它请求;

3. 如果输入的请求(配置或消息)导致了一个错误,那么在该状态下会发送一个错误消息;如果发生其它类型的错误(例如:Completion timeout),则需等到设备返回到D0状态后,才会发送错误消息;

4. PCIe设备可能会重新激活链路并发送PME消息,通知软件遇到了需要恢复电源的事件;

5. PCIe设备必须返回到D0 Active状态才能恢复完全运行。

如上图,PCIe设备在D1状态下:PCIe链路状态、电源状态以及允许的操作。

2.3 D2状态

D2PCIe设备进入深度(Deep)睡眠的状态,提供比D1状态功耗更低,但高于D3Hot状态的功耗;在进入该状态之前软件必须确保所有Non-Posted的请求都收到了Clp/ClpD报文,然后可以通过进入Polling状态,设置PCIe设备状态寄存器中的Transactions Pending位来实现;在D1状态下,只能发起PME消息请求(其它业务被暂停)。

D2状态的其他特性如下:

1. PCIe设备进入到D2状态时,强制链路进入L1状态;

2. 在该状态下,可以进行配置和消息请求,不支持处理除此之外的所有其它请求;

3. 如果输入的请求(配置或消息)导致了一个错误,那么在该状态下会发送一个错误消息;如果发生其它类型的错误(例如:Completion timeout),则需等到设备返回到D0状态后,才会发送错误消息;

4. PCIe设备可能会重新激活链路并发送PME消息,通知软件遇到了需要恢复电源的事件;

5. PCIe设备必须返回到D0 Active状态才能恢复完全运行。

2.4 D3状态

所有PCIe设备必须支持D3状态,由D3-hotD3-cold两个子状态组成,该状态时PCIe设备的功耗最小;当软件将该电源状态写入设备时,会进入D3-hot状态,此时模块供电电源正常,而当PCIe设备的Vcc电源被移除时,PCIe设备无论处于何种状态,都会进入D3-cold状态:

1. 如果设备有备用电源(Vaux),那么PCIe设备进入L2状态;

2. 如果设备没有备用电源(Vaux),则PCIe设备进入L3状态。

PCIe设备处于D3-hot状态与处于D1/D2状态时的功能类似,只是PCIe设备只能从D3-hot状态返回D0-Uninitialized状态,而不能直接返回D0 Active状态;而从D3-hot状态返回D0-Uninitialized状态的过程相当于热复位。有些PCIe设备在处于D3-cold状态时仍然可以发出PME消息,此时该PCIe设备负责发送PME消息的功能模块必须使用Vaux电源而非Vcc电源。

2.5 D-State的状态迁移

如下图所示为PCIePM状态迁移,大多数D状态的迁移是系统软件通过修改PMCSR寄存器的Power State字段实现的,但是有些状态迁移采用了其它方式:

1. 使能Command寄存器的命令位,可使设备从D0-Uninitialized状态迁移到D0-Active装态;

2. PCIe设备的Vcc被移除时,D3-hot状态将迁移到D3-cold状态;

3. PCIe被唤醒时,Vcc重新上电之后,PCIe设备将从D3-cold状态迁移到D0-Uninitialized状态。

同时PCIe设备进行D状态迁移时,PCIe链路的L状态也可能随之变化。具体对应关系如下图所示。

对于PCIe链路的不同L状态,PCIe端口模块的工作状态如下图所示。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCIe(Peripheral Component Interconnect Express)是一种高速串行接口标准,用于在计算机系统中连接外部设备,如显示卡、网卡和硬盘控制器等。PCIe链接状态电源管理是指对PCIe设备在不同的状态下进行电源控制,以实现有效的能源管理。 PCIe链接状态电源管理有多个级别,包括L0、L0s、L1和L2等。这些级别代表了设备的不同状态和功耗水平。 在L0状态下,设备处于活动状态,可以进行数据传输。此时设备的功耗是最高的。 在L0s状态下,设备处于一种较低功耗的操作状态,但仍可以迅速恢复到L0状态进行数据传输。这种状态能够在设备在非活动时间段中降低功耗。 在L1状态下,设备进入了更低功耗的状态,此时设备内部的传输线路和电路大部分关闭,但仍保持一些关键功能以保证快速唤醒。 在L2状态下,设备进入了最低功耗状态,设备内的传输线路和电路基本关闭,只有一些非常基本的唤醒功能保持开启。 通过切换这些不同的链接状态,PCIe设备可以根据不同的应用场景和需求来实现有效的能源管理。例如,在设备不需要进行数据传输时,可以将设备置于L1或L2状态,从而大幅减少功耗。当需要进行数据传输时,设备可以迅速从低功耗状态恢复到活动状态。 总之,PCIe链接状态电源管理是一种通过切换设备的链接状态来实现能源管理和节能的技术。它能够根据需求动态调整设备的功耗,提高系统的能效和可持续性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值