之前写过一篇power management的介绍,主要是介绍了一下power management的概念,这次主要是介绍下ASPM和ASPM L1机制。

【67】PCIe Power Management和linux对PME的处理_linjiasen的博客-CSDN博客

1、ASPM介绍

ASPM全称Active State Power Management,是针对Power Management的一种管理机制。所谓“Active State”就是设备在D0状态下进入低功耗模式的管理机制。ASPM是硬件行为,软件只能写function配置空间Link Control Register的ASPM Control比特来disable和允许进入某种L state。

PCI-PM是软件写function的配置空间的Power Management Control/Status Register来让function进入某种D state。

2、ASPM L1介绍

如果设备是支持ASPM L1的(link cap reg的bit11-10),ASPM ctrl字段的L1 entry(link ctrl reg的bit1-0)默认是disable的。只有链路两端的component都支持ASPM L1时,software才能enable downstream component的ASPM L1。

Software必须先使能upstream component的ASPM L1,然后再使能downtown component的ASPM L1。Disable ASPM L1的时候是相反的操作。这点在link control寄存器的ASPM control字段也有说明。

3、PCIe协议对ASPM L1协商的规定

  1. Downstream component必须积累有足够数量的credit才能发起ASPM L1 entry的初始化流程。
  2. 在进入low power link state前,Downstream component必须阻止发送端再从transaction layer发送TLP(包括completion)到data link layer
  3. Downstream component必须等到之前发送的最后一个TLP收到acknowledgement(retry buffer为空)。
  4. Downstream component 反复发送PM_Active_State_Request_L1 DLLP来进行ASPM协商。Downstream component发送PM_Active_State_Request_L1 DLLP的间隔不超过8个(8b/10b)或者32个(128b/130b)idle symbol times。
  5. Downstream component一直发送PM_Active_State_Request_L1 DLLP,直到收到Upstream component回复PM_Request_Ack DLLP或者PM_Active_State_Nak message。在等待Upstream component回复PM_Request_Ack DLLP期间,Downstream component不能发送TLP,可以正常接受Upstream component发送的TLP和DLLP,并回复FC updata DLLP。也就说Downstream component的Transaction Layer进入了inactive,但是data link layer还是active状态。
  6. Upstream component必须立刻响应,接受或者拒绝PM_Active_State_Request_L1请求。Upstream component不停发送PM_Request_Ack DLLP,直到detect 链路进入idle。

4、PCIe EP ASPM L1 entry机制

  1. 当Link的TX端是idle的(例如,client端没有transmit TLP并没有replay TLP pending),EP controller开启ASPM L1 entry timer开始计时,如果client端有TLP要发送,那么timer会被clear。
  2. 当ASPM L1 entry timer达到时间后(ASPM L1 Entry Timeout Delay Register可以设置,默认是750*16ns=12us),EP controller检查是否有足够的credit。
  3. EP controller block新的TLP发送,并且通过TX lane发送PM_Active_State_Request_L1 DLLP。
  4. EP controller持续发送PM_Active_State_Request_L1 DLLP直到收到upstream device的response。
  5. Upstream component必须立刻对EP controller发出的PM_Active_State_Request做出响应(接收或者拒绝)。
  6. 如果Upstream component拒绝EP controller发出的PM_Active_State_Request,则Upstream component发出PM_Active_State_Nak message(注意NAK是message),那么EP controller会abort掉ASPM L1 entry并且继续正常发送TLP。
  7. 如果Upstream component接受EP controller发出的PM_Active_State_Request,则Upstream component发出PM_Request_Ack DLLP(注意ACK是DLLP),然后EP controller会让自己的TX进入electrical idle并进入ASPM L1。
  8. Upstream component detect electrical idle后,让自己的TX进入electrical idle。

5、PCIe EP ASPM L1 entry例子

(1)systemBIOS设置CPU支持ASPM L1

设置完毕后,CPU对应Root Port的link cap就支持ASPM L1

(2)设置CPU和EP两个PF的link ctrl为ASPM L1 Enabled

注意顺序:一定要先CPU,后EP的PF0/PF1

设置CPU端口的link ctrl为0x2,L1 Entry Enabled

setpci -s 0:1.0 0x50.b

00

setpci -s 0:1.0 0x50.b=0x2

setpci -s 0:1.0 0x50.b

02

设置EP芯片的两个PF的link ctrl为0x2,L1 Entry Enabled

setpci -s 1:0.0 0xd0.b

00

setpci -s 1:0.0 0xd0.b=0x2
setpci -s 1:0.0 0xd0.b

02

setpci -s 1:0.1 0xd0.b

00

setpci -s 1:0.1 0xd0.b=0x2

setpci -s 1:0.1 0xd0.b

02

(3)等待链路进入idle状态,从串口查看芯片状态

从pcie_status_0 reg(0x7F00814004)的bit24-21为0100b,知道链路在L1状态了

从lower power debug and ctrl reg(0x7F00900C88)的bit26-25为01b,知道是因为ASPM进入的L1。

(6)退出ASPM L1的方法

只要host端访问一下EP就可以退出ASPM L1进入L0。

【86】ASPM进入和退出L1相关推荐

  1. [PCIe] [电源管理] 面向硬件的ASPM链路状态和L1子状态

    PCIe设备的低功耗状态要求系统驱动程序显式地将设备置于低功耗状态,从而PCIe链路则可以依次变为低功耗链路状态.PCIe规范允许PCIe链路在没有系统驱动的情况下进入低功耗状态.这个特性就是所谓的主 ...

  2. PCIe功耗控制--ASPM

    上一节PCIe功耗控制–Legacy PCI Compatible PM 讲了软件参与的功耗控制(OSPM),本次讲PCIe引入的硬件自动功耗控制. ASPM Active State Power M ...

  3. PCIe功耗管理(三)ASPM机制

    通常情况下,处于D0状态的设备会保持其Upstream链路处于L0状态:而ASPM为D0状态定义了一种协议,可以将链路置于低功耗状态,同时指示另一端同样及那个第功耗.ASPM可以动态降低链路功耗,实现 ...

  4. PCI Express学习篇---Power Management(二)

    声明:此文章为原创,转载请注明 转自https://blog.csdn.net/weixin_48180416/article/details/115576691 此篇介绍L1低功耗状态.下一篇介绍L ...

  5. [PCIe]LTSSM与电源管理

    1. LTSSM LTSSM全称是Link Training and Status State Machine,有以下11个状态: Detect, Polling, Configuration, Re ...

  6. PCIe系列专题之五:PCIe总线电源管理

    PCIe总线的电源管理包括两方面的内容: 一是基于软件控制的PCI-PM电源管理机制,这部分与PCI总线兼容: 二是基于硬件控制的ASPM电源管理机制, 不需要Host端软件口控制,PCIe链路自主管 ...

  7. PCIe链路训练link training

    针对PCIe link training做了分步解析,本文介绍原理,下一篇介绍波形分析,链接如下: PCIe链路训练link training–举例波形分析 1. 链路训练基本概念 PCIe总线中的链 ...

  8. python蓝桥杯准备

    蓝桥杯题库 入门训练 A+B问题 数列排序 十六进制转八进制 十六进制转十进制 十进制转十六进制 特殊回文数 回文数 特殊的数字 杨辉三角形 查找整数 数列特征 字母图形 01字串 闰年判断 Fibo ...

  9. 服务器如何发挥最好的性能,一篇文章告诉你怎么发挥固态硬盘最大性能

    对于使用固态硬盘相信大多数玩家对于其性能是否良好没有一个客观上的认知,今天就给大家详细介绍下如何让自己的固态硬盘保持良好的性能状态. 从东芝TR200看固态硬盘满盘性能与读取延迟 固态硬盘的性能与很多 ...

最新文章

  1. 心理正常与异常的区分_心理正常与心理异常的区别是什么呢
  2. 自学转行学AI人工智能怎么样?
  3. sleep期间读取所有_ceph部分数据所有副本先后故障的抢救
  4. p2psearcher2013源码实现原理
  5. python if elif else
  6. ARM与x86之1--Wintel帝国
  7. windows webrtc 如何实现桌面共享
  8. windows server 2008 r2 设置显示文件后缀名
  9. 无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码
  10. R语言置信区间计算(confidence interval)、计算比例值对应的置信区间、为比例值构建95%执行区间、使用glue包把最终结果以标准格式输出
  11. 如何动态使用烘焙出来的ReflectionProbe-0.exr信息
  12. http文件上传到web服务器,上传到ftp服务器
  13. plotnine数据可视化手册
  14. 什么是磁盘阵列 磁盘阵列
  15. 【一起学Rust | 开源项目】效率提升工具espanso——在日常输入中使用代码提示
  16. jackson序列化首字母大写amp;jackson序列化结果字段名重复
  17. toad与oracle建立数据库,用Toad for Oracle创建数据库表空间和用户
  18. 华威国王曼大爱丁堡计算机专业,爱丁堡、曼大、KCL和华威大学的金融专业,该选哪一个?...
  19. 网新恒天2014校园招聘笔试编程题
  20. java-php-python-ssm面相高校学生的图书共享平台计算机毕业设计

热门文章

  1. 长安大学微型计算机原理与接口技术答案,长安大学考研专业课《815微机原理与接口技术》真题解析 考点 冲刺.pdf...
  2. Huawei 華為 MT7-TL10开机卡 logo卡开机画面 使用UFED完美导出客户数据资料
  3. Tomcat-Connector(连接器)
  4. IDEA/GoLand 添加自定义特殊注释【注释高亮】
  5. 内存拷贝函数memcpy相关解析(C语言)
  6. Linux 命令(246)—— mii-tool 命令
  7. excle中数字太大,显示不全
  8. emucheat,emucheat下载
  9. 2017年最新App Store审核指南(官方)
  10. 支持向量机1-线性可分支持向量机