FPGA设计-使用 lspci 和 setpci 调试xilinx的PCIe 问题

目录

简介

lspci

lspci-TV

lspci-vvv

注意事项

lspci -vs

lspci -vvvs

设置pci

识别setpci中的寄存器

setpci -s 00:01.0 d0.b=42


简介

lspci 和 setpci 命令在 Linux 发行版中本身可用。该命令具有各种级别的输出,并提供非常有用的时间点查看 PCI 总线上训练的不同组件的功能和状态。 

大多数这些功能都是 PCI-Express 基本规范所需的配置空间寄存器的反映。与大多数命令一样,可以通过在 Linux 中运行“lspci --help”或“man lspci”来找到使用说明。

lspci

默认情况下,lspci 命令将显示所有设备信息,如下所示。

lspci-TV

此命令以树形格式显示 PCI 设备,并给出根端口 BDF(总线、设备、功能)编号。

在上面的日志中,Xilinx 设备连接到总线号“00”、设备号“01”和功能号“1”。

lspci-vvv

这是显示所有内容的最详细命令。要运行此命令,需要 root 权限。

下面的日志仅显示与 Xilinx PCIe 设备相关的部分。

注意事项

• 链路能力寄存器和链路状态寄存器均显示Gen3x8。有时,由于链接问题,它可能会下降。训练好的下行链路状态反映在链路状态寄存器中:

 可纠正错误状态寄存器显示设置的非致命错误。在引导期间,主机也会探测未配置的功能。由于设计是针对一种功能进行配置的,因此其他功能的探测将被报告为不受支持的请求。此不受支持的请求被报告为建议性非致命错误。如果在启动过程中设置了 Non-Fatal Error、Unsupported Request 和 Correctable Error,则可以忽略。可以通过对相应寄存器中的相应位进行配置写入来清除它们。

• 用户必须监视不可纠正错误状态寄存器中的错误。如果该寄存器报告错误,则必须对其进行调查并解决。

 PCI Express 功能从“80”开始。

lspci -vs <BDF>

此命令为所选设备提供详细输出,如下所示:

lspci -vvvs <BDF>

这是相同的命令,但输出更详细,如下所示:

lspci -nvmms <BDF>

此命令将 PCI 设备供应商 ID 和设备 ID 显示为数字。

设置pci

[root@localhost xilinx]# setpci --dumpregs
cap pos w 名称
00 W VENDOR_ID
02 W DEVICE_ID
04 W 命令
06 W STATUS
08 B REVISION
09 B CLASS_PROG
0a W CLASS_DEVICE
0c B CACHE_LINE_SIZE
0d B LATENCY_TIMER
0e B HEADER_TYPE
0f B BIST
10 L BASE_ADDRESS_0
14 L BASE_ADDRESS_1
18 L BASE_ADDRESS_2
1c L
BASE_ADDRESS_3 20 L
BASE_ADDRESS_4 24 L BASE_ADDRESS_5
28 L CARDBUS_CIS
2c L SUBSYSTEM_VENDOR_ID
2e W SUBSYSTEM_ID
30 L ROM_ADDRESS
3c B INTERRUPT_LINE
3d B INTERRUPT_PIN
3e B MIN_GNT
3f B MAX_LAT
18 B PRIMARY_BUS
19 B SECONDARY_BUS
1a B SUBORDINATE_BUS
1b B SEC_LATENCY_TIMER
1c B IO_BASE
1d B IO_LIMIT
1e W SEC_STATUS
20 W MEMORY_BASE
22 W MEMORY_LIMIT
24 W PREF_MEMORY_BASE
26 W PREF_MEMORY_LIMIT
28 L PREF_BASE_UPPER32
2c L PREF_LIMIT_UPPER32
30 W IO_BASE_UPPER16
32 W IO_LIMIT_UPPER16
38 L BRIDGE_ROM_ADDRESS
3e W BRIDGE_CONTROL
10 L CB_CARDBUS_BASE
14 W CB_CAPABILITIES
16 W CB_SEC_STATUS
18 B CB_BUS_NUMBER
19 B CB_CARDBUS_NUMBER
1a B CB_SUBORDINATE_BUS
1b B CB_CARDBUS_LATENCY
1c L CB_MEMORY_BASE_0
20 L CB_MEMORY_LIMIT_0
24 L CB_MEMORY_BASE_1
28 L CB_MEMORY_LIMIT_1
2c W CB_IO_BASE_0
2e W CB_IO_BASE_0_HI 30 W
CB_IO_LIMIT_0 32 W CB_IO_LIMIT_0_HI 34 W CB_IO_BASE_1 36 W CB_IO_BASE_1_HI 38 W CB_IO_LIMIT_1 3a W CB_IO_LIMIT_1_HI 40 W CB_SUBSYSTEM_VENDOR_ID 42 W CB_SUBSYSTEM_ID 44 L CB_LEGACY_MODE_BASE 01 00 - CAP_PM 02 00 - CAP_AGP 03 00 - CAP_VPD 04 00 - CAP_SLOTID 05 00 - CAP_MSI 06 00 - CAP_CHSWP 07 00 - CAP_PCIX 08 00 - CAP_HT 09 00 - CAP_VNDR 0a 00 - CAP_DBG 0b 00 - CAP_CCRC 0c 00 - CAP_HOTPLUG 0d 00 - CAP_SSVID 0e 00 - CAP_AGP3 0f 00 - CAP_SECURE
10 00 - CAP_EXP
11 00 - CAP_MSIX
12 00 - CAP_SATA
13 00 - CAP_AF
0001 00 - ECAP_AER
0002 00 - ECAP_VC
0003 00 - ECAP_DSN
0004 00 - ECAP_PB
0005 00 - ECAP_RCLINK
0006 00 - ECAP_RCILINK
0007 00 - ECAP_RCECOLL
0008 00 - ECAP_MFVC
000a 00 - ECAP_RBCB
000b 00 - ECAP_VNDR
000d 00 - ECAP_ACS
000e 00 - ECAP_ARI
000f 00 - ECAP_ATS
0010 00 - ECAP_SRIOV

识别setpci中的寄存器

以下是识别 setpci 命令中使用的寄存器的各种方法。

  • 使用十六进制地址
  • 提供注册名称
  • 对于属于 PCI 功能一部分的寄存器,可以使用功能名称对第一个寄存器进行寻址。在 --dumpregs 输出中。检查以“CAP_”或“ECAP_”开头的名称。后面可以跟 +offset 以向地址添加偏移量(十六进制数字)。这使得更容易对作为所设置的相应能力寄存器的一部分的寄存器进行寻址。
  • 宽度说明符(b、.w 或 .l)用于选择要读取或写入的字节数(1、2 或 4)。如果通过名称引用寄存器并且寄存器的宽度已知,则可以删除说明符。
  • 所有寄存器名称和宽度说明符都不区分大小写。

示例:

命令

  • 它指向命令寄存器中的值。如果将其替换为 4.w,它将指向相同的位置。

命令.l

  • 这指向命令和状态寄存器的值。

供应商_ID+1.b

  • 它指向供应商 ID 寄存器的高字节。

CAP_PM+2.w

  • 这对应于电源管理能力的第二个字。

ECAP108.l

  • 它指向 ID 为 0x108 的扩展功能的第一个 32 位字。

setpci –s 24:00.0 04.w=6

  • 为了使 MSI 中断工作,必须在 PCIe 配置中设置总线主控启用位。上述命令可用于设置命令寄存器中的“总线主控启用”位。 “24:00.0”是本例中的 BDF 号码。对于不同的设备,它会有所不同,并且还取决于系统。待寻址设备的正确BDF请参见对应的lspci日志。
  • 值 6 意味着我们正在设置内存启用位和总线主控启用位
  • setpci –s 24:00.0 4a.w=1

  • 还必须在 PCIe 配置空间中启用 MSI 寄存器,MSI 中断才能工作。在 UltraScale+ 器件中,它位于偏移量 0x48(也在 lspci 日志中显示为“功能:[48]”)。为此,请发出 PCIe 配置写入,将位 16(MSI 控制寄存器位 0)设置为 1;上面的命令就是这样做的

setpci -s 00:01.0 d0.b=42

  • 上述命令写入链路控制 2 寄存器以将速度设置为 Gen2。
  • 这里的值“2”表示 Gen2,另一个位是“时隙时钟”,它已启用,因此未更改。发出上述命令后,如果执行lspci,则会显示寄存器中的速度值已更改为Gen2。不过,这只是它再次进行链接训练时训练到的速度。
  • 要将链路速度更改为 Gen2,必须重新训练链路。这可以通过执行如下所示的命令来完成:
    • setpci -s 00:01.0 b0.b=62

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+node+mysql8.0,详细步骤及报错解决方案

1.下载需要安装的插件 下载express npm install express下载cors&#xff0c;用于处理接口跨域问题 npm install cors下载mysql npm install mysql 2.配置服务器 可以在vue项目的src同级创建server文件夹&#xff08;这里的位置可随意选择&#xff09; 然后依次创建&#…

【人工智能】因果推断与数据分析:用Python探索数据间的因果关系

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 因果推断是数据科学领域的一个重要方向,旨在发现变量间的因果关系,而不仅仅是相关性。本篇文章将从因果推断的理论基础出发,介绍因果关系的定义与建模方法,涵盖因果图(Causal Graph)、d-分离、反事实估计等…

并发修改导致MVCC脏写问题

并发修改导致MVCC脏写问题 一、概要 1.1 业务场景 数据库表结构设计&#xff1a; 一个主档数据&#xff0c;通过一个字段&#xff0c;逗号分隔的方式去关联其他明细信息的id。 如主档数据A&#xff0c;有3条明细数据与A关联&#xff0c;其id分别是1,2,3&#xff0c;那么其存…

[创业之路-198]:华为的成立发展与新中国的建立与发展路径的相似性比较

目录 一、公司比较 1、创业初期的艰难与挑战 2、坚持自主创新与研发 3、市场拓展与国际化战略 4、企业文化与社会责任 5、面临的挑战与应对策略 二、任正非管理企业的思想大量借鉴了毛泽东建国的思想 1、矛盾论与企业管理 2、群众路线与企业文化 3、战略思维与长远发…

深入解析与示例:ROS中的catkin_make构建过程

深入解析与示例&#xff1a;ROS中的catkin_make构建过程 catkin_make 是用于构建ROS&#xff08;Robot Operating System&#xff09;中的catkin软件包的命令行工具。它的主要功能是编译工作空间中所有catkin软件包&#xff0c;并确保按照依赖关系正确构建每个软件包。下面详细…

PugiXML,一个高效且简单的 C++ XML 解析库!

嗨&#xff0c;大家好&#xff01;我是一行。今天要给大家介绍 PugiXML&#xff0c;这可是 C 里处理 XML 数据的得力助手。它能轻松地读取、修改和写入 XML 文件&#xff0c;就像一个专业的 XML 小管家&#xff0c;不管是解析配置文件&#xff0c;还是处理网页数据&#xff0c;…

SSE(Server-Sent Events)主动推送消息

说明 使用Java开发web应用&#xff0c;大多数时候我们提供的接口返回数据都是一次性完整返回。有些时候&#xff0c;我们也需要提供流式接口持续写出数据&#xff0c;以下提供一种简单的方式。 SSE&#xff08;Server-Sent Events&#xff09; SSE 是一种允许服务器单向发送事…

Java四大内部类之局部内部类、匿名内部类

目录 一、局部内部类 二、匿名内部类 基于接口的匿名内部类 基于类的匿名内部类 三、匿名内部类的实践 类的五大成员&#xff1a;属性、方法、构造器、代码块、内部类 内部类的分类 定义在外部类局部位置上&#xff08;比如说方法内&#xff09;&#xff1a; 局部内部类&…

请求go web后端接口 java安卓端播放视频

前端代码 添加gradle依赖 implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.0 添加访问网络权限 <uses-permission android:name"android.permission.INTERNET" />允许http 请求请求 andro…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

作者&#xff1a;羿莉 背景 对企业数据进行敏感数据扫描和保护可以提升企业或组织的数据安全。一方面敏感数据可能包括个人身份信息、财务记录、医疗记录等&#xff0c;定期扫描这些数据可以防止未经授权的访问和泄露。 另一方面&#xff0c;许多国家和地区都有关于数据保护的…

CSS学习记录14

CSS不透明度 opacity属性指定元素的不透明度/透明度。opacity属性的取值范围为0.0 ~ 1.0。 值越低&#xff0c;越透明&#xff1a; img {opacity: 0.5; } opacity属性通常与:hover选择器一同使用&#xff0c;这样就可以在鼠标悬停时更改不透明度&#xff1a; img {opacity: 0…

【YashanDB知识库】如何处理yasql输入交互模式下单行字符总量超过限制4000字节

现象 在yasql执行sql语句后报错&#xff1a;YASQL-00021 input line overflow (>4000 byte at line 4) 原因 yasql在交互模式模式下单行字符总量限制4000字节&#xff0c;超出该限制即报错。 交互式模式下&#xff0c;yasql会显示一个提示符&#xff0c;通常是 SQL>…

为何ZLG致远电子要推出LGA嵌入式核心板?

LGA嵌入式核心板究竟有什么好&#xff1f;能让ZLG致远电子陆续推出了5个系列12个型号的LGA嵌入式核心板。 到目前为止&#xff0c;ZLG致远电子一共推出了M1106/M1107、M1126、M6Y2C、 A6Y2C、MR6450等5个系列&#xff0c;共12个型号的LGA形态的嵌入式核心板&#xff0c;涵盖了A…

开源实时多模态AI Agent,搭载Gemini多模态API(在线体验)

今天发现一个惊艳的开源项目&#xff0c;利用多模态大模型API进行多智能体交互。支持RAG、搜索等。 TEN Agent 是一款由 TEN 提供支持的对​​话式 AI&#xff0c;集成了 Gemini 2.0 Multimodal Live API、OpenAI Realtime API、RTC 等。它提供实时的看、听和说功能&#xff0…

C++小白实习日记——Pollnet,Efvi,UDP,数据类型转换(下)

内容太多了&#xff0c;这篇记录UDP接收端 一&#xff0c;UDP接收端接收数据 有了pollnet这个开源项目的支持&#xff0c;接收端的步骤为&#xff1a;1&#xff09;初始化硬编码的参数&#xff1a;接口&#xff0c;IP和端口 2&#xff09;创建接收文件.csv 3&#xff09;读…

【ROS2】坐标TF入门

1、简介 1)定义: TF(TransForm)是用于坐标系管理的工具,它提供了快速、高效的坐标变换和时间同步功能。 2)坐标系 坐标系:在机器人系统中,存在多个坐标系,如基坐标系(Base Frame)、世界坐标系(World Frame)、工具坐标系、工件坐标系等。这些坐标系之间的关系在机…

[创业之路-197]:华为的成立发展与新中国的建立与发展路径的相似性比较

目录 一、公司比较 1、创业初期的艰难与挑战 2、坚持自主创新与研发 3、市场拓展与国际化战略 4、企业文化与社会责任 5、面临的挑战与应对策略 二、任正非管理企业的思想大量借鉴了毛泽东建国的思想 1、矛盾论与企业管理 2、群众路线与企业文化 3、战略思维与长远发…

Loadsh源码分析-filter,find,findLast,reject,partition

lodash源码研读之filter,find,findLast,reject,partition 一、源码地址 GitHub 地址: GitHub - lodash/lodash: A modern JavaScript utility library delivering modularity, performance, & extras.官方文档地址: Lodash 官方文档 二、结构分析 结构框图省略。 三、函…

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之字符类型

要进行计算机程序设计&#xff0c;不仅仅进行科学数值类型计算&#xff0c;还需要处理一些文本信息&#xff0c;这就需要字符类型。在C中字符可以表示字母、符号等&#xff0c;在编程的时候&#xff0c;通常使用一对单引号括起来&#xff0c;例如&#xff1a;A,a,B,b,0等。字符…

Spring Boot 2.1.7 数据源自动加载过程详解

在 Spring Boot 中&#xff0c;数据源的自动配置是框架中一个关键功能&#xff0c;本文将以 Spring Boot 2.1.7 版本为例&#xff0c;详细讲解在单数据源情况下数据源是如何自动加载的。我们通过源码分析&#xff0c;追踪整个加载流程。 1. 自动配置类的发现 Spring Boot 使用…