hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
.. SPDX-License-Identifier: GPL-2.0
 
===================
PCI Test User Guide
===================
 
:Author: 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.
 
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