[PCIe] linux 下测试ASPM
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相关推荐
- linux下测试磁盘的读写IO速度-简易方法
linux下测试磁盘的读写IO速度-简易方法 参考资料: https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是 ...
- linux 测试串口命令,Linux 下测试串口的命令microcom
昨天应为要测试主板上的串口,查了一下,可以使用microcom 这条命令进行测试. 命令使用方法很简单: Usage: microcom [-d DELAY] [-t TIMEOUT] [-s SPE ...
- MPU6050开发 -- Linux下测试
之前在C52单片机上有过测试,可以获取原数据和姿态角,但是卡尔曼滤波并未实现.现在想在S5PV210 Linux下进行测试.接下来看一下怎么做. 一.查看 S5PV210 I2C接口 查看J7端子,发 ...
- linux下测试RTC驱动相关的命令date和hwclock常见用法简介
之前对Linux下面时间相关的内容,一无所知,第一次见到hwclock,不知为何物,也没找到解释清楚的帖子.故此整理一下,简单介绍Linux下验证rtc驱动是否工作正常,相关的的命令:date和hwc ...
- 借助Docker,在win10下编码,一键在Linux下测试
此前在公司实习时,日常的开发.工作按规定都必须使用Windows操作系统,但是项目实际的测试.上线环境都是基于Linux的,所以每次只能在本地编写某一功能的代码后通过"跳板机"将项 ...
- linux下测试网卡是否连通shell脚本
欢迎移步博主小站:白亮吖雅黑丫の小站 linux下利用shell脚本测试网卡是否连通 话不多说,脚本奉上: #!/bin/bash#遍历27至28网段,查询是否能ping通该网段 for a in { ...
- linux下测试qt程序代码覆盖率(gcov,lcov)
代码覆盖率是指:在测试中,所执行的源代码占全部源代码的比例. 1.linux系统下可以用使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. https://blog.csdn.n ...
- linux下测试权限,Linux下进程权限分析
在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知之甚少.本文总结一下linux系统下进程权限问题和现象. 需要强调的是,本文是linux系统下讨论,因为linux ...
- linux下测试网速
linux下查看下载和上传的网速,有的教程说要下载什么包,其实一行命令就可以解决 curl -s https://raw.githubusercontent.com/sivel/speedtest-c ...
最新文章
- 若依管理系统源码分析-导出Excel时怎样通过注解中readConverterExp实现格式化导出列的显示格式(0和1格式化为是否)
- Linux 串口调试工具汇总
- mysql rpm 启动_MySQL安装(rpm)和启动配置
- 出租车计费java_java 计程车计费
- php七牛持久化处理,使用七牛自定义数据处理范例
- HTTP基础(图解HTTP笔记)幕布
- 人脸识别的人像处理流程是怎样的?
- directX 简介
- Unicode 汉字内码表
- 教你如何修改树莓派的时区和网络对时
- 数据清洗 excel mysql_Excel获取MYSQL数据库数据
- “放管服”改革背景下公安车驾管业务办理情况调研
- 解决执行hive语句时出现虚拟内存不够的问题
- [分享]加拿大渥太华市卡尔顿大学John W. Chinneck教授谈如何组织论文
- 壹基金,李连杰的长尾理论
- 崩坏3服务器维护2月8号,崩坏3V3.4版本8月29日版本更新维护通知
- php提取字符串连接,如何从PHP中的字符串中提取URL?
- 到站提醒APP应用 隐私声明
- android第三方上传文件,安卓和苹果终于打通!互传文件无需借助第三方,一碰就能传...
- “国产”操作系统UOS(Deepin V20专业版)