diff options
author | Gustavo Pimentel <gustavo.pimentel@synopsys.com> | 2018-07-19 04:32:21 -0400 |
---|---|---|
committer | Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | 2018-07-19 06:47:13 -0400 |
commit | 0653217c180f0e5332ef75f7299220e644091b20 (patch) | |
tree | 8c55fa688fcc763e16417d0a7171a71dee3a44eb | |
parent | e03327122e2c8e6ae4565ef5b3d3cbe4364546a1 (diff) |
tools: PCI: Add MSI-X support
Add MSI-X support to pcitest tool.
Modify pcitest.sh script to accommodate MSI-X interrupt tests.
Update documentation accordingly.
Signed-off-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
-rw-r--r-- | Documentation/PCI/endpoint/pci-test-howto.txt | 36 | ||||
-rw-r--r-- | tools/pci/pcitest.c | 51 | ||||
-rw-r--r-- | tools/pci/pcitest.sh | 15 |
3 files changed, 87 insertions, 15 deletions
diff --git a/Documentation/PCI/endpoint/pci-test-howto.txt b/Documentation/PCI/endpoint/pci-test-howto.txt index 65f1a137e35c..e40cf0fb58d7 100644 --- a/Documentation/PCI/endpoint/pci-test-howto.txt +++ b/Documentation/PCI/endpoint/pci-test-howto.txt | |||
@@ -121,7 +121,9 @@ following commands. | |||
121 | 121 | ||
122 | Interrupt tests | 122 | Interrupt tests |
123 | 123 | ||
124 | SET IRQ TYPE TO LEGACY: OKAY | ||
124 | LEGACY IRQ: NOT OKAY | 125 | LEGACY IRQ: NOT OKAY |
126 | SET IRQ TYPE TO MSI: OKAY | ||
125 | MSI1: OKAY | 127 | MSI1: OKAY |
126 | MSI2: OKAY | 128 | MSI2: OKAY |
127 | MSI3: OKAY | 129 | MSI3: OKAY |
@@ -154,24 +156,30 @@ following commands. | |||
154 | MSI30: NOT OKAY | 156 | MSI30: NOT OKAY |
155 | MSI31: NOT OKAY | 157 | MSI31: NOT OKAY |
156 | MSI32: NOT OKAY | 158 | MSI32: NOT OKAY |
157 | MSIX1: OKAY | 159 | SET IRQ TYPE TO MSI-X: OKAY |
158 | MSIX2: OKAY | 160 | MSI-X1: OKAY |
159 | MSIX3: OKAY | 161 | MSI-X2: OKAY |
160 | MSIX4: OKAY | 162 | MSI-X3: OKAY |
161 | MSIX5: OKAY | 163 | MSI-X4: OKAY |
162 | MSIX6: OKAY | 164 | MSI-X5: OKAY |
163 | MSIX7: OKAY | 165 | MSI-X6: OKAY |
164 | MSIX8: OKAY | 166 | MSI-X7: OKAY |
165 | MSIX9: NOT OKAY | 167 | MSI-X8: OKAY |
166 | MSIX10: NOT OKAY | 168 | MSI-X9: NOT OKAY |
167 | MSIX11: NOT OKAY | 169 | MSI-X10: NOT OKAY |
168 | MSIX12: NOT OKAY | 170 | MSI-X11: NOT OKAY |
169 | MSIX13: 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 | ||
170 | [...] | 176 | [...] |
171 | MSIX2048: NOT OKAY | 177 | MSI-X2047: NOT OKAY |
178 | MSI-X2048: NOT OKAY | ||
172 | 179 | ||
173 | Read Tests | 180 | Read Tests |
174 | 181 | ||
182 | SET IRQ TYPE TO MSI: OKAY | ||
175 | READ ( 1 bytes): OKAY | 183 | READ ( 1 bytes): OKAY |
176 | READ ( 1024 bytes): OKAY | 184 | READ ( 1024 bytes): OKAY |
177 | READ ( 1025 bytes): OKAY | 185 | READ ( 1025 bytes): OKAY |
diff --git a/tools/pci/pcitest.c b/tools/pci/pcitest.c index 9074b477bff0..af146bb03b4d 100644 --- a/tools/pci/pcitest.c +++ b/tools/pci/pcitest.c | |||
@@ -31,12 +31,17 @@ | |||
31 | #define BILLION 1E9 | 31 | #define BILLION 1E9 |
32 | 32 | ||
33 | static char *result[] = { "NOT OKAY", "OKAY" }; | 33 | static char *result[] = { "NOT OKAY", "OKAY" }; |
34 | static char *irq[] = { "LEGACY", "MSI", "MSI-X" }; | ||
34 | 35 | ||
35 | struct pci_test { | 36 | struct pci_test { |
36 | char *device; | 37 | char *device; |
37 | char barnum; | 38 | char barnum; |
38 | bool legacyirq; | 39 | bool legacyirq; |
39 | unsigned int msinum; | 40 | unsigned int msinum; |
41 | unsigned int msixnum; | ||
42 | int irqtype; | ||
43 | bool set_irqtype; | ||
44 | bool get_irqtype; | ||
40 | bool read; | 45 | bool read; |
41 | bool write; | 46 | bool write; |
42 | bool copy; | 47 | bool copy; |
@@ -65,6 +70,24 @@ static int run_test(struct pci_test *test) | |||
65 | fprintf(stdout, "%s\n", result[ret]); | 70 | fprintf(stdout, "%s\n", result[ret]); |
66 | } | 71 | } |
67 | 72 | ||
73 | if (test->set_irqtype) { | ||
74 | ret = ioctl(fd, PCITEST_SET_IRQTYPE, test->irqtype); | ||
75 | fprintf(stdout, "SET IRQ TYPE TO %s:\t\t", irq[test->irqtype]); | ||
76 | if (ret < 0) | ||
77 | fprintf(stdout, "FAILED\n"); | ||
78 | else | ||
79 | fprintf(stdout, "%s\n", result[ret]); | ||
80 | } | ||
81 | |||
82 | if (test->get_irqtype) { | ||
83 | ret = ioctl(fd, PCITEST_GET_IRQTYPE); | ||
84 | fprintf(stdout, "GET IRQ TYPE:\t\t"); | ||
85 | if (ret < 0) | ||
86 | fprintf(stdout, "FAILED\n"); | ||
87 | else | ||
88 | fprintf(stdout, "%s\n", irq[ret]); | ||
89 | } | ||
90 | |||
68 | if (test->legacyirq) { | 91 | if (test->legacyirq) { |
69 | ret = ioctl(fd, PCITEST_LEGACY_IRQ, 0); | 92 | ret = ioctl(fd, PCITEST_LEGACY_IRQ, 0); |
70 | fprintf(stdout, "LEGACY IRQ:\t"); | 93 | fprintf(stdout, "LEGACY IRQ:\t"); |
@@ -83,6 +106,15 @@ static int run_test(struct pci_test *test) | |||
83 | fprintf(stdout, "%s\n", result[ret]); | 106 | fprintf(stdout, "%s\n", result[ret]); |
84 | } | 107 | } |
85 | 108 | ||
109 | if (test->msixnum > 0 && test->msixnum <= 2048) { | ||
110 | ret = ioctl(fd, PCITEST_MSIX, test->msixnum); | ||
111 | fprintf(stdout, "MSI-X%d:\t\t", test->msixnum); | ||
112 | if (ret < 0) | ||
113 | fprintf(stdout, "TEST FAILED\n"); | ||
114 | else | ||
115 | fprintf(stdout, "%s\n", result[ret]); | ||
116 | } | ||
117 | |||
86 | if (test->write) { | 118 | if (test->write) { |
87 | ret = ioctl(fd, PCITEST_WRITE, test->size); | 119 | ret = ioctl(fd, PCITEST_WRITE, test->size); |
88 | fprintf(stdout, "WRITE (%7ld bytes):\t\t", test->size); | 120 | fprintf(stdout, "WRITE (%7ld bytes):\t\t", test->size); |
@@ -133,7 +165,7 @@ int main(int argc, char **argv) | |||
133 | /* set default endpoint device */ | 165 | /* set default endpoint device */ |
134 | test->device = "/dev/pci-endpoint-test.0"; | 166 | test->device = "/dev/pci-endpoint-test.0"; |
135 | 167 | ||
136 | while ((c = getopt(argc, argv, "D:b:m:lrwcs:")) != EOF) | 168 | while ((c = getopt(argc, argv, "D:b:m:x:i:Ilrwcs:")) != EOF) |
137 | switch (c) { | 169 | switch (c) { |
138 | case 'D': | 170 | case 'D': |
139 | test->device = optarg; | 171 | test->device = optarg; |
@@ -151,6 +183,20 @@ int main(int argc, char **argv) | |||
151 | if (test->msinum < 1 || test->msinum > 32) | 183 | if (test->msinum < 1 || test->msinum > 32) |
152 | goto usage; | 184 | goto usage; |
153 | continue; | 185 | continue; |
186 | case 'x': | ||
187 | test->msixnum = atoi(optarg); | ||
188 | if (test->msixnum < 1 || test->msixnum > 2048) | ||
189 | goto usage; | ||
190 | continue; | ||
191 | case 'i': | ||
192 | test->irqtype = atoi(optarg); | ||
193 | if (test->irqtype < 0 || test->irqtype > 2) | ||
194 | goto usage; | ||
195 | test->set_irqtype = true; | ||
196 | continue; | ||
197 | case 'I': | ||
198 | test->get_irqtype = true; | ||
199 | continue; | ||
154 | case 'r': | 200 | case 'r': |
155 | test->read = true; | 201 | test->read = true; |
156 | continue; | 202 | continue; |
@@ -173,6 +219,9 @@ usage: | |||
173 | "\t-D <dev> PCI endpoint test device {default: /dev/pci-endpoint-test.0}\n" | 219 | "\t-D <dev> PCI endpoint test device {default: /dev/pci-endpoint-test.0}\n" |
174 | "\t-b <bar num> BAR test (bar number between 0..5)\n" | 220 | "\t-b <bar num> BAR test (bar number between 0..5)\n" |
175 | "\t-m <msi num> MSI test (msi number between 1..32)\n" | 221 | "\t-m <msi num> MSI test (msi number between 1..32)\n" |
222 | "\t-x <msix num> \tMSI-X test (msix number between 1..2048)\n" | ||
223 | "\t-i <irq type> \tSet IRQ type (0 - Legacy, 1 - MSI, 2 - MSI-X)\n" | ||
224 | "\t-I Get current IRQ type configured\n" | ||
176 | "\t-l Legacy IRQ test\n" | 225 | "\t-l Legacy IRQ test\n" |
177 | "\t-r Read buffer test\n" | 226 | "\t-r Read buffer test\n" |
178 | "\t-w Write buffer test\n" | 227 | "\t-w Write buffer test\n" |
diff --git a/tools/pci/pcitest.sh b/tools/pci/pcitest.sh index 77e8c85ef744..75ed48ff2990 100644 --- a/tools/pci/pcitest.sh +++ b/tools/pci/pcitest.sh | |||
@@ -16,7 +16,10 @@ echo | |||
16 | echo "Interrupt tests" | 16 | echo "Interrupt tests" |
17 | echo | 17 | echo |
18 | 18 | ||
19 | pcitest -i 0 | ||
19 | pcitest -l | 20 | pcitest -l |
21 | |||
22 | pcitest -i 1 | ||
20 | msi=1 | 23 | msi=1 |
21 | 24 | ||
22 | while [ $msi -lt 33 ] | 25 | while [ $msi -lt 33 ] |
@@ -26,9 +29,21 @@ do | |||
26 | done | 29 | done |
27 | echo | 30 | echo |
28 | 31 | ||
32 | pcitest -i 2 | ||
33 | msix=1 | ||
34 | |||
35 | while [ $msix -lt 2049 ] | ||
36 | do | ||
37 | pcitest -x $msix | ||
38 | msix=`expr $msix + 1` | ||
39 | done | ||
40 | echo | ||
41 | |||
29 | echo "Read Tests" | 42 | echo "Read Tests" |
30 | echo | 43 | echo |
31 | 44 | ||
45 | pcitest -i 1 | ||
46 | |||
32 | pcitest -r -s 1 | 47 | pcitest -r -s 1 |
33 | pcitest -r -s 1024 | 48 | pcitest -r -s 1024 |
34 | pcitest -r -s 1025 | 49 | pcitest -r -s 1025 |