forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
5.9 KiB
235 lines
5.9 KiB
.. 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
|
|
|