当pcie链路信号质量不好,导致Pcie链路报错时需要将链路降速进行测试。链路速率可以通过pcie功能寄存器(PCI Express Capabilities Register)进行配置。Pcie功能寄存器可以通过配置空间中Capabilities Register (0x34)寄存器来查找首地址。

PCIE 设备基本配置空间定义如下:

PCIE 桥基本配置空间如下:

配置空间Capabilities Register (0x34)地址存放Capabilitie首地址。通过lspci命令查看一个pcie桥片配置空间如下:

配置空间0x34地址值为0x40

另外通过lspci –vvv也可以查看配置空间信息如下:

Capabilities也是0x40。

功能寄存器定义如下:

上面桥片功能寄存器对应的如下:

功能寄存器对应的相关值如下:

PCI Expres Cap ID:0x10

Next Cap Pointer:0x80

PCI Express Capabilities Register:0x0042(根桥端口Root Port of PCI Express Root Complex*)

Link Capabilities:0x01717c13(支持8GT/s)

Link Control Register: 0x0,寄存器定义如下:

Link Control 寄存器第Retrain Link (5)位设置成1时速率会重新训练。

Link Control 2 Register: 0x0001,寄存器定义如下:

Link Control 2 寄存器Target Link Speed (0-3位)可以设置速率。

0000b: 强制2.5GT/s

0001b: 2.5GT/s

0010b: 5.0GT/s

重新设置pcie速率配置上面两个寄存器:
1、修改Link Control 2 Register的低4位,设置速率

2、Link Control Register第5位置1,重新训练速率。

修改pcie配置寄存器可以通过setpci工具,输入命令setpci –dumpregs可以查看pcie配置空间可设置寄存器名称,如下所示:setpci --dumpregs

cap pos w name

00 W VENDOR_ID

02 W DEVICE_ID

04 W COMMAND

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

其中10 00 - CAP_EXP表示PCIE功能寄存器,其中10是功能ID。用CAP_EXP+偏移就能读写对应功能寄存器。例如读取功能寄存器Link Control(偏移0x10)的值,输入: setpci -s 00:1c.0 CAP_EXP+0x10.w。

如果要重新强制PCIE速率为2.5GT/s,可以输入以下命令:

setpci -s 00:1c.0 CAP_EXP+0x30.b=0x0

setpci -s 00:1c.0 CAP_EXP+0x10.b=0x20

.b:1字节 .w :2个字节 .l: 4个字节

PCIE配置空间设置相关推荐

  1. 7.PCIE配置空间读写软件

    软件-7.PCIE配置空间读写 软件-7.PCIE配置空间读写 软件-7.PCIE配置空间读写 软件读写配置空间 驱动层接口 原理分析 驱动层代码接口 驱动层接口与原理 相关参考 基础知识 raw_p ...

  2. PCIe配置空间和PCI设备中的寄存器

    1.访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pd ...

  3. PCIe 配置空间:Status 寄存器

    1. Status 寄存器位置 2. Status 寄存器细节 2.1 特殊位 对于 PCIe 设备,status 寄存器中有几个 bit 的值是固定的. Bit 4:Capability List, ...

  4. linux配置pcie无线网卡,【Linux c】读写pcie配置空间(安装lib库)

    readme.txt + pcie.c + in.txt +Makefile 可参考源码是: lspci readme.txt Please open the terminal in your lin ...

  5. PCIe学习笔记之pcie结构和配置空间

    PCIe概述 PCI Express,是计算机总线PCI的一种,它沿用现有的PCI编程概念及通信标准,但建基于更快的串行通信系统. PCIE总线使用的是高速差分总线,并采用端到端的连接方式, 现在的高 ...

  6. pci配置基地址_PCI/PCIe基础——配置空间

    简介 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地址空间. 映射地址在BIOS/UEFI下指定(如果有的话,对于使用非BIOS启动的OS,不清楚),它有两种类型,一种是MM ...

  7. PowerPC下PCI、PCI-E设备的配置空间

    PCI总线规定访问配置空间的总线事务,称为配置读写事务.不同于存储访问事务使用存储地址访问,而是使用ID号来寻址访问PCI配置空间. PCI设备的ID号由总线号(BUS NUMBER).设备号(DEV ...

  8. PCIE设备访问及其配置空间

    早期的PCI时期,系统为每个PCI设备分配的内存大小仅有256个Bytes.到后来的PCIE时期,随着设备性能增强,PCIE设备的配置空间扩展至4K个Bytes.在这里需要注意: PCIE一共支持25 ...

  9. PCIe ECAM机制访问PCIE的配置空间

    1.PCIe ECAM机制 PCI Express Enhanced Configuration Access Mechanism (ECAM)是访问PCIe配置空间的一种机制.是将PCIe的配置空间 ...

  10. 初学 PCIe System (一) - PCIe介绍及其配置空间

    第二部分在:初学 PCIe System (二) - 如何访问PCIe设备的配置空间 PCI Express 介绍 PCI Express (PCIe) 属于第三代的高效能 I/O 汇流排,PCIe ...

最新文章

  1. 机器学习/数据挖掘/算法岗位面试题汇总
  2. 报名|PMCAFF原创专栏作者百人计划
  3. VTK:直线网格之VisualizeRectilinearGrid
  4. Android之上下文context
  5. Python | 浅谈并发锁与死锁问题
  6. ping端口怎么ping_英雄联盟手游ping信号怎么发送 ping信号发送方法介绍_游戏攻略...
  7. 关于tomcat的思考
  8. docker镜像与容器操作流程
  9. SaaS架构设计之高性能的Multi-Tenant最佳实践
  10. 利用Java-JACOB操作WORD文档2
  11. Kubernetes 小白学习笔记(30)--kubernetes云原生应用开发-service mesh介绍
  12. c语言输入m行m列的二维数组,编写一个函数,用于计算具有n行和m列的二维数组中指定列的平均值以及数组各行的和的最小值。...
  13. SAP中文件的上传和下载
  14. Java学习手册:Java面向对象面试问题
  15. 计算机课题名称怎么取,课题名称:微型计算机操作入门
  16. 盲盒商城app开发需要具备哪些核心功能,盲盒商城app源码成品分享
  17. 如何在vm虚拟机里面安装win10操作系统
  18. fig-tlo_PHP-FIG,Quo Vadis?
  19. 联合利华营销||轻扬是如何突出重围做到无懈可击的?
  20. 项目管理 | 如何进行项目风险识别?

热门文章

  1. python header函数_Header函数
  2. javascript输入正三角倒三角
  3. 推荐!十个好用的百度网盘搜索引擎
  4. 关于网页背景图怎样自动适应屏幕大小
  5. PHP TP模板下的微博登录(wap)
  6. C++题目分享之锯木头
  7. Spring boot出现java.awt.HeadlessException【已解决】
  8. 人生就像剥洋葱,当你片片剥开,已经满眼泪水| 花一天时间,老机器安装Windows 98
  9. 主成成分分析(Principal Component Analysis)
  10. 手机银行告别“鸡肋”