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.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