当前位置: 首页 > news >正文

PCIe 调试 执行retrain

在进行PCIe调试过程中我们时常需要执行retrain操作。retrain命令是让PCIe 链路先退出Link状态(ltssm==L0),ltssm会进入recovery状态,然后再次进入L0状态。

retrain操作使用的setpci命令,操作对象是downstream port而非endpoint。

1.retrain操作步骤

  1. 将Secondary PCI Express Extended Capability中的Link Control 3 Register中Perform Equalization字段写1,此操作是为了保证重新建链过程中执行Equalization操作,Perform Equalization字段默认值为0,且每次重新建链后此字段会被清零。

2.设置目标速率:将PCI Express Capability Structure中的Link Control 2 Register的target Link Speed设置成目标速率,字段表示设备支持的最大速率

3.将PCI Express Capability Structure中的Link Control Register的Retrain Link字段写1,pcie链路将进行retrain操作。

​​​​​​​

2.案例说明

案例中14:02.0表示downstream port的bus number、device number和function number,在不同设备中数值不同。如下案例中“.B”表示按访问数据位宽是1字节。

  1. setpci -s 14:02.0 204.B=0x01

本案例中Secondary PCI Express Extended Capability的偏移地址是0x200,Link Control 3 Register的地址是0x204,将Perform Equalization设置成1

  1. setpci -s 14:02.0  cap_exp+0x30.B=0x44

将PCI Express Capability Structure地址采用缩写cap_exp来表示,Link Control 2 Register在PCI Express Capability Structure内部的地址偏移是0x30,因此Link Control Register的地址就是cap_exp+0x30,写数据0x44中的[3:0]为0x4对应target link speed,即16G速率。

  1. setpci -s 14:02.0 cap_exp+0x10.B=0x60

将PCI Express Capability Structure地址采用缩写cap_exp来表示,Link Control Register在PCI Express Capability Structure内部的地址偏移是0x10,因此Link Control Register的地址就是cap_exp+0x10,写数据0x60表示将Retrain Link置1。

NOTE:在改写字段时,首先需要先读字段地址的字节数据,然后改写对应字段,最终将改写后的数据使用setpci写入。

相关文章:

  • [Linux]解决虚拟机 ubantu系统下网络的问题
  • android studio 使用Java xml开发app
  • NUUO摄像头debugging_center_utils命令执行漏洞
  • JS 生成批量投入数据用的csv文件
  • 是否每一层之间都要线性变换和激活函数?
  • 记一次snmp_exporter/generator生成yml报错问题修复
  • 【小兔鲜】day01 项目、Vue3介绍、组合式API、小案例
  • [python]minepy安装后测试代码
  • cpp栈操作
  • 计算机网络相关知识小结
  • 笔记 数字电路与计算机组成
  • 祥瑞金业:如果美股进入熊市,黄金会如何反应?
  • 基于Linux C++多线程服务器 + Qt上位机开发 + STM32 + 8266WIFI的智慧无人超市
  • .net GRPC服务搭建,跨进程调用。C#应用和Python应用之间的通信。
  • Chapter 9 Capacitive DC–DC Converters
  • 百度自动驾驶:我的学习笔记
  • Epub转PDF软件Calibre电子书管理软件
  • 3.3 元组
  • (四)队列族
  • Unity声音管理系统笔记