9.5. PCI 测试用户指南¶
- 作者:
Kishon Vijay Abraham I <kishon@ti.com>
本文档旨在指导用户使用 pci-epf-test 功能驱动程序和 pci_endpoint_test 主机驱动程序进行 PCI 测试。下面给出了主机端和 EP 端需要遵循的步骤列表。
9.5.1. 端点设备¶
9.5.1.1. 端点控制器设备¶
查找系统中端点控制器设备的列表
# ls /sys/class/pci_epc/
51000000.pcie_ep
如果启用了 PCI_ENDPOINT_CONFIGFS
# ls /sys/kernel/config/pci_ep/controllers
51000000.pcie_ep
9.5.1.2. 端点功能驱动程序¶
查找系统中端点功能驱动程序的列表
# ls /sys/bus/pci-epf/drivers
pci_epf_test
如果启用了 PCI_ENDPOINT_CONFIGFS
# ls /sys/kernel/config/pci_ep/functions
pci_epf_test
9.5.1.3. 创建 pci-epf-test 设备¶
可以使用 configfs 创建 PCI 端点功能设备。要创建 pci-epf-test 设备,可以使用以下命令
# mount -t configfs none /sys/kernel/config
# cd /sys/kernel/config/pci_ep/
# mkdir functions/pci_epf_test/func1
上面的“mkdir func1”创建了将由 pci_epf_test 驱动程序探测的 pci-epf-test 功能设备。
PCI 端点框架使用以下可配置字段填充目录
# ls functions/pci_epf_test/func1
baseclass_code interrupt_pin progif_code subsys_id
cache_line_size msi_interrupts revid subsys_vendorid
deviceid msix_interrupts subclass_code vendorid
当设备绑定到驱动程序时,PCI 端点功能驱动程序会使用默认值填充这些条目。pci-epf-test 驱动程序将 vendorid 填充为 0xffff,interrupt_pin 填充为 0x0001
# cat functions/pci_epf_test/func1/vendorid
0xffff
# cat functions/pci_epf_test/func1/interrupt_pin
0x0001
9.5.1.4. 配置 pci-epf-test 设备¶
用户可以使用 configfs 条目配置 pci-epf-test 设备。为了更改 vendorid 和功能设备使用的 MSI 中断的数量,可以使用以下命令
# echo 0x104c > functions/pci_epf_test/func1/vendorid
# echo 0xb500 > functions/pci_epf_test/func1/deviceid
# echo 16 > functions/pci_epf_test/func1/msi_interrupts
# echo 8 > functions/pci_epf_test/func1/msix_interrupts
9.5.1.5. 将 pci-epf-test 设备绑定到 EP 控制器¶
为了使端点功能设备有用,必须将其绑定到 PCI 端点控制器驱动程序。使用 configfs 将功能设备绑定到系统中存在的某个控制器驱动程序
# ln -s functions/pci_epf_test/func1 controllers/51000000.pcie_ep/
完成上述步骤后,PCI 端点就可以与主机建立链接了。
9.5.1.6. 启动链接¶
为了使端点设备与主机建立链接,应将 _start_ 字段填充为“1”
# echo 1 > controllers/51000000.pcie_ep/start
9.5.2. 根复合体设备¶
9.5.2.1. lspci 输出¶
请注意,此处列出的设备对应于上面 1.4 中填充的值
00:00.0 PCI bridge: Texas Instruments Device 8888 (rev 01)
01:00.0 Unassigned class [ff00]: Texas Instruments Device b500
9.5.2.2. 使用端点测试功能设备¶
tools/pci/ 中添加的 pcitest.sh 可用于运行所有默认的 PCI 端点测试。要编译此工具,应使用以下命令
# cd <kernel-dir>
# make -C tools/pci
或者,如果您希望在您的系统中编译和安装
# cd <kernel-dir>
# make -C tools/pci install
该工具和脚本将位于 <rootfs>/usr/bin/ 中
9.5.2.2.1. pcitest.sh 输出¶
# pcitest.sh
BAR tests
BAR0: OKAY
BAR1: OKAY
BAR2: OKAY
BAR3: OKAY
BAR4: NOT OKAY
BAR5: NOT OKAY
Interrupt tests
SET IRQ TYPE TO LEGACY: OKAY
LEGACY IRQ: NOT OKAY
SET IRQ TYPE TO MSI: OKAY
MSI1: OKAY
MSI2: OKAY
MSI3: OKAY
MSI4: OKAY
MSI5: OKAY
MSI6: OKAY
MSI7: OKAY
MSI8: OKAY
MSI9: OKAY
MSI10: OKAY
MSI11: OKAY
MSI12: OKAY
MSI13: OKAY
MSI14: OKAY
MSI15: OKAY
MSI16: OKAY
MSI17: NOT OKAY
MSI18: NOT OKAY
MSI19: NOT OKAY
MSI20: NOT OKAY
MSI21: NOT OKAY
MSI22: NOT OKAY
MSI23: NOT OKAY
MSI24: NOT OKAY
MSI25: NOT OKAY
MSI26: NOT OKAY
MSI27: NOT OKAY
MSI28: NOT OKAY
MSI29: NOT OKAY
MSI30: NOT OKAY
MSI31: NOT OKAY
MSI32: NOT OKAY
SET IRQ TYPE TO MSI-X: OKAY
MSI-X1: OKAY
MSI-X2: OKAY
MSI-X3: OKAY
MSI-X4: OKAY
MSI-X5: OKAY
MSI-X6: OKAY
MSI-X7: OKAY
MSI-X8: OKAY
MSI-X9: NOT OKAY
MSI-X10: NOT OKAY
MSI-X11: NOT OKAY
MSI-X12: NOT OKAY
MSI-X13: NOT OKAY
MSI-X14: NOT OKAY
MSI-X15: NOT OKAY
MSI-X16: NOT OKAY
[...]
MSI-X2047: NOT OKAY
MSI-X2048: NOT OKAY
Read Tests
SET IRQ TYPE TO MSI: OKAY
READ ( 1 bytes): OKAY
READ ( 1024 bytes): OKAY
READ ( 1025 bytes): OKAY
READ (1024000 bytes): OKAY
READ (1024001 bytes): OKAY
Write Tests
WRITE ( 1 bytes): OKAY
WRITE ( 1024 bytes): OKAY
WRITE ( 1025 bytes): OKAY
WRITE (1024000 bytes): OKAY
WRITE (1024001 bytes): OKAY
Copy Tests
COPY ( 1 bytes): OKAY
COPY ( 1024 bytes): OKAY
COPY ( 1025 bytes): OKAY
COPY (1024000 bytes): OKAY
COPY (1024001 bytes): OKAY