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
236