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