Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1.. SPDX-License-Identifier: GPL-2.0
2
3===================
4PCI Test User Guide
5===================
6
7:Author: Kishon Vijay Abraham I <kishon@ti.com>
8
9This document is a guide to help users use pci-epf-test function driver
10and pci_endpoint_test host driver for testing PCI. The list of steps to
11be followed in the host side and EP side is given below.
12
13Endpoint Device
14===============
15
16Endpoint Controller Devices
17---------------------------
18
19To find the list of endpoint controller devices in the system::
20
21 # ls /sys/class/pci_epc/
22 51000000.pcie_ep
23
24If PCI_ENDPOINT_CONFIGFS is enabled::
25
26 # ls /sys/kernel/config/pci_ep/controllers
27 51000000.pcie_ep
28
29
30Endpoint Function Drivers
31-------------------------
32
33To find the list of endpoint function drivers in the system::
34
35 # ls /sys/bus/pci-epf/drivers
36 pci_epf_test
37
38If PCI_ENDPOINT_CONFIGFS is enabled::
39
40 # ls /sys/kernel/config/pci_ep/functions
41 pci_epf_test
42
43
44Creating pci-epf-test Device
45----------------------------
46
47PCI endpoint function device can be created using the configfs. To create
48pci-epf-test device, the following commands can be used::
49
50 # mount -t configfs none /sys/kernel/config
51 # cd /sys/kernel/config/pci_ep/
52 # mkdir functions/pci_epf_test/func1
53
54The "mkdir func1" above creates the pci-epf-test function device that will
55be probed by pci_epf_test driver.
56
57The PCI endpoint framework populates the directory with the following
58configurable fields::
59
60 # ls functions/pci_epf_test/func1
61 baseclass_code interrupt_pin progif_code subsys_id
62 cache_line_size msi_interrupts revid subsys_vendorid
63 deviceid msix_interrupts subclass_code vendorid
64
65The PCI endpoint function driver populates these entries with default values
66when the device is bound to the driver. The pci-epf-test driver populates
67vendorid with 0xffff and interrupt_pin with 0x0001::
68
69 # cat functions/pci_epf_test/func1/vendorid
70 0xffff
71 # cat functions/pci_epf_test/func1/interrupt_pin
72 0x0001
73
74
75Configuring pci-epf-test Device
76-------------------------------
77
78The user can configure the pci-epf-test device using configfs entry. In order
79to change the vendorid and the number of MSI interrupts used by the function
80device, the following commands can be used::
81
82 # echo 0x104c > functions/pci_epf_test/func1/vendorid
83 # echo 0xb500 > functions/pci_epf_test/func1/deviceid
84 # echo 16 > functions/pci_epf_test/func1/msi_interrupts
85 # echo 8 > functions/pci_epf_test/func1/msix_interrupts
86
87
88Binding pci-epf-test Device to EP Controller
89--------------------------------------------
90
91In order for the endpoint function device to be useful, it has to be bound to
92a PCI endpoint controller driver. Use the configfs to bind the function
93device to one of the controller driver present in the system::
94
95 # ln -s functions/pci_epf_test/func1 controllers/51000000.pcie_ep/
96
97Once the above step is completed, the PCI endpoint is ready to establish a link
98with the host.
99
100
101Start the Link
102--------------
103
104In order for the endpoint device to establish a link with the host, the _start_
105field should be populated with '1'::
106
107 # echo 1 > controllers/51000000.pcie_ep/start
108
109
110RootComplex Device
111==================
112
113lspci Output
114------------
115
116Note that the devices listed here correspond to the value populated in 1.4
117above::
118
119 00:00.0 PCI bridge: Texas Instruments Device 8888 (rev 01)
120 01:00.0 Unassigned class [ff00]: Texas Instruments Device b500
121
122
123Using Endpoint Test function Device
124-----------------------------------
125
126pcitest.sh added in tools/pci/ can be used to run all the default PCI endpoint
127tests. To compile this tool the following commands should be used::
128
129 # cd <kernel-dir>
130 # make -C tools/pci
131
132or if you desire to compile and install in your system::
133
134 # cd <kernel-dir>
135 # make -C tools/pci install
136
137The tool and script will be located in <rootfs>/usr/bin/
138
139
140pcitest.sh Output
141~~~~~~~~~~~~~~~~~
142::
143
144 # pcitest.sh
145 BAR tests
146
147 BAR0: OKAY
148 BAR1: OKAY
149 BAR2: OKAY
150 BAR3: OKAY
151 BAR4: NOT OKAY
152 BAR5: NOT OKAY
153
154 Interrupt tests
155
156 SET IRQ TYPE TO LEGACY: OKAY
157 LEGACY IRQ: NOT OKAY
158 SET IRQ TYPE TO MSI: OKAY
159 MSI1: OKAY
160 MSI2: OKAY
161 MSI3: OKAY
162 MSI4: OKAY
163 MSI5: OKAY
164 MSI6: OKAY
165 MSI7: OKAY
166 MSI8: OKAY
167 MSI9: OKAY
168 MSI10: OKAY
169 MSI11: OKAY
170 MSI12: OKAY
171 MSI13: OKAY
172 MSI14: OKAY
173 MSI15: OKAY
174 MSI16: OKAY
175 MSI17: NOT OKAY
176 MSI18: NOT OKAY
177 MSI19: NOT OKAY
178 MSI20: NOT OKAY
179 MSI21: NOT OKAY
180 MSI22: NOT OKAY
181 MSI23: NOT OKAY
182 MSI24: NOT OKAY
183 MSI25: NOT OKAY
184 MSI26: NOT OKAY
185 MSI27: NOT OKAY
186 MSI28: NOT OKAY
187 MSI29: NOT OKAY
188 MSI30: NOT OKAY
189 MSI31: NOT OKAY
190 MSI32: NOT OKAY
191 SET IRQ TYPE TO MSI-X: OKAY
192 MSI-X1: OKAY
193 MSI-X2: OKAY
194 MSI-X3: OKAY
195 MSI-X4: OKAY
196 MSI-X5: OKAY
197 MSI-X6: OKAY
198 MSI-X7: OKAY
199 MSI-X8: OKAY
200 MSI-X9: NOT OKAY
201 MSI-X10: NOT OKAY
202 MSI-X11: NOT OKAY
203 MSI-X12: NOT OKAY
204 MSI-X13: NOT OKAY
205 MSI-X14: NOT OKAY
206 MSI-X15: NOT OKAY
207 MSI-X16: NOT OKAY
208 [...]
209 MSI-X2047: NOT OKAY
210 MSI-X2048: NOT OKAY
211
212 Read Tests
213
214 SET IRQ TYPE TO MSI: OKAY
215 READ ( 1 bytes): OKAY
216 READ ( 1024 bytes): OKAY
217 READ ( 1025 bytes): OKAY
218 READ (1024000 bytes): OKAY
219 READ (1024001 bytes): OKAY
220
221 Write Tests
222
223 WRITE ( 1 bytes): OKAY
224 WRITE ( 1024 bytes): OKAY
225 WRITE ( 1025 bytes): OKAY
226 WRITE (1024000 bytes): OKAY
227 WRITE (1024001 bytes): OKAY
228
229 Copy Tests
230
231 COPY ( 1 bytes): OKAY
232 COPY ( 1024 bytes): OKAY
233 COPY ( 1025 bytes): OKAY
234 COPY (1024000 bytes): OKAY
235 COPY (1024001 bytes): OKAY