1. kernel config & driver

.config - Linux/arm64 5.4.31 Kernel Configuration
 > Device Drivers > PCI support

打开 PCI Express ASPM control和Debug PCI Express ASPM (会在sys_fs中添加aspm的控制node,方便手动修改进行测试)

电源策略选择Power Supersave

电源策略也可以通过读写sysfs节点进行动态修改

cat /sys/module/pcie_aspm/parameters/policy
default performance powersave [powersupersave]echo powersave > /sys/module/pcie_aspm/parameters/policy

在dts中修改bootargs,增加pcie_aspm=force

启动kernel后会看到aspm force的打印

[    0.000000] PCIe ASPM is forcibly enabled

2. 通过sys_fs接口进行测试

加载aspm driver后默认device的aspm cap还是关闭的,需要手动打开,然后查看ltssm状态机,观察link状态是否会自动切换到L0s或L1。

2.1 首先通过lspci -vv查看当前LnkCtl的值

这里可以看到这个device是支持L0s和L1的ASPM,不过当前状态是关闭的。

2.2 通过sys_fs打开ASPM

打开CONFIG_PCIEASPM_DEBUG后,在/sys/bus/pci/devices/0000\:00\:00.0/power/下会多出一个link_state节点(/0000\:00\:00.0/这个是domain/bus/device/function 需自行修改操作的设备值)。

cat一下看看初始值,为0。

这个link_state的定义在kernel\drivers\pci\pcie\aspm.c中,0是关闭ASPM,非0值的含义如下:

/* Note: those are not register definitions */
#define ASPM_STATE_L0S_UP   (1) /* Upstream direction L0s state */
#define ASPM_STATE_L0S_DW   (2) /* Downstream direction L0s state */
#define ASPM_STATE_L1       (4) /* L1 state */
#define ASPM_STATE_L1_1     (8) /* ASPM L1.1 state */
#define ASPM_STATE_L1_2     (0x10)  /* ASPM L1.2 state */
#define ASPM_STATE_L1_1_PCIPM   (0x20)  /* PCI PM L1.1 state */
#define ASPM_STATE_L1_2_PCIPM   (0x40)  /* PCI PM L1.2 state */
#define ASPM_STATE_L1_SS_PCIPM  (ASPM_STATE_L1_1_PCIPM | ASPM_STATE_L1_2_PCIPM)
#define ASPM_STATE_L1_2_MASK    (ASPM_STATE_L1_2 | ASPM_STATE_L1_2_PCIPM)
#define ASPM_STATE_L1SS     (ASPM_STATE_L1_1 | ASPM_STATE_L1_1_PCIPM |\ASPM_STATE_L1_2_MASK)
#define ASPM_STATE_L0S      (ASPM_STATE_L0S_UP | ASPM_STATE_L0S_DW)
#define ASPM_STATE_ALL      (ASPM_STATE_L0S | ASPM_STATE_L1 |   \ASPM_STATE_L1SS)

具体配置把需要打开的ASPM能力对应的值或在一起就可以了,例如需要打开L0s.tx 和L0s.rx :

# echo 3 > /sys/bus/pci/devices/0000\:00\:00.0/power/link_state
# cat /sys/bus/pci/devices/0000\:00\:00.0/power/link_state
3

再lspci -vv查看,ASPM L0s已经打开

查看LTSSM寄存器值(这个是特定芯片的地址,仅供示例)

可以看到打开ASPM L0s之后LTSSM在L0s的各个状态之间跳转

L1的测试类似,link_state写入7,打开ASPM L1 enable

# echo 7 > /sys/bus/pci/devices/0000\:00\:00.0/power/link_state
#  cat /sys/bus/pci/devices/0000\:00\:00.0/power/link_state
7

lspci -vv 确认已经打开L1

稍等一会查看LTSSM寄存器,已经进入到L1.Idle

[PCIe] linux 下测试ASPM相关推荐

  1. linux下测试磁盘的读写IO速度-简易方法

    linux下测试磁盘的读写IO速度-简易方法 参考资料: https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是 ...

  2. linux 测试串口命令,Linux 下测试串口的命令microcom

    昨天应为要测试主板上的串口,查了一下,可以使用microcom 这条命令进行测试. 命令使用方法很简单: Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPE ...

  3. MPU6050开发 -- Linux下测试

    之前在C52单片机上有过测试,可以获取原数据和姿态角,但是卡尔曼滤波并未实现.现在想在S5PV210 Linux下进行测试.接下来看一下怎么做. 一.查看 S5PV210 I2C接口 查看J7端子,发 ...

  4. linux下测试RTC驱动相关的命令date和hwclock常见用法简介

    之前对Linux下面时间相关的内容,一无所知,第一次见到hwclock,不知为何物,也没找到解释清楚的帖子.故此整理一下,简单介绍Linux下验证rtc驱动是否工作正常,相关的的命令:date和hwc ...

  5. 借助Docker,在win10下编码,一键在Linux下测试

    此前在公司实习时,日常的开发.工作按规定都必须使用Windows操作系统,但是项目实际的测试.上线环境都是基于Linux的,所以每次只能在本地编写某一功能的代码后通过"跳板机"将项 ...

  6. linux下测试网卡是否连通shell脚本

    欢迎移步博主小站:白亮吖雅黑丫の小站 linux下利用shell脚本测试网卡是否连通 话不多说,脚本奉上: #!/bin/bash#遍历27至28网段,查询是否能ping通该网段 for a in { ...

  7. linux下测试qt程序代码覆盖率(gcov,lcov)

    代码覆盖率是指:在测试中,所执行的源代码占全部源代码的比例. 1.linux系统下可以用使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. https://blog.csdn.n ...

  8. linux下测试权限,Linux下进程权限分析

    在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知之甚少.本文总结一下linux系统下进程权限问题和现象. 需要强调的是,本文是linux系统下讨论,因为linux ...

  9. linux下测试网速

    linux下查看下载和上传的网速,有的教程说要下载什么包,其实一行命令就可以解决 curl -s https://raw.githubusercontent.com/sivel/speedtest-c ...

最新文章

  1. 若依管理系统源码分析-导出Excel时怎样通过注解中readConverterExp实现格式化导出列的显示格式(0和1格式化为是否)
  2. Linux 串口调试工具汇总
  3. mysql rpm 启动_MySQL安装(rpm)和启动配置
  4. 出租车计费java_java 计程车计费
  5. php七牛持久化处理,使用七牛自定义数据处理范例
  6. HTTP基础(图解HTTP笔记)幕布
  7. 人脸识别的人像处理流程是怎样的?
  8. directX 简介
  9. Unicode 汉字内码表
  10. 教你如何修改树莓派的时区和网络对时
  11. 数据清洗 excel mysql_Excel获取MYSQL数据库数据
  12. “放管服”改革背景下公安车驾管业务办理情况调研
  13. 解决执行hive语句时出现虚拟内存不够的问题
  14. [分享]加拿大渥太华市卡尔顿大学John W. Chinneck教授谈如何组织论文
  15. 壹基金,李连杰的长尾理论
  16. 崩坏3服务器维护2月8号,崩坏3V3.4版本8月29日版本更新维护通知
  17. php提取字符串连接,如何从PHP中的字符串中提取URL?
  18. 到站提醒APP应用 隐私声明
  19. android第三方上传文件,安卓和苹果终于打通!互传文件无需借助第三方,一碰就能传...
  20. “国产”操作系统UOS(Deepin V20专业版)

热门文章

  1. 动态规划---01背包问题详解
  2. Win11如何更改字体样式?Win11更改字体样式的方法
  3. 帮我生成一份能够使图像感情化的Matlab代码
  4. mysql 军规_关于MySql的军规
  5. 音频倍速(变速不变调)的实现
  6. weblogic密码破解
  7. jzoj 高中 1285——奶酪厂
  8. libsvmpredict和svmtrain的参数和返回值
  9. php mysql die_【PHP】当mysql遇上PHP
  10. webRTC服务器搭建(基于Janus)与Demo运行