PCIe总线的电源管理包含了ASPM和软件电源管理两方面的内容,所谓ASPM是指PCIe路在没有系统软件参与的情况下,由PCIe链路自发进行的电源管理方式;而软件电源管理是指PCI-PM机制(与PCI总线兼容)。
1. Link State Power Magenment
PCIE链路在没有系统软件参与的情况下,由PCIE链路自发进行的电源管理状态。设备只有处于D0状态时,才通过ASPM机制将设备链路置于降低的低功耗状态,以此达到减少系统功耗的目的。ASPM(Active State Power Management)包含L0s L1两种状态,系统软件无法控制L0 和L0s状态间的迁移过程,这两个状态的迁移只能由ASPM控制。
ASPM是一种基于硬件的自主功耗调节机制,即使设备Function处于"D0" State,它依然可以节省功耗。Link state 对于传统的pcie 软件是不可见的,但它可以通过ASPM 或者链路上组件的power magement D -state 获取。 PCI-PM devie state D-State (设备电源状态)可以控制link state power magenment(链路电源状态)控制。协议为链路电源管理分配了如下几个状态:
- L0: Active state,**在ASPM PCI-PM生效。
- L0s: low resume latency, energy saving "standby" state,对于ASPM是可选的。在此状态下所有的main power,compopnent reference clocks and components's PLL均是处于active的状态。
- L1:high latency, low power “standby" state。PCI -PM生效,对于ASPM是可选的。在此状态下所有的main power处于active的状态;若Clock Power Mangement 状态和 L1 PM状态被激活则 component reference clk 处于非active状态;内部PLL则处于关闭状态,这导致退出低功耗状态会有很大的延迟。在此阶段 TLP and DLLP是被禁止发送的。
当软件配置DSP的设备被配置为非D0状态,此时会强制链路进入L1状态;如果 ASPM机制请求进入L1并收到了回复的确认信号同样也会进入L1状态,退出L1则需要链路上的数据处于活跃状态。
通过设置L1 PM Substates Control 1 Register中的一个或多个bit开启L1 PM 子状态,此时的L1状态记作L1.0。在L0状态下退出L1.1 L1.2 (for PCI-PM)需要 CLKRFEQ=1, 该子状态会在PCI-PM ASPM中生效。
- L2/L3 Ready: 它是一个伪状态,它对应LTSSM中的L2状态,当通过软件配置系统的Function进入D3 ,系统也会进入L2/3 Ready该状态。当系统希望移除power和clk之前,会发送PME_Turn_Off_Message,设备接收到PME_Turn_Off_Message后返回的PME_TO_AckMessage表示本地已经准备好移除power。此后DSP设备向上游持续发送PM_Enter_L23DLLP,直至收到与之对应的 Ack DLLP或者电源已经被拔出,Link从L0进入L2/L3 Ready状态。main power移除后,如果Vaux 处于active状态则进入L2,否则进入L3
- L2:Auxliay-powered Link, deep-energy-saving state。在该状态下仅Vaux有效,它负责给wakeup logic, PME context, any "keep alive" 逻辑供电。
- L3: 没有任何power supply生效。
- LDn:transitional Link Down presudo-state prior to L0。该presudo-state与 LTSSM中的detect polling configuration disable loopback hot-reset相关联。
***注意这里的状态并不是跟LTSSM里的状态对应的,虽然是同名但是并不是一个状态。
2. PCI-PM Software Compatible Mechanisms
D-States(Device Power Management States) 它与某个Function 的PM状态。 PCI-compatible PM是一种在软件上硬件上都与PCI-PM兼容的模式,其要求PCIe设备每个Function都包含PCI Power Management Compability 寄存器。软件可以通过配置请求(Configuration Request) 方式来切换PCIe设备的某个Function的power managemetn的状态。
- D0 它是正常工作状态的function;在经过常规复位之后组件的所有Function均会进入D0_uninitialized 状态,在经历过过configuration后便会进入D0_active状态,它是PCIE设备的全工作状态。
- D1 它是可选的状态,在此状态组件功能只能发送PME Message TLP,只能接收Configureation Message 类型的TLP request。除此之外的TLP Request 和Completion均当作非法处理。
- D2 它是可选状态,当组件功能当前以及后续一段时间均不会被使用,则跳转到该状态并显著降低功耗。在此状态组件功能只能发送PME Message TLP,只能接收Configureation Message 类型的TLP request。除此之外的TLP Request 和Completion均当作非法处理。协议规定你软件配置设备 D2 --> D0的最小恢复时间为200us。
- D3 它是由一系列功耗管理策略组成,设备可以通过软件配置或者直接断开物理电源进入该状态。其包含两种D3_hot, D3_cold状态(如果main power 存在则处于D3_hot,否则处于D3_cold),D3_hot 可以被软件配置PMSCR寄存器进入D0状态,D3_cold需要先进入D0_uninitialized状态完成main power 并进行基础复位在进入D0。
D3_hot状态下只允许接收Configuration and Message requests TLP,其他的请求均被认为是非法的。D3_hot 可以被软件配置PMSCR Power State Field寄存器选择进入D0_active或者D0_uninitialized,这些前提是组件功能在供电还未移除情况下,必须能够回应Configuration Space access。如果在D3_hot向D0跳转时如果需要内部复位(热复位)则需要跳转到D0_uninitialized以进行一个完整的复位流程,完成后便进入D0_initialized。
当main power移除之后,便需要进入D3_cold状态,通过重新使能电源并产生一个Fundamental Reset开启一个新的上电顺序使得状态跳转到D0_uninitialized。支持wakeup功能的需要保存PMCSR寄存器。在次阶段Auxiliary power source需要被使用执行PME event侦测,Link 激活,保存PME context字段。
PCIE电源管理https://www.zhihu.com/tardis/bd/art/623500018?source_id=1001
硬件总线基础11:PCIe总线基础-电源管理(1)https://zhuanlan.zhihu.com/p/637591643