PCIE配置空间设置
通过设置pcie配置空间重新训练链路速率
当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个字节
更多推荐
所有评论(0)