【PCIE体系结构十七】PCIE电源管理之PCI-PM

news2024/11/16 5:33:29

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

参考书籍:《PCI.EXPRESS系统体系结构标准教材 Mindshare》      

 

目录

设备PM状态

1.D0状态

2.D1和D2状态

3.D3状态

D状态迁移

设备唤醒


 

        PCIe总线与PCI总线使用的PCI-PM管理机制兼容。在PCIe设备的扩展配置空间中定义了Power Management Capabilities结构,该结构中含有一系列寄存器,系统软件通过修改PMCSR寄存器的Power State字段,可以使PCIe设备进入不同的节能状态D-State,如D0、D1、D2和D3状态。其中DO是正常工作状态,功耗最高,而D1、D2和D3为低功耗状态。其中D1的休眠等级最低,功耗相对较高,而D3的休眠等级最高,功耗相对较低。D-State的状态转换关系如下图:

 

设备PM状态

1.D0状态

        PCIe设备必须支持D0状态,该状态由D0uninitializated和D0active两个子状态组成。当PCIe设备处于D0uninitializated状态时,该PCIe设备并没有被系统软件使能,此时该PCIe设备仅能接收配置读写请求TLP,不能主动发出其他TLP。此时该PCIe设备配置寄存器的Command寄存器为复位值0x00。此时虽然PCIe设备已经被加电,但是并不能正常使用。当PCIe设备处于D0active状态时,PCIe设备处于正常工作模式,并没有任何节电措施。但是PCIe设备仍然可以使用ASPM机制,将链路状态迁移到L0s或者L1状态,以降低功耗。值得注意的是,ASPM机制与PCI PM机制是独立的。当PCIe设备进行复位后,该设备将首先进入D0uninitializated状态。系统软件通过修改PMC-SR寄存器的Power State字段,也可以使设备从D3hot状态迁移到该状态。值得注意的是D3cold状态迁移到该状态的过程与复位操作等效。当系统软件改写Command寄存器的状态位使能PCIe 设备后,该设备从D0uninitializated迁移到D0active状态。

2.D1和D2状态

        D1和D2状态分别为PCle设备的轻度和重度休眠状态。这两个状态为PCIe设备的可选状态,PCIe设备处于D1状态时的功耗高于D2状态。PCle设备处于这两个状态时,除了PME消息之外,不能主动发送其他TLP;除了接收配置请求TLP外,不能接收其他TLP。当PCIe设备处于这两种状态时,可以向RC发送PME消息,通知系统软件该PCIe设备进入休眠状态。当PCIe设备进入D1或者D2状态时,PCIe链路将进入L1状态。PCIe设备可以从D1和D2状态直接返回到D0active状态。

3.D3状态

        PCIe设备必须支持D3状态,D3状态由D3hot和D3cold两个子状态组成。PCIe设备处于D3hot状态与处于D1/D2状态时的功能类似,只是PCIe设备只能从D3hot状态返回D0uninitializated状态,而不能返回D0active状态。对于PCIe设备,从D3hot状态返回D0uninitializated状态的过程相当于热复位。

        当PCle设备的Vcc电源被移除时,PCIe设备无论处于何种状态,都将进入D3cold状态。值得注意的是一个PCIe设备使用两种电源Vcc。和Vaux,Vcc电源被移除并不意味着PCIe设备被完全下电。

        有些PCIe设备在处于D3cold状态时仍然可以发出PME消息,此时这个PCIe设备负责发发送PME消息的功能模块必须使用Vaux而不是Vcc进行供电。

D状态迁移

        PCIe设备可以进行D-State的状态迁移。大多数D-State的状态迁移都是系统软件通过修改PMCSR寄存器的Power State字段实现的,但是仍然有些状态迁移采用了其他方式,比如:

1、使能Command寄存器的命令位,可以使设备从D0uninitializated状态迁移到D0active状态。

2、PCIe设备的Vcc被移除时,D3hot状态将迁移到D3cold状态。

3、当PCIe被唤醒,Vcc重新上电之后,PCIe设备将从D3cold状态迁移到D0uninitializated状态。

具体的状态迁移关系如下图:

        当PCIe设备进行D-State状态迁移时,PCIe链路的状态也可能随之变化。PCIe设备的D-State 状态与PCIe 链路状态的对应关系如下表:

        如下是系统软件修改PMCSR寄存器的Power State字段,将PCIe设备从D0迁移到D1状态的过程举例:

        1、上游设备向下游设备发送配置写请求TLP,改变下游设备PMCSR寄存器的Power State字段,从而使下游设备从D0状态迁移到D1状态。

        2、下游设备收到这个配置写请求TLP后,将改变PMCSR寄存器的Power State字段,并向上游设备发送配置写完成TLP。这个配置写完成TLP首先需要经过数据链路层,并从对端获得足够的发送Credit(这个是流控中的概念,后面再学习)后,将这个配置写完成TLP通过数据链路层发送到对端。

        3、下游设备的事务层收到数据链路层的确认后,得知配置写完成TLP已经被上游设备正确接收后(即ACK/NAK协议,下游设备收到了上游设备发过来的ACK DLLP),将挂起下游设备的事务层。并向上游设备连续发送PM_Enter_Ll DLLP(数据链路层的电源管理DLLP报文),同时等待来自上游设备的PM_Request_Ack报文。

        4、上游设备收到下游设备的PM_Enter_L1 DLLP后,首先禁止发送新的TLP,并等待之前发送的Non-Post TLP得到确认后,挂起上游设备的事务层,并向下游设备连续发送PM_Request_Ack DLLP。

        5、下游设备在没有收到上游设备的PM_Request_Ack DLLP之前,虽然事务层已经被挂起,但是数据链路层和物理层仍然可以正常工作,此时数据链路层可以正确接收来自上游端口的DLLP,并发送ACK/NAK和流量控制相关的一些DLLP。

        6、当下游设备收到PM_Request_Ack DLLP后,将停止发送PM_Enter_L1 DLLP,挂起数据链路层,然后将物理层置为Electrical Idle状态。

        7、上游设备发现其接收链路处于Electrical Idle状态时,将停止发送PM_Request_Ack DLLP,并挂起数据链路层,然后将物理层置为Electrical Idle状态。此时PCIe链路将进入L1状态。

        当PCIe链路处于L1状态时,如果系统软件需要改变下游PCIe设备PMCSR寄存器的Power State字段,PCle链路需要首先从L1状态迁移到正常工作状态L0,下游设备才能接收这个配置写请求TLP。

        PCIe设备其他D-State状态的迁移过程与此大同小异,大家自行查阅PCIe总线规范,这里不再赘述。

设备唤醒

        在前面的D状态迁移表里我们可以看到,D3cold的进出涉及到Vcc电源的移除和重新上电,其他D状态的迁移都可以通过设备发出唤醒请求,然后PM软件写PMCSR寄存器来操作。写寄存器迁移状态好理解,软件操作即可,假设是Vcc掉电了,进入了D3cold状态,这个时候显然不能直接写寄存器了,那PCIE设备要是有唤醒请求了,它要怎么通知主机来给它重新上电、重新进行链路训练并迁移D状态呢?

        PCIExpress设备不使用PCI所定义的PME#边带信号,而是使用带内PME消息来通知PM软件有关将设备返回到满电状态(D0)的请求。在所有低功耗状态内,对生成PME消息能力的支持是可选的。设备会报告其所支持的PM状态,并且从这些状态内可以发送PME消息。需要注意的是,仅在链路电源状态转换到L0时才可传递PME消息(PME消息实际上是message TLP报文)。

        如果链路处于非L0状态,则需要通过其他的方式先来唤醒链路。PCIe Spec定义了两种方式:

        1、Beacon,一种低速的带内信标信号,在前面提到过,该信号只需要AUX电源供电即可;

        2、WAKE#,一种边带信号(低电平有效),该信号同样只需要AUX电源供电即可。

        无论使用哪种方法,必须通知PM软件,使其可以重新施加主电源并重新启动参考时钟。之后就会生成基本复位,强制设备进入D0未初始化状态。一旦链路转换到L0状态,设备就可以发送PME消息。

        可以发送PME消息之后,将按如下流程进行唤醒的后续操作:

        1、当前PCIe设备将PME消息发送至其上一级端口(Upstream Port);

        2、该PME消息通过模糊寻址的方式,通过Switch(如果有的话),最后达到Root;

        3、Root接收到了PME消息后,将其内容转发给PM控制器(Power Management Controller);

        4、该控制器通知PM软件,产生一个中断告知系统。软件利用PME消息中的Requester ID来发起配置空间读写操作,并使得对应的PCIe设备返回至D0状态(或者其他状态)。在这个过程中,PCIe驱动可能需要暂时备份该设备的PCIe配置空间的寄存器值;

        5、软件恢复该PCIe设备的相关信息(配置空间寄存器等)。

        有几点需要注意的是:

        1、PME消息只能采用模糊寻址(Implicitly)方式;

        2、PME消息的TC和VC只能是0,即不支持QoS;

        3、PME消息是一种Message,因此其是Posted的,即不需要Completion与之对应;

        4、PME消息不支持Relaxed Ordering,且总是强制当前器件与Root之间的链路上的所有PCIe设备中的所有其他的事务层包(TLP)在PME消息之前发送。

        PME消息报文结构如下: 

        PCIE的电源管理部分就介绍到这里。

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14. 利用Canvas自制时钟组件

1. 说明 在自定义时钟组件时,使用到的基本控件主要是Canvas,在绘制相关元素时有两种方式:一种时在同一个canvas中绘制所有的部件元素,这样需要不断的对画笔和画布的属性进行保存和恢复,容易混乱;另一种就是…

【C++】做一个飞机空战小游戏(十二)——游戏源代码、音效、图标等资源文件

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

基于微信小程序的短文作文写作竞赛管理系统

随着世界经济信息化、全球网络化的到来推动信息线上管理的飞速发展,为短文写作竞赛行业的改革起到关键作用。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的短文写作竞赛管理系统小程序。…

js中的正则表达式(一)

目录 1.什么是正则表达式 2.正则表达式在JavaScript中的使用场景: 3.正则表达式的语法: 1.什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象通常用来查找、替换那些符…

亚马逊搜索关键词下单怎么操作

亚马逊鲲鹏系统可以根据产品关键词搜索后进行下单购买,多个亚马逊买家号搜索关键词下单可以帮助关键词上首页,具体操作如下: 首先需要先准备好一批能下单的买家账号及代理ip,准备好之后就可以设置需要下单的关键词及asin进行货比…

由于找不到concrt140.dll,无法继续执行代码怎么办

今天我想和大家分享一下我在修复concrt140.dll文件过程中的经验。作为一名程序员,我们经常会遇到各种各样的问题,而这次我所遇到的这个问题对我来说是一个挑战。在经过一番努力之后,我终于找到了解决方法,并且成功地修复了concrt1…

Markdown 基本语法

风无痕 August 21,2023 总览 几乎所有 Markdown 应用程序都支持 John Gruber 原始设计文档中列出的 Markdown 基本语法。但是,Markdown 处理程序之间存在着细微的变化和差异,我们都会尽可能标记出来。 标题(Headings) 要创建标…

信息安全/网络安全专业好不好?

​本人信息安全专业毕业,在甲方互联网大厂安全部与安全乙方大厂都工作过,有一些经验可以供对安全行业感兴趣的人参考。 或许是因为韩商言让更多人知道了CTF,也或许是因为网络安全越来越受国家重视,安全最近愈加火爆了。当然&…

司徒理财:8.21黄金空头呈阶梯下移!今日操作策略

黄金走势分析 盘面裸k分析:1小时周期的行情局部于1896附近即下行通道上轨附近录得一系列的K线呈震荡下行并筑圆顶,上轨压制有效,下行通道并未突破,后市建议延续看下行。4小时周期局部录得一系列的纺锤线呈震荡,但行情整…

ppt怎么做流程图?一文详解如何在ppt上绘制流程图!

ppt怎么做流程图?ppt制作流程图的方法是什么?本文将介绍2个在PPT中做流程图的方法,一起往下看吧。 方法一:利用PowerPoint自带功能 (1)使用SmartArt功能制作流程图 打开Microsoft PowerPoint并新建一…

测试Qt是否安装成功

1.打开Qt软件 选择新建项目,new 选择基类时,一次使用选择QWigget空白窗口,还有2种,带菜单栏的窗口和对话框窗口。选中Generate form会生成图形界面,组件直接拖拉,不需要自己编写。 运行结果:

【ICCV2023】Adaptive Frequency Filters As Efficient Global Token Mixers

Adaptive Frequency Filters As Efficient Global Token Mixers 论文:https://arxiv.org/abs/2307.14008 代码:暂未开源 解读:ICCV23|轻量级视觉主干网络AFFNet:频域自适应频段过滤空域全局动态大卷积核 - 知乎 (zh…

热烈祝贺贵州董程酿酒成功入选航天系统采购供应商库

经过航天系统采购平台的严审,贵州董程酿酒有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台,服务航天全球范围千亿采购需求,目前,已有华为、三一重工、格力电器、科大讯飞等企业、机构加…

基于讯飞开放平台API服务构建集成大模型能力

在前面的一篇文章中实测体验了讯飞开放平台发布的V2.0版本大模型的能力,感兴趣的话可以自行移步阅读即可: 《科大讯飞发布星火认知大模型2.0版——体验实测》 这里一并发布的还有API接口,如下所示: 点击【API测试申请】即可自动…

PHP服饰文化网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

一、源码特点 PHP 服饰文化网站系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88236778 PHP服饰文化网站…

【哈希表】HashSet HashMap LeetCode习题

目录 136.只出现一次的数字 137.只出现一次的数字 || 217.存在重复元素 219.存在重复元素 || 771.宝石与石头 旧键盘(牛客) 首先需要导包 import java.utli.*; 表中常用的是前两个&#xff0c;时间复杂度低。O(1) Set<E> set new HashSet<>(); set.conta…

使用VSCode配置简单的vue项目

由于最近要使用的项目框架为前后端分离的&#xff0c;采用的是vue.jswebAPI的形式进行开发的。因为之前我没有接触过vue.js&#xff0c;也只是通过视频文档做了一些简单的练习。今天技术主管说让大家熟悉下VSCode开发vue&#xff0c;所以自己摸索了好久&#xff0c;才算是把简单…

2023年7月京东扫地机器人行业品牌销售排行榜(京东数据产品)

伴随消费者解放双手的消费需求&#xff0c;我国清洁电器行业快速发展。且随着消费回暖&#xff0c;我国扫地机器人市场也开始慢慢走出寒冬&#xff0c;止跌回升。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年7月份&#xff0c;京东平台扫地机器人的销量为16万&…

正中优配:港股迎来估值“黄金坑” 哪个点位介入胜率高?

近两周&#xff0c;港股向下突破了一切技能短线支撑信号。在新的技能信号构成前&#xff0c;港股有望迎来估值压力的开释&#xff0c;带来一个估值“黄金坑”。当估值回到“轻视”区间时&#xff0c;咱们信任港股对全球资本的吸引力将再次凸显。详细而言&#xff0c;咱们用两种…

eDP接口的PCB布局布线要求

eDP接口是一种基于DisplayPort架构和协议的一种全数字化接口&#xff0c;传递高分辨率信号只需要较简单的连接器以及较少的引脚就可以实现&#xff0c;同时还能够实现多数据同时传输。 图1 EDP接口 eDP接口的PCB设计布局布线注意事项&#xff1a; 1、远离干扰源&#xff0c;防…