棋子 · 3 天前

PCIe学习(七)

PCIe学习(一)
PCIe学习(二)
PCIe学习(三)
PCIe学习(四)
PCIe学习(五)
PCIe学习(六)

5 电源管理

PCIe的电源管理是一个系统性的话题。我们今天来一探究竟。

5.1 链路状态电源管理

首先就要先来提一提ACPI (Advanced Configuration and Power Interface)。ACPI旨在为操作系统和应用程序提供所有芯片电源管理的接口。

ACPI定义了系统电源管理状态:

  • G0/S0:工作状态。系统处于火力全开的工作状态。
  • G1:睡眠状态。此状态下系统功耗较小,返回工作状态的时间取决于下面几个子状态

    • S1:高速缓存被清空,CPU挂起
    • S2:与S1类似,但是CPU电源被关断
    • S3:也称为“挂起到RAM(Suspend to RAM)”或者“待机(Standby)”,系统上下文被保存到内存
    • S4:也称为“挂起到硬盘(Suspend to Disk)”或者“休眠(Hibernate)”,系统上下文被保存到硬盘
  • G2/S5:软件关机。此状态下系统功耗最小,系统当前状态信息不被保留,需要完全重新启动才能返回工作状态。绝大部分硬件设备处于断电状态,少数硬件有一些电源可用于唤醒,例如按下系统上的电源按钮。
  • G3:机械关机。系统的电源被完全切断。

image.png

ACPI也定了设备电源状态:

  • D0:设备的全部供电打开,处于完全运行的状态。
  • D1:低功耗状态(比D0低),设备上下文可能会丢失,也可能不会丢失。
  • D2:比D1更低的功耗状态,但会导致更长的恢复延迟,并可能导致设备丢失上下文。
  • D3:设备已做好断电准备,设备的上下文都可能丢失。恢复时间将比D2更长,但在这种状态下可以正常断开设备电源。

其中D1和D2不是强制性的,设备可以根据具体情况选择是否实现这两个状态。

image.png

再来看看PCIe协议做了哪些定义。

首先,PCIe协议中定义了链路电源管理状态:

  • L0:所有PCIe事务和操作都启用
  • L0s:Standby模式,恢复延迟低,功耗低
  • L1:可以分为几个子状态L1.0,L1.1和L1.2
  • L2/L3 Ready:L2或L3的临时状态,L2/L3 Ready是一种伪状态(pseudo-state)
  • L2:辅助供电链路状态
  • L3:链路关闭状态
  • LDn:L0之前的过渡链路断开伪状态

下图是PCIe链路电源管理状态转换图。需要注意的是,L0s,L1,L2,L3这些状态之间没有直接转换的关系,千万不要想当然的认为存在L0->L1->L2->L3这种顺序关系。理解下面这张图是理解PCIe链路电源状态的关键。

image.png

然后,PCIe协议中定义了设备状态:

D0:这是PCIe设备必须支持的状态,包含两个子状态

image.png

  • D1:也称为轻度睡眠状态(Light Sleep),该状态是可选的,设备不是必须支持。当Function进入D1状态时,链路进入L1状态。此时设备只可以接收配置请求和消息请求
  • D2:也称为深度睡眠状态(Deep Sleep),该状态是可选的,设备不是必须支持。在进入此状态前,软件需要确保所有的Non-Posted请求都得到了Completion。设备进入D2状态后,对应的链路进入L1状态。此时设备只可以接收配置请求和消息请求
  • D3:又称为全关(Full-Off)状态。D3状态是设备必须支持的状态,包含两个子状态

image.png

PCIe的设备电源状态是与ACPI设备电源状态对应的,而且在D0和D3设备状态中又细分了子状态。

PCIe链路电源状态与设备电源状态的对应关系见下图:

image.png

总结一下,上游组件的设备电源状态不能比下游组件更激进,比如不允许RC先于EP进入低功耗状态;链路两端设备的电源状态不能比链路电源状态更激进,比如不允许设备进入睡眠状态,而链路处于工作状态。

Function的电源状态转换图如下:

image.png

系统软件可以通过配置Function的PMCSR寄存器来设置Function的电源状态。

image.png

电源管理能力结构
上图中提到的PMCSR寄存器位于电源管理能力结构(Capability Structure)中。

image.png

Power Management Capability ID寄存器
PCIe协议为电源管理能力分配的ID是01h。

Power Management Capability寄存器

image.png

该寄存器位于Capability Structure Header的高16-bit。

各字段含义:

  • PME Clock:不适用于PCIe
  • Immediate_Readiness_on_Return_to_D0:1b表示该Function可以在被设置为D0之后立即准备好成功完成有效访问
  • Device Specific Initialization:指示是否需要对该Function进行特殊初始化。
  • Aux_Current:报告Function的Vaux辅助电流要求,编码如下表

image.png

  • D1_Support:Function是否支持D1状态
  • D2_Support:Function是否支持D2状态
  • PME_Support:指示Function可以生成PME或转发PME消息的电源状态,编码如下表:
    image.png

各字段含义:

  • PowerState:既用于确定Function的当前电源状态,又用于将Function设置为新的电源状态,编码如下:
  • image.png

No_Soft_Reset:指示在写入PowerState字段以将Function从D3Hot转换为D0之后Function的状态。
PME_En:该位被设置,表示允许Function产生PME

  • Data_Select:由于选择要通过Data寄存器和Data_Scale字段报告的数据。
  • Data_Scale:指示在解释Data寄存器的值时要使用的缩放因子
  • PME_Status:当Function可以正常产生PME时,设置此位
  • Undefined:在之前版本用到,Gen 5中不用

Data寄存器
image.png
Data寄存器是可选的8-bit只读寄存器,为电源管理能力提供了一种机制,来报告与状态相关的功耗。如果实现Data寄存器,则PMCS寄存器中的Data_Select和Data_Scale字段也要实现,具体的配合关系参见PCIe基本协议。

【待续】

END

作者:老秦谈芯
文章来源:老秦谈芯

推荐阅读

更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
22885
内容数
1368
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息