aspm是pcie的一种省电模式。涉及到的寄存器主要是pci配置空间的如下3个寄存器。
(以下已usb 3.0 控制器的pci配置空间为例子:
其中:
link capabilities register [11:10]是活动状态链路的PM支持位。 [11:10] = 00保留。[11:10]=01表示支持L0s。[11:10]=10又保留了。[11:10]=11表示同时支持L0s和L1。设备也使用[14:12]和[17:15]来指示L0s和L1的退出延迟。
link control register[1:0]是活动状态的PM控制位。[1:0]=00表示两者都是禁用的。01表示启用了L0s,禁用了ASPM L1。10表示禁用L0s,启用ASPM L1。11表示两者都是启用的。
具体的datasheet如下:
要看BIOS下有没有设置,可以在shell下使用mm命令查看对应寄存器,看BIOS有没有设置相应位
在OS下,可以通过命令:
lspci -s 01:00.0 -xxx |vim -
图中01:00.0表示这个设备在BUS 1,Dev 0, Func 0上。具体可以先使用lspci命令查看
查看相应的0xAC,0xB0偏移地址的值就可以知道了。
也有如下命令:
setpci -s 01:00.0 b0.B=43
通过修改偏移地址0xb0的值为0x43,其中B代表一个字节
另外,内核可以通过添加config来实现不同的策略。目前有如下策略
defualt:使用BIOS的设置
powersave:内核会打开L0s,以及L1
performance:强行关闭L0s,L1,就算BIOS打开了
power_superave:比powersave多了L1 substates
具体可以通过OS下的这个文件查看
cat /sys/module/pcie_aspm/parameters/policy
其中涉及到的config在kernel中:
其中涉及了4中状态。查看drivers/pci/pcie/Makefile可以看到相应的文件
补充:
以下转载自:[PCIe] [电源管理] 面向硬件的ASPM链路状态和L1子状态_messi_cyc的专栏-CSDN博客_pciexpress链接状态电源管理
PCIe设备的低功耗状态要求系统驱动程序显式地将设备置于低功耗状态,从而PCIe链路则可以依次变为低功耗链路状态。PCIe规范允许PCIe链路在没有系统驱动的情况下进入低功耗状态。这个特性就是所谓的主动状态电源管理(ASPM)。一般来说,无论是系统驱动端硬件(RC)还是设备硬件(EP)都可以通过检测pcie链路上的空闲时间,然后启动电源状态转移。