123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- .. SPDX-License-Identifier: GPL-2.0
- ===================
- PCI Test User Guide
- ===================
- :Author: Kishon Vijay Abraham I <[email protected]>
- 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.
- Endpoint Device
- ===============
- 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
- 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
- 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
- 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
- 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.
- 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
- RootComplex Device
- ==================
- 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
- 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 <kernel-dir>
- # make -C tools/pci
- or if you desire to compile and install in your system::
- # cd <kernel-dir>
- # make -C tools/pci install
- The tool and script will be located in <rootfs>/usr/bin/
- 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
|