204 lines
5.6 KiB
Plaintext
204 lines
5.6 KiB
Plaintext
|
PCI TEST USERGUIDE
|
||
|
Kishon Vijay Abraham I <kishon@ti.com>
|
||
|
|
||
|
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. Before pcitest.sh can be used pcitest.c should be compiled using the
|
||
|
following commands.
|
||
|
|
||
|
cd <kernel-dir>
|
||
|
make headers_install ARCH=arm
|
||
|
arm-linux-gnueabihf-gcc -Iusr/include tools/pci/pcitest.c -o pcitest
|
||
|
cp pcitest <rootfs>/usr/sbin/
|
||
|
cp tools/pci/pcitest.sh <rootfs>
|
||
|
|
||
|
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
|