PCI TEST USERGUIDE Kishon Vijay Abraham I This document is a guide to help users use pci-epf-test function driver and pci_endpoint_test host driver for testing PCI. The list of steps to be followed in the host side and EP side is given below. 1. Endpoint Device 1.1 Endpoint Controller Devices To find the list of endpoint controller devices in the system: # ls /sys/class/pci_epc/ 51000000.pcie_ep If PCI_ENDPOINT_CONFIGFS is enabled # ls /sys/kernel/config/pci_ep/controllers 51000000.pcie_ep 1.2 Endpoint Function Drivers To find the list of endpoint function drivers in the system: # ls /sys/bus/pci-epf/drivers pci_epf_test If PCI_ENDPOINT_CONFIGFS is enabled # ls /sys/kernel/config/pci_ep/functions pci_epf_test 1.3 Creating pci-epf-test Device PCI endpoint function device can be created using the configfs. To create pci-epf-test device, the following commands can be used # mount -t configfs none /sys/kernel/config # cd /sys/kernel/config/pci_ep/ # mkdir functions/pci_epf_test/func1 The "mkdir func1" above creates the pci-epf-test function device that will be probed by pci_epf_test driver. The PCI endpoint framework populates the directory with the following configurable fields. # 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 The PCI endpoint function driver populates these entries with default values when the device is bound to the driver. The pci-epf-test driver populates vendorid with 0xffff and interrupt_pin with 0x0001 # cat functions/pci_epf_test/func1/vendorid 0xffff # cat functions/pci_epf_test/func1/interrupt_pin 0x0001 1.4 Configuring pci-epf-test Device The user can configure the pci-epf-test device using configfs entry. In order to change the vendorid and the number of MSI interrupts used by the function device, the following commands can be used. # 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 1.5 Binding pci-epf-test Device to EP Controller In order for the endpoint function device to be useful, it has to be bound to a PCI endpoint controller driver. Use the configfs to bind the function device to one of the controller driver present in the system. # ln -s functions/pci_epf_test/func1 controllers/51000000.pcie_ep/ Once the above step is completed, the PCI endpoint is ready to establish a link with the host. 1.6 Start the Link In order for the endpoint device to establish a link with the host, the _start_ field should be populated with '1'. # echo 1 > controllers/51000000.pcie_ep/start 2. RootComplex Device 2.1 lspci Output Note that the devices listed here correspond to the value populated in 1.4 above 00:00.0 PCI bridge: Texas Instruments Device 8888 (rev 01) 01:00.0 Unassigned class [ff00]: Texas Instruments Device b500 2.2 Using Endpoint Test function Device pcitest.sh added in tools/pci/ can be used to run all the default PCI endpoint tests. To compile this tool the following commands should be used: # cd # make -C tools/pci or if you desire to compile and install in your system: # cd # make -C tools/pci install The tool and script will be located in /usr/bin/ 2.2.1 pcitest.sh Output # 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