1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Test driver to test endpoint functionality
4 *
5 * Copyright (C) 2017 Texas Instruments
6 * Author: Kishon Vijay Abraham I <kishon@ti.com>
7 */
8
9 #include <linux/crc32.h>
10 #include <linux/delay.h>
11 #include <linux/dmaengine.h>
12 #include <linux/io.h>
13 #include <linux/module.h>
14 #include <linux/msi.h>
15 #include <linux/slab.h>
16 #include <linux/pci_ids.h>
17 #include <linux/random.h>
18
19 #include <linux/pci-epc.h>
20 #include <linux/pci-epf.h>
21 #include <linux/pci-ep-msi.h>
22 #include <linux/pci_regs.h>
23
24 #define IRQ_TYPE_INTX 0
25 #define IRQ_TYPE_MSI 1
26 #define IRQ_TYPE_MSIX 2
27
28 #define COMMAND_RAISE_INTX_IRQ BIT(0)
29 #define COMMAND_RAISE_MSI_IRQ BIT(1)
30 #define COMMAND_RAISE_MSIX_IRQ BIT(2)
31 #define COMMAND_READ BIT(3)
32 #define COMMAND_WRITE BIT(4)
33 #define COMMAND_COPY BIT(5)
34 #define COMMAND_ENABLE_DOORBELL BIT(6)
35 #define COMMAND_DISABLE_DOORBELL BIT(7)
36 #define COMMAND_BAR_SUBRANGE_SETUP BIT(8)
37 #define COMMAND_BAR_SUBRANGE_CLEAR BIT(9)
38
39 #define STATUS_READ_SUCCESS BIT(0)
40 #define STATUS_READ_FAIL BIT(1)
41 #define STATUS_WRITE_SUCCESS BIT(2)
42 #define STATUS_WRITE_FAIL BIT(3)
43 #define STATUS_COPY_SUCCESS BIT(4)
44 #define STATUS_COPY_FAIL BIT(5)
45 #define STATUS_IRQ_RAISED BIT(6)
46 #define STATUS_SRC_ADDR_INVALID BIT(7)
47 #define STATUS_DST_ADDR_INVALID BIT(8)
48 #define STATUS_DOORBELL_SUCCESS BIT(9)
49 #define STATUS_DOORBELL_ENABLE_SUCCESS BIT(10)
50 #define STATUS_DOORBELL_ENABLE_FAIL BIT(11)
51 #define STATUS_DOORBELL_DISABLE_SUCCESS BIT(12)
52 #define STATUS_DOORBELL_DISABLE_FAIL BIT(13)
53 #define STATUS_BAR_SUBRANGE_SETUP_SUCCESS BIT(14)
54 #define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15)
55 #define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16)
56 #define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17)
57 #define STATUS_NO_RESOURCE BIT(18)
58
59 #define FLAG_USE_DMA BIT(0)
60
61 #define TIMER_RESOLUTION 1
62
63 #define CAP_UNALIGNED_ACCESS BIT(0)
64 #define CAP_MSI BIT(1)
65 #define CAP_MSIX BIT(2)
66 #define CAP_INTX BIT(3)
67 #define CAP_SUBRANGE_MAPPING BIT(4)
68 #define CAP_DYNAMIC_INBOUND_MAPPING BIT(5)
69 #define CAP_BAR0_RESERVED BIT(6)
70 #define CAP_BAR1_RESERVED BIT(7)
71 #define CAP_BAR2_RESERVED BIT(8)
72 #define CAP_BAR3_RESERVED BIT(9)
73 #define CAP_BAR4_RESERVED BIT(10)
74 #define CAP_BAR5_RESERVED BIT(11)
75
76 #define PCI_EPF_TEST_BAR_SUBRANGE_NSUB 2
77
78 static struct workqueue_struct *kpcitest_workqueue;
79
80 struct pci_epf_test {
81 void *reg[PCI_STD_NUM_BARS];
82 struct pci_epf *epf;
83 struct config_group group;
84 enum pci_barno test_reg_bar;
85 size_t msix_table_offset;
86 struct delayed_work cmd_handler;
87 struct dma_chan *dma_chan_tx;
88 struct dma_chan *dma_chan_rx;
89 struct dma_chan *transfer_chan;
90 dma_cookie_t transfer_cookie;
91 enum dma_status transfer_status;
92 struct completion transfer_complete;
93 bool dma_supported;
94 bool dma_private;
95 const struct pci_epc_features *epc_features;
96 struct pci_epf_bar db_bar;
97 size_t bar_size[PCI_STD_NUM_BARS];
98 };
99
100 struct pci_epf_test_reg {
101 __le32 magic;
102 __le32 command;
103 __le32 status;
104 __le64 src_addr;
105 __le64 dst_addr;
106 __le32 size;
107 __le32 checksum;
108 __le32 irq_type;
109 __le32 irq_number;
110 __le32 flags;
111 __le32 caps;
112 __le32 doorbell_bar;
113 __le32 doorbell_offset;
114 __le32 doorbell_data;
115 } __packed;
116
117 static struct pci_epf_header test_header = {
118 .vendorid = PCI_ANY_ID,
119 .deviceid = PCI_ANY_ID,
120 .baseclass_code = PCI_CLASS_OTHERS,
121 .interrupt_pin = PCI_INTERRUPT_INTA,
122 };
123
124 /* default BAR sizes, can be overridden by the user using configfs */
125 static size_t default_bar_size[] = { 131072, 131072, 131072, 131072, 131072, 1048576 };
126
pci_epf_test_dma_callback(void * param)127 static void pci_epf_test_dma_callback(void *param)
128 {
129 struct pci_epf_test *epf_test = param;
130 struct dma_tx_state state;
131
132 epf_test->transfer_status =
133 dmaengine_tx_status(epf_test->transfer_chan,
134 epf_test->transfer_cookie, &state);
135 if (epf_test->transfer_status == DMA_COMPLETE ||
136 epf_test->transfer_status == DMA_ERROR)
137 complete(&epf_test->transfer_complete);
138 }
139
140 /**
141 * pci_epf_test_data_transfer() - Function that uses dmaengine API to transfer
142 * data between PCIe EP and remote PCIe RC
143 * @epf_test: the EPF test device that performs the data transfer operation
144 * @dma_dst: The destination address of the data transfer. It can be a physical
145 * address given by pci_epc_mem_alloc_addr or DMA mapping APIs.
146 * @dma_src: The source address of the data transfer. It can be a physical
147 * address given by pci_epc_mem_alloc_addr or DMA mapping APIs.
148 * @len: The size of the data transfer
149 * @dma_remote: remote RC physical address
150 * @dir: DMA transfer direction
151 *
152 * Function that uses dmaengine API to transfer data between PCIe EP and remote
153 * PCIe RC. The source and destination address can be a physical address given
154 * by pci_epc_mem_alloc_addr or the one obtained using DMA mapping APIs.
155 *
156 * The function returns '0' on success and negative value on failure.
157 */
pci_epf_test_data_transfer(struct pci_epf_test * epf_test,dma_addr_t dma_dst,dma_addr_t dma_src,size_t len,dma_addr_t dma_remote,enum dma_transfer_direction dir)158 static int pci_epf_test_data_transfer(struct pci_epf_test *epf_test,
159 dma_addr_t dma_dst, dma_addr_t dma_src,
160 size_t len, dma_addr_t dma_remote,
161 enum dma_transfer_direction dir)
162 {
163 struct dma_chan *chan = (dir == DMA_MEM_TO_DEV) ?
164 epf_test->dma_chan_tx : epf_test->dma_chan_rx;
165 dma_addr_t dma_local = (dir == DMA_MEM_TO_DEV) ? dma_src : dma_dst;
166 enum dma_ctrl_flags flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
167 struct pci_epf *epf = epf_test->epf;
168 struct dma_async_tx_descriptor *tx;
169 struct dma_slave_config sconf = {};
170 struct device *dev = &epf->dev;
171 int ret;
172
173 if (IS_ERR_OR_NULL(chan)) {
174 dev_err(dev, "Invalid DMA memcpy channel\n");
175 return -EINVAL;
176 }
177
178 if (epf_test->dma_private) {
179 sconf.direction = dir;
180 if (dir == DMA_MEM_TO_DEV)
181 sconf.dst_addr = dma_remote;
182 else
183 sconf.src_addr = dma_remote;
184
185 if (dmaengine_slave_config(chan, &sconf)) {
186 dev_err(dev, "DMA slave config fail\n");
187 return -EIO;
188 }
189 tx = dmaengine_prep_slave_single(chan, dma_local, len, dir,
190 flags);
191 } else {
192 tx = dmaengine_prep_dma_memcpy(chan, dma_dst, dma_src, len,
193 flags);
194 }
195
196 if (!tx) {
197 dev_err(dev, "Failed to prepare DMA memcpy\n");
198 return -EIO;
199 }
200
201 reinit_completion(&epf_test->transfer_complete);
202 epf_test->transfer_chan = chan;
203 tx->callback = pci_epf_test_dma_callback;
204 tx->callback_param = epf_test;
205 epf_test->transfer_cookie = dmaengine_submit(tx);
206
207 ret = dma_submit_error(epf_test->transfer_cookie);
208 if (ret) {
209 dev_err(dev, "Failed to do DMA tx_submit %d\n", ret);
210 goto terminate;
211 }
212
213 dma_async_issue_pending(chan);
214 ret = wait_for_completion_interruptible(&epf_test->transfer_complete);
215 if (ret < 0) {
216 dev_err(dev, "DMA wait_for_completion interrupted\n");
217 goto terminate;
218 }
219
220 if (epf_test->transfer_status == DMA_ERROR) {
221 dev_err(dev, "DMA transfer failed\n");
222 ret = -EIO;
223 }
224
225 terminate:
226 dmaengine_terminate_sync(chan);
227
228 return ret;
229 }
230
231 struct epf_dma_filter {
232 struct device *dev;
233 u32 dma_mask;
234 };
235
epf_dma_filter_fn(struct dma_chan * chan,void * node)236 static bool epf_dma_filter_fn(struct dma_chan *chan, void *node)
237 {
238 struct epf_dma_filter *filter = node;
239 struct dma_slave_caps caps;
240
241 memset(&caps, 0, sizeof(caps));
242 dma_get_slave_caps(chan, &caps);
243
244 return chan->device->dev == filter->dev
245 && (filter->dma_mask & caps.directions);
246 }
247
248 /**
249 * pci_epf_test_init_dma_chan() - Function to initialize EPF test DMA channel
250 * @epf_test: the EPF test device that performs data transfer operation
251 *
252 * Function to initialize EPF test DMA channel.
253 */
pci_epf_test_init_dma_chan(struct pci_epf_test * epf_test)254 static int pci_epf_test_init_dma_chan(struct pci_epf_test *epf_test)
255 {
256 struct pci_epf *epf = epf_test->epf;
257 struct device *dev = &epf->dev;
258 struct epf_dma_filter filter;
259 struct dma_chan *dma_chan;
260 dma_cap_mask_t mask;
261 int ret;
262
263 filter.dev = epf->epc->dev.parent;
264 filter.dma_mask = BIT(DMA_DEV_TO_MEM);
265
266 dma_cap_zero(mask);
267 dma_cap_set(DMA_SLAVE, mask);
268 dma_chan = dma_request_channel(mask, epf_dma_filter_fn, &filter);
269 if (!dma_chan) {
270 dev_info(dev, "Failed to get private DMA rx channel. Falling back to generic one\n");
271 goto fail_back_tx;
272 }
273
274 epf_test->dma_chan_rx = dma_chan;
275
276 filter.dma_mask = BIT(DMA_MEM_TO_DEV);
277 dma_chan = dma_request_channel(mask, epf_dma_filter_fn, &filter);
278
279 if (!dma_chan) {
280 dev_info(dev, "Failed to get private DMA tx channel. Falling back to generic one\n");
281 goto fail_back_rx;
282 }
283
284 epf_test->dma_chan_tx = dma_chan;
285 epf_test->dma_private = true;
286
287 init_completion(&epf_test->transfer_complete);
288
289 return 0;
290
291 fail_back_rx:
292 dma_release_channel(epf_test->dma_chan_rx);
293 epf_test->dma_chan_rx = NULL;
294
295 fail_back_tx:
296 dma_cap_zero(mask);
297 dma_cap_set(DMA_MEMCPY, mask);
298
299 dma_chan = dma_request_chan_by_mask(&mask);
300 if (IS_ERR(dma_chan)) {
301 ret = PTR_ERR(dma_chan);
302 if (ret != -EPROBE_DEFER)
303 dev_err(dev, "Failed to get DMA channel\n");
304 return ret;
305 }
306 init_completion(&epf_test->transfer_complete);
307
308 epf_test->dma_chan_tx = epf_test->dma_chan_rx = dma_chan;
309
310 return 0;
311 }
312
313 /**
314 * pci_epf_test_clean_dma_chan() - Function to cleanup EPF test DMA channel
315 * @epf_test: the EPF test device that performs data transfer operation
316 *
317 * Helper to cleanup EPF test DMA channel.
318 */
pci_epf_test_clean_dma_chan(struct pci_epf_test * epf_test)319 static void pci_epf_test_clean_dma_chan(struct pci_epf_test *epf_test)
320 {
321 if (!epf_test->dma_supported)
322 return;
323
324 if (epf_test->dma_chan_tx) {
325 dma_release_channel(epf_test->dma_chan_tx);
326 if (epf_test->dma_chan_tx == epf_test->dma_chan_rx) {
327 epf_test->dma_chan_tx = NULL;
328 epf_test->dma_chan_rx = NULL;
329 return;
330 }
331 epf_test->dma_chan_tx = NULL;
332 }
333
334 if (epf_test->dma_chan_rx) {
335 dma_release_channel(epf_test->dma_chan_rx);
336 epf_test->dma_chan_rx = NULL;
337 }
338 }
339
pci_epf_test_print_rate(struct pci_epf_test * epf_test,const char * op,u64 size,struct timespec64 * start,struct timespec64 * end,bool dma)340 static void pci_epf_test_print_rate(struct pci_epf_test *epf_test,
341 const char *op, u64 size,
342 struct timespec64 *start,
343 struct timespec64 *end, bool dma)
344 {
345 struct timespec64 ts = timespec64_sub(*end, *start);
346 u64 rate = 0, ns;
347
348 /* calculate the rate */
349 ns = timespec64_to_ns(&ts);
350 if (ns)
351 rate = div64_u64(size * NSEC_PER_SEC, ns * 1000);
352
353 dev_info(&epf_test->epf->dev,
354 "%s => Size: %llu B, DMA: %s, Time: %ptSp s, Rate: %llu KB/s\n",
355 op, size, dma ? "YES" : "NO", &ts, rate);
356 }
357
pci_epf_test_copy(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)358 static void pci_epf_test_copy(struct pci_epf_test *epf_test,
359 struct pci_epf_test_reg *reg)
360 {
361 int ret = 0;
362 struct timespec64 start, end;
363 struct pci_epf *epf = epf_test->epf;
364 struct pci_epc *epc = epf->epc;
365 struct device *dev = &epf->dev;
366 struct pci_epc_map src_map, dst_map;
367 u64 src_addr = le64_to_cpu(reg->src_addr);
368 u64 dst_addr = le64_to_cpu(reg->dst_addr);
369 size_t orig_size, copy_size;
370 ssize_t map_size = 0;
371 u32 flags = le32_to_cpu(reg->flags);
372 u32 status = 0;
373 void *copy_buf = NULL, *buf;
374
375 orig_size = copy_size = le32_to_cpu(reg->size);
376
377 if (flags & FLAG_USE_DMA) {
378 if (!dma_has_cap(DMA_MEMCPY, epf_test->dma_chan_tx->device->cap_mask)) {
379 dev_err(dev, "DMA controller doesn't support MEMCPY\n");
380 ret = -EINVAL;
381 goto set_status;
382 }
383 } else {
384 copy_buf = kzalloc(copy_size, GFP_KERNEL);
385 if (!copy_buf) {
386 ret = -ENOMEM;
387 goto set_status;
388 }
389 buf = copy_buf;
390 }
391
392 while (copy_size) {
393 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no,
394 src_addr, copy_size, &src_map);
395 if (ret) {
396 dev_err(dev, "Failed to map source address\n");
397 status = STATUS_SRC_ADDR_INVALID;
398 goto free_buf;
399 }
400
401 ret = pci_epc_mem_map(epf->epc, epf->func_no, epf->vfunc_no,
402 dst_addr, copy_size, &dst_map);
403 if (ret) {
404 dev_err(dev, "Failed to map destination address\n");
405 status = STATUS_DST_ADDR_INVALID;
406 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no,
407 &src_map);
408 goto free_buf;
409 }
410
411 map_size = min_t(size_t, dst_map.pci_size, src_map.pci_size);
412
413 ktime_get_ts64(&start);
414 if (flags & FLAG_USE_DMA) {
415 ret = pci_epf_test_data_transfer(epf_test,
416 dst_map.phys_addr, src_map.phys_addr,
417 map_size, 0, DMA_MEM_TO_MEM);
418 if (ret) {
419 dev_err(dev, "Data transfer failed\n");
420 goto unmap;
421 }
422 } else {
423 memcpy_fromio(buf, src_map.virt_addr, map_size);
424 memcpy_toio(dst_map.virt_addr, buf, map_size);
425 buf += map_size;
426 }
427 ktime_get_ts64(&end);
428
429 copy_size -= map_size;
430 src_addr += map_size;
431 dst_addr += map_size;
432
433 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &dst_map);
434 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &src_map);
435 map_size = 0;
436 }
437
438 pci_epf_test_print_rate(epf_test, "COPY", orig_size, &start, &end,
439 flags & FLAG_USE_DMA);
440
441 unmap:
442 if (map_size) {
443 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &dst_map);
444 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &src_map);
445 }
446
447 free_buf:
448 kfree(copy_buf);
449
450 set_status:
451 if (!ret)
452 status |= STATUS_COPY_SUCCESS;
453 else
454 status |= STATUS_COPY_FAIL;
455 reg->status = cpu_to_le32(status);
456 }
457
pci_epf_test_read(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)458 static void pci_epf_test_read(struct pci_epf_test *epf_test,
459 struct pci_epf_test_reg *reg)
460 {
461 int ret = 0;
462 void *src_buf, *buf;
463 u32 crc32;
464 struct pci_epc_map map;
465 phys_addr_t dst_phys_addr;
466 struct timespec64 start, end;
467 struct pci_epf *epf = epf_test->epf;
468 struct pci_epc *epc = epf->epc;
469 struct device *dev = &epf->dev;
470 struct device *dma_dev = epf->epc->dev.parent;
471 u64 src_addr = le64_to_cpu(reg->src_addr);
472 size_t orig_size, src_size;
473 ssize_t map_size = 0;
474 u32 flags = le32_to_cpu(reg->flags);
475 u32 checksum = le32_to_cpu(reg->checksum);
476 u32 status = 0;
477
478 orig_size = src_size = le32_to_cpu(reg->size);
479
480 src_buf = kzalloc(src_size, GFP_KERNEL);
481 if (!src_buf) {
482 ret = -ENOMEM;
483 goto set_status;
484 }
485 buf = src_buf;
486
487 while (src_size) {
488 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no,
489 src_addr, src_size, &map);
490 if (ret) {
491 dev_err(dev, "Failed to map address\n");
492 status = STATUS_SRC_ADDR_INVALID;
493 goto free_buf;
494 }
495
496 map_size = map.pci_size;
497 if (flags & FLAG_USE_DMA) {
498 dst_phys_addr = dma_map_single(dma_dev, buf, map_size,
499 DMA_FROM_DEVICE);
500 if (dma_mapping_error(dma_dev, dst_phys_addr)) {
501 dev_err(dev,
502 "Failed to map destination buffer addr\n");
503 ret = -ENOMEM;
504 goto unmap;
505 }
506
507 ktime_get_ts64(&start);
508 ret = pci_epf_test_data_transfer(epf_test,
509 dst_phys_addr, map.phys_addr,
510 map_size, src_addr, DMA_DEV_TO_MEM);
511 if (ret)
512 dev_err(dev, "Data transfer failed\n");
513 ktime_get_ts64(&end);
514
515 dma_unmap_single(dma_dev, dst_phys_addr, map_size,
516 DMA_FROM_DEVICE);
517
518 if (ret)
519 goto unmap;
520 } else {
521 ktime_get_ts64(&start);
522 memcpy_fromio(buf, map.virt_addr, map_size);
523 ktime_get_ts64(&end);
524 }
525
526 src_size -= map_size;
527 src_addr += map_size;
528 buf += map_size;
529
530 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map);
531 map_size = 0;
532 }
533
534 pci_epf_test_print_rate(epf_test, "READ", orig_size, &start, &end,
535 flags & FLAG_USE_DMA);
536
537 crc32 = crc32_le(~0, src_buf, orig_size);
538 if (crc32 != checksum)
539 ret = -EIO;
540
541 unmap:
542 if (map_size)
543 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map);
544
545 free_buf:
546 kfree(src_buf);
547
548 set_status:
549 if (!ret)
550 status |= STATUS_READ_SUCCESS;
551 else
552 status |= STATUS_READ_FAIL;
553 reg->status = cpu_to_le32(status);
554 }
555
pci_epf_test_write(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)556 static void pci_epf_test_write(struct pci_epf_test *epf_test,
557 struct pci_epf_test_reg *reg)
558 {
559 int ret = 0;
560 void *dst_buf, *buf;
561 struct pci_epc_map map;
562 phys_addr_t src_phys_addr;
563 struct timespec64 start, end;
564 struct pci_epf *epf = epf_test->epf;
565 struct pci_epc *epc = epf->epc;
566 struct device *dev = &epf->dev;
567 struct device *dma_dev = epf->epc->dev.parent;
568 u64 dst_addr = le64_to_cpu(reg->dst_addr);
569 size_t orig_size, dst_size;
570 ssize_t map_size = 0;
571 u32 flags = le32_to_cpu(reg->flags);
572 u32 status = 0;
573
574 orig_size = dst_size = le32_to_cpu(reg->size);
575
576 dst_buf = kzalloc(dst_size, GFP_KERNEL);
577 if (!dst_buf) {
578 ret = -ENOMEM;
579 goto set_status;
580 }
581 get_random_bytes(dst_buf, dst_size);
582 reg->checksum = cpu_to_le32(crc32_le(~0, dst_buf, dst_size));
583 buf = dst_buf;
584
585 while (dst_size) {
586 ret = pci_epc_mem_map(epc, epf->func_no, epf->vfunc_no,
587 dst_addr, dst_size, &map);
588 if (ret) {
589 dev_err(dev, "Failed to map address\n");
590 status = STATUS_DST_ADDR_INVALID;
591 goto free_buf;
592 }
593
594 map_size = map.pci_size;
595 if (flags & FLAG_USE_DMA) {
596 src_phys_addr = dma_map_single(dma_dev, buf, map_size,
597 DMA_TO_DEVICE);
598 if (dma_mapping_error(dma_dev, src_phys_addr)) {
599 dev_err(dev,
600 "Failed to map source buffer addr\n");
601 ret = -ENOMEM;
602 goto unmap;
603 }
604
605 ktime_get_ts64(&start);
606
607 ret = pci_epf_test_data_transfer(epf_test,
608 map.phys_addr, src_phys_addr,
609 map_size, dst_addr,
610 DMA_MEM_TO_DEV);
611 if (ret)
612 dev_err(dev, "Data transfer failed\n");
613 ktime_get_ts64(&end);
614
615 dma_unmap_single(dma_dev, src_phys_addr, map_size,
616 DMA_TO_DEVICE);
617
618 if (ret)
619 goto unmap;
620 } else {
621 ktime_get_ts64(&start);
622 memcpy_toio(map.virt_addr, buf, map_size);
623 ktime_get_ts64(&end);
624 }
625
626 dst_size -= map_size;
627 dst_addr += map_size;
628 buf += map_size;
629
630 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map);
631 map_size = 0;
632 }
633
634 pci_epf_test_print_rate(epf_test, "WRITE", orig_size, &start, &end,
635 flags & FLAG_USE_DMA);
636
637 /*
638 * wait 1ms inorder for the write to complete. Without this delay L3
639 * error in observed in the host system.
640 */
641 usleep_range(1000, 2000);
642
643 unmap:
644 if (map_size)
645 pci_epc_mem_unmap(epc, epf->func_no, epf->vfunc_no, &map);
646
647 free_buf:
648 kfree(dst_buf);
649
650 set_status:
651 if (!ret)
652 status |= STATUS_WRITE_SUCCESS;
653 else
654 status |= STATUS_WRITE_FAIL;
655 reg->status = cpu_to_le32(status);
656 }
657
pci_epf_test_raise_irq(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)658 static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test,
659 struct pci_epf_test_reg *reg)
660 {
661 struct pci_epf *epf = epf_test->epf;
662 struct device *dev = &epf->dev;
663 struct pci_epc *epc = epf->epc;
664 u32 status = le32_to_cpu(reg->status);
665 u32 irq_number = le32_to_cpu(reg->irq_number);
666 u32 irq_type = le32_to_cpu(reg->irq_type);
667 int count;
668
669 /*
670 * Set the status before raising the IRQ to ensure that the host sees
671 * the updated value when it gets the IRQ.
672 */
673 status |= STATUS_IRQ_RAISED;
674 WRITE_ONCE(reg->status, cpu_to_le32(status));
675
676 switch (irq_type) {
677 case IRQ_TYPE_INTX:
678 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
679 PCI_IRQ_INTX, 0);
680 break;
681 case IRQ_TYPE_MSI:
682 count = pci_epc_get_msi(epc, epf->func_no, epf->vfunc_no);
683 if (irq_number > count || count <= 0) {
684 dev_err(dev, "Invalid MSI IRQ number %d / %d\n",
685 irq_number, count);
686 return;
687 }
688 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
689 PCI_IRQ_MSI, irq_number);
690 break;
691 case IRQ_TYPE_MSIX:
692 count = pci_epc_get_msix(epc, epf->func_no, epf->vfunc_no);
693 if (irq_number > count || count <= 0) {
694 dev_err(dev, "Invalid MSI-X IRQ number %d / %d\n",
695 irq_number, count);
696 return;
697 }
698 pci_epc_raise_irq(epc, epf->func_no, epf->vfunc_no,
699 PCI_IRQ_MSIX, irq_number);
700 break;
701 default:
702 dev_err(dev, "Failed to raise IRQ, unknown type\n");
703 break;
704 }
705 }
706
pci_epf_test_doorbell_handler(int irq,void * data)707 static irqreturn_t pci_epf_test_doorbell_handler(int irq, void *data)
708 {
709 struct pci_epf_test *epf_test = data;
710 enum pci_barno test_reg_bar = epf_test->test_reg_bar;
711 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar];
712 u32 status = le32_to_cpu(reg->status);
713
714 status |= STATUS_DOORBELL_SUCCESS;
715 reg->status = cpu_to_le32(status);
716 pci_epf_test_raise_irq(epf_test, reg);
717
718 return IRQ_HANDLED;
719 }
720
pci_epf_test_doorbell_cleanup(struct pci_epf_test * epf_test)721 static void pci_epf_test_doorbell_cleanup(struct pci_epf_test *epf_test)
722 {
723 struct pci_epf_test_reg *reg = epf_test->reg[epf_test->test_reg_bar];
724 struct pci_epf *epf = epf_test->epf;
725
726 reg->doorbell_bar = cpu_to_le32(NO_BAR);
727
728 pci_epf_free_doorbell(epf);
729 }
730
pci_epf_test_enable_doorbell(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)731 static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test,
732 struct pci_epf_test_reg *reg)
733 {
734 u32 status = le32_to_cpu(reg->status);
735 struct pci_epf *epf = epf_test->epf;
736 struct pci_epc *epc = epf->epc;
737 struct msi_msg *msg;
738 enum pci_barno bar;
739 size_t offset;
740 int ret;
741
742 ret = pci_epf_alloc_doorbell(epf, 1);
743 if (ret)
744 goto set_status_err;
745
746 msg = &epf->db_msg[0].msg;
747 bar = pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_reg_bar + 1);
748 if (bar < BAR_0)
749 goto err_doorbell_cleanup;
750
751 ret = request_threaded_irq(epf->db_msg[0].virq, NULL,
752 pci_epf_test_doorbell_handler, IRQF_ONESHOT,
753 "pci-ep-test-doorbell", epf_test);
754 if (ret) {
755 dev_err(&epf->dev,
756 "Failed to request doorbell IRQ: %d\n",
757 epf->db_msg[0].virq);
758 goto err_doorbell_cleanup;
759 }
760
761 reg->doorbell_data = cpu_to_le32(msg->data);
762 reg->doorbell_bar = cpu_to_le32(bar);
763
764 msg = &epf->db_msg[0].msg;
765 ret = pci_epf_align_inbound_addr(epf, bar, ((u64)msg->address_hi << 32) | msg->address_lo,
766 &epf_test->db_bar.phys_addr, &offset);
767
768 if (ret)
769 goto err_free_irq;
770
771 reg->doorbell_offset = cpu_to_le32(offset);
772
773 epf_test->db_bar.barno = bar;
774 epf_test->db_bar.size = epf->bar[bar].size;
775 epf_test->db_bar.flags = epf->bar[bar].flags;
776
777 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_bar);
778 if (ret)
779 goto err_free_irq;
780
781 status |= STATUS_DOORBELL_ENABLE_SUCCESS;
782 reg->status = cpu_to_le32(status);
783 return;
784
785 err_free_irq:
786 free_irq(epf->db_msg[0].virq, epf_test);
787 err_doorbell_cleanup:
788 pci_epf_test_doorbell_cleanup(epf_test);
789 set_status_err:
790 status |= STATUS_DOORBELL_ENABLE_FAIL;
791 reg->status = cpu_to_le32(status);
792 }
793
pci_epf_test_disable_doorbell(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)794 static void pci_epf_test_disable_doorbell(struct pci_epf_test *epf_test,
795 struct pci_epf_test_reg *reg)
796 {
797 enum pci_barno bar = le32_to_cpu(reg->doorbell_bar);
798 u32 status = le32_to_cpu(reg->status);
799 struct pci_epf *epf = epf_test->epf;
800 struct pci_epc *epc = epf->epc;
801 int ret;
802
803 if (bar < BAR_0)
804 goto set_status_err;
805
806 free_irq(epf->db_msg[0].virq, epf_test);
807 pci_epf_test_doorbell_cleanup(epf_test);
808
809 /*
810 * The doorbell feature temporarily overrides the inbound translation
811 * to point to the address stored in epf_test->db_bar.phys_addr, i.e.,
812 * it calls set_bar() twice without ever calling clear_bar(), as
813 * calling clear_bar() would clear the BAR's PCI address assigned by
814 * the host. Thus, when disabling the doorbell, restore the inbound
815 * translation to point to the memory allocated for the BAR.
816 */
817 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]);
818 if (ret)
819 goto set_status_err;
820
821 status |= STATUS_DOORBELL_DISABLE_SUCCESS;
822 reg->status = cpu_to_le32(status);
823
824 return;
825
826 set_status_err:
827 status |= STATUS_DOORBELL_DISABLE_FAIL;
828 reg->status = cpu_to_le32(status);
829 }
830
pci_epf_test_subrange_sig_byte(enum pci_barno barno,unsigned int subno)831 static u8 pci_epf_test_subrange_sig_byte(enum pci_barno barno,
832 unsigned int subno)
833 {
834 return 0x50 + (barno * 8) + subno;
835 }
836
pci_epf_test_bar_subrange_setup(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)837 static void pci_epf_test_bar_subrange_setup(struct pci_epf_test *epf_test,
838 struct pci_epf_test_reg *reg)
839 {
840 struct pci_epf_bar_submap *submap, *old_submap;
841 struct pci_epf *epf = epf_test->epf;
842 struct pci_epc *epc = epf->epc;
843 struct pci_epf_bar *bar;
844 unsigned int nsub = PCI_EPF_TEST_BAR_SUBRANGE_NSUB, old_nsub;
845 /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */
846 enum pci_barno barno = le32_to_cpu(reg->size);
847 u32 status = le32_to_cpu(reg->status);
848 unsigned int i, phys_idx;
849 size_t sub_size;
850 u8 *addr;
851 int ret;
852
853 if (barno >= PCI_STD_NUM_BARS) {
854 dev_err(&epf->dev, "Invalid barno: %d\n", barno);
855 goto err;
856 }
857
858 /* Host side should've avoided test_reg_bar, this is a safeguard. */
859 if (barno == epf_test->test_reg_bar) {
860 dev_err(&epf->dev, "test_reg_bar cannot be used for subrange test\n");
861 goto err;
862 }
863
864 if (!epf_test->epc_features->dynamic_inbound_mapping ||
865 !epf_test->epc_features->subrange_mapping) {
866 dev_err(&epf->dev, "epc driver does not support subrange mapping\n");
867 goto err;
868 }
869
870 bar = &epf->bar[barno];
871 if (!bar->size || !bar->addr) {
872 dev_err(&epf->dev, "bar size/addr (%zu/%p) is invalid\n",
873 bar->size, bar->addr);
874 goto err;
875 }
876
877 if (bar->size % nsub) {
878 dev_err(&epf->dev, "BAR size %zu is not divisible by %u\n",
879 bar->size, nsub);
880 goto err;
881 }
882
883 sub_size = bar->size / nsub;
884
885 submap = kzalloc_objs(*submap, nsub);
886 if (!submap)
887 goto err;
888
889 for (i = 0; i < nsub; i++) {
890 /* Swap the two halves so RC can verify ordering. */
891 phys_idx = i ^ 1;
892 submap[i].phys_addr = bar->phys_addr + (phys_idx * sub_size);
893 submap[i].size = sub_size;
894 }
895
896 old_submap = bar->submap;
897 old_nsub = bar->num_submap;
898
899 bar->submap = submap;
900 bar->num_submap = nsub;
901
902 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar);
903 if (ret) {
904 dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret);
905 if (ret == -ENOSPC)
906 status |= STATUS_NO_RESOURCE;
907 bar->submap = old_submap;
908 bar->num_submap = old_nsub;
909 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar);
910 if (ret)
911 dev_warn(&epf->dev, "Failed to restore the original BAR mapping: %d\n",
912 ret);
913
914 kfree(submap);
915 goto err;
916 }
917 kfree(old_submap);
918
919 /*
920 * Fill deterministic signatures into the physical regions that
921 * each BAR subrange maps to. RC verifies these to ensure the
922 * submap order is really applied.
923 */
924 addr = (u8 *)bar->addr;
925 for (i = 0; i < nsub; i++) {
926 phys_idx = i ^ 1;
927 memset(addr + (phys_idx * sub_size),
928 pci_epf_test_subrange_sig_byte(barno, i),
929 sub_size);
930 }
931
932 status |= STATUS_BAR_SUBRANGE_SETUP_SUCCESS;
933 reg->status = cpu_to_le32(status);
934 return;
935
936 err:
937 status |= STATUS_BAR_SUBRANGE_SETUP_FAIL;
938 reg->status = cpu_to_le32(status);
939 }
940
pci_epf_test_bar_subrange_clear(struct pci_epf_test * epf_test,struct pci_epf_test_reg * reg)941 static void pci_epf_test_bar_subrange_clear(struct pci_epf_test *epf_test,
942 struct pci_epf_test_reg *reg)
943 {
944 struct pci_epf *epf = epf_test->epf;
945 struct pci_epf_bar_submap *submap;
946 struct pci_epc *epc = epf->epc;
947 /* reg->size carries BAR number for BAR_SUBRANGE_* commands. */
948 enum pci_barno barno = le32_to_cpu(reg->size);
949 u32 status = le32_to_cpu(reg->status);
950 struct pci_epf_bar *bar;
951 unsigned int nsub;
952 int ret;
953
954 if (barno >= PCI_STD_NUM_BARS) {
955 dev_err(&epf->dev, "Invalid barno: %d\n", barno);
956 goto err;
957 }
958
959 bar = &epf->bar[barno];
960 submap = bar->submap;
961 nsub = bar->num_submap;
962
963 if (!submap || !nsub)
964 goto err;
965
966 bar->submap = NULL;
967 bar->num_submap = 0;
968
969 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, bar);
970 if (ret) {
971 bar->submap = submap;
972 bar->num_submap = nsub;
973 dev_err(&epf->dev, "pci_epc_set_bar() failed: %d\n", ret);
974 goto err;
975 }
976 kfree(submap);
977
978 status |= STATUS_BAR_SUBRANGE_CLEAR_SUCCESS;
979 reg->status = cpu_to_le32(status);
980 return;
981
982 err:
983 status |= STATUS_BAR_SUBRANGE_CLEAR_FAIL;
984 reg->status = cpu_to_le32(status);
985 }
986
pci_epf_test_cmd_handler(struct work_struct * work)987 static void pci_epf_test_cmd_handler(struct work_struct *work)
988 {
989 u32 command;
990 struct pci_epf_test *epf_test = container_of(work, struct pci_epf_test,
991 cmd_handler.work);
992 struct pci_epf *epf = epf_test->epf;
993 struct device *dev = &epf->dev;
994 enum pci_barno test_reg_bar = epf_test->test_reg_bar;
995 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar];
996 u32 irq_type = le32_to_cpu(reg->irq_type);
997
998 command = le32_to_cpu(READ_ONCE(reg->command));
999 if (!command)
1000 goto reset_handler;
1001
1002 WRITE_ONCE(reg->command, 0);
1003 WRITE_ONCE(reg->status, 0);
1004
1005 if ((le32_to_cpu(READ_ONCE(reg->flags)) & FLAG_USE_DMA) &&
1006 !epf_test->dma_supported) {
1007 dev_err(dev, "Cannot transfer data using DMA\n");
1008 goto reset_handler;
1009 }
1010
1011 if (irq_type > IRQ_TYPE_MSIX) {
1012 dev_err(dev, "Failed to detect IRQ type\n");
1013 goto reset_handler;
1014 }
1015
1016 switch (command) {
1017 case COMMAND_RAISE_INTX_IRQ:
1018 case COMMAND_RAISE_MSI_IRQ:
1019 case COMMAND_RAISE_MSIX_IRQ:
1020 pci_epf_test_raise_irq(epf_test, reg);
1021 break;
1022 case COMMAND_WRITE:
1023 pci_epf_test_write(epf_test, reg);
1024 pci_epf_test_raise_irq(epf_test, reg);
1025 break;
1026 case COMMAND_READ:
1027 pci_epf_test_read(epf_test, reg);
1028 pci_epf_test_raise_irq(epf_test, reg);
1029 break;
1030 case COMMAND_COPY:
1031 pci_epf_test_copy(epf_test, reg);
1032 pci_epf_test_raise_irq(epf_test, reg);
1033 break;
1034 case COMMAND_ENABLE_DOORBELL:
1035 pci_epf_test_enable_doorbell(epf_test, reg);
1036 pci_epf_test_raise_irq(epf_test, reg);
1037 break;
1038 case COMMAND_DISABLE_DOORBELL:
1039 pci_epf_test_disable_doorbell(epf_test, reg);
1040 pci_epf_test_raise_irq(epf_test, reg);
1041 break;
1042 case COMMAND_BAR_SUBRANGE_SETUP:
1043 pci_epf_test_bar_subrange_setup(epf_test, reg);
1044 pci_epf_test_raise_irq(epf_test, reg);
1045 break;
1046 case COMMAND_BAR_SUBRANGE_CLEAR:
1047 pci_epf_test_bar_subrange_clear(epf_test, reg);
1048 pci_epf_test_raise_irq(epf_test, reg);
1049 break;
1050 default:
1051 dev_err(dev, "Invalid command 0x%x\n", command);
1052 break;
1053 }
1054
1055 reset_handler:
1056 queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler,
1057 msecs_to_jiffies(1));
1058 }
1059
pci_epf_test_set_bar(struct pci_epf * epf)1060 static int pci_epf_test_set_bar(struct pci_epf *epf)
1061 {
1062 int bar, ret;
1063 struct pci_epc *epc = epf->epc;
1064 struct device *dev = &epf->dev;
1065 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1066 enum pci_barno test_reg_bar = epf_test->test_reg_bar;
1067
1068 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
1069 if (!epf_test->reg[bar])
1070 continue;
1071
1072 ret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no,
1073 &epf->bar[bar]);
1074 if (ret) {
1075 pci_epf_free_space(epf, epf_test->reg[bar], bar,
1076 PRIMARY_INTERFACE);
1077 epf_test->reg[bar] = NULL;
1078 dev_err(dev, "Failed to set BAR%d\n", bar);
1079 if (bar == test_reg_bar)
1080 return ret;
1081 }
1082 }
1083
1084 return 0;
1085 }
1086
pci_epf_test_clear_bar(struct pci_epf * epf)1087 static void pci_epf_test_clear_bar(struct pci_epf *epf)
1088 {
1089 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1090 struct pci_epc *epc = epf->epc;
1091 int bar;
1092
1093 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
1094 if (!epf_test->reg[bar])
1095 continue;
1096
1097 pci_epc_clear_bar(epc, epf->func_no, epf->vfunc_no,
1098 &epf->bar[bar]);
1099 }
1100 }
1101
pci_epf_test_set_capabilities(struct pci_epf * epf)1102 static void pci_epf_test_set_capabilities(struct pci_epf *epf)
1103 {
1104 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1105 enum pci_barno test_reg_bar = epf_test->test_reg_bar;
1106 struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar];
1107 struct pci_epc *epc = epf->epc;
1108 u32 caps = 0;
1109
1110 if (epc->ops->align_addr)
1111 caps |= CAP_UNALIGNED_ACCESS;
1112
1113 if (epf_test->epc_features->msi_capable)
1114 caps |= CAP_MSI;
1115
1116 if (epf_test->epc_features->msix_capable)
1117 caps |= CAP_MSIX;
1118
1119 if (epf_test->epc_features->intx_capable)
1120 caps |= CAP_INTX;
1121
1122 if (epf_test->epc_features->dynamic_inbound_mapping)
1123 caps |= CAP_DYNAMIC_INBOUND_MAPPING;
1124
1125 if (epf_test->epc_features->dynamic_inbound_mapping &&
1126 epf_test->epc_features->subrange_mapping)
1127 caps |= CAP_SUBRANGE_MAPPING;
1128
1129 if (epf_test->epc_features->bar[BAR_0].type == BAR_RESERVED)
1130 caps |= CAP_BAR0_RESERVED;
1131
1132 if (epf_test->epc_features->bar[BAR_1].type == BAR_RESERVED)
1133 caps |= CAP_BAR1_RESERVED;
1134
1135 if (epf_test->epc_features->bar[BAR_2].type == BAR_RESERVED)
1136 caps |= CAP_BAR2_RESERVED;
1137
1138 if (epf_test->epc_features->bar[BAR_3].type == BAR_RESERVED)
1139 caps |= CAP_BAR3_RESERVED;
1140
1141 if (epf_test->epc_features->bar[BAR_4].type == BAR_RESERVED)
1142 caps |= CAP_BAR4_RESERVED;
1143
1144 if (epf_test->epc_features->bar[BAR_5].type == BAR_RESERVED)
1145 caps |= CAP_BAR5_RESERVED;
1146
1147 reg->caps = cpu_to_le32(caps);
1148 }
1149
pci_epf_test_epc_init(struct pci_epf * epf)1150 static int pci_epf_test_epc_init(struct pci_epf *epf)
1151 {
1152 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1153 struct pci_epf_header *header = epf->header;
1154 const struct pci_epc_features *epc_features = epf_test->epc_features;
1155 struct pci_epc *epc = epf->epc;
1156 struct device *dev = &epf->dev;
1157 bool linkup_notifier = false;
1158 int ret;
1159
1160 epf_test->dma_supported = true;
1161
1162 ret = pci_epf_test_init_dma_chan(epf_test);
1163 if (ret)
1164 epf_test->dma_supported = false;
1165
1166 if (epf->vfunc_no <= 1) {
1167 ret = pci_epc_write_header(epc, epf->func_no, epf->vfunc_no, header);
1168 if (ret) {
1169 dev_err(dev, "Configuration header write failed\n");
1170 return ret;
1171 }
1172 }
1173
1174 pci_epf_test_set_capabilities(epf);
1175
1176 ret = pci_epf_test_set_bar(epf);
1177 if (ret)
1178 return ret;
1179
1180 if (epc_features->msi_capable) {
1181 ret = pci_epc_set_msi(epc, epf->func_no, epf->vfunc_no,
1182 epf->msi_interrupts);
1183 if (ret) {
1184 dev_err(dev, "MSI configuration failed\n");
1185 return ret;
1186 }
1187 }
1188
1189 if (epc_features->msix_capable) {
1190 ret = pci_epc_set_msix(epc, epf->func_no, epf->vfunc_no,
1191 epf->msix_interrupts,
1192 epf_test->test_reg_bar,
1193 epf_test->msix_table_offset);
1194 if (ret) {
1195 dev_err(dev, "MSI-X configuration failed\n");
1196 return ret;
1197 }
1198 }
1199
1200 linkup_notifier = epc_features->linkup_notifier;
1201 if (!linkup_notifier)
1202 queue_work(kpcitest_workqueue, &epf_test->cmd_handler.work);
1203
1204 return 0;
1205 }
1206
pci_epf_test_epc_deinit(struct pci_epf * epf)1207 static void pci_epf_test_epc_deinit(struct pci_epf *epf)
1208 {
1209 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1210
1211 cancel_delayed_work_sync(&epf_test->cmd_handler);
1212 pci_epf_test_clean_dma_chan(epf_test);
1213 pci_epf_test_clear_bar(epf);
1214 }
1215
pci_epf_test_link_up(struct pci_epf * epf)1216 static int pci_epf_test_link_up(struct pci_epf *epf)
1217 {
1218 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1219
1220 queue_delayed_work(kpcitest_workqueue, &epf_test->cmd_handler,
1221 msecs_to_jiffies(1));
1222
1223 return 0;
1224 }
1225
pci_epf_test_link_down(struct pci_epf * epf)1226 static int pci_epf_test_link_down(struct pci_epf *epf)
1227 {
1228 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1229
1230 cancel_delayed_work_sync(&epf_test->cmd_handler);
1231
1232 return 0;
1233 }
1234
1235 static const struct pci_epc_event_ops pci_epf_test_event_ops = {
1236 .epc_init = pci_epf_test_epc_init,
1237 .epc_deinit = pci_epf_test_epc_deinit,
1238 .link_up = pci_epf_test_link_up,
1239 .link_down = pci_epf_test_link_down,
1240 };
1241
pci_epf_test_alloc_space(struct pci_epf * epf)1242 static int pci_epf_test_alloc_space(struct pci_epf *epf)
1243 {
1244 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1245 struct device *dev = &epf->dev;
1246 size_t msix_table_size = 0;
1247 size_t test_reg_bar_size;
1248 size_t pba_size = 0;
1249 void *base;
1250 enum pci_barno test_reg_bar = epf_test->test_reg_bar;
1251 enum pci_barno bar;
1252 const struct pci_epc_features *epc_features = epf_test->epc_features;
1253 size_t test_reg_size;
1254
1255 test_reg_bar_size = ALIGN(sizeof(struct pci_epf_test_reg), 128);
1256
1257 if (epc_features->msix_capable) {
1258 msix_table_size = PCI_MSIX_ENTRY_SIZE * epf->msix_interrupts;
1259 epf_test->msix_table_offset = test_reg_bar_size;
1260 /* Align to QWORD or 8 Bytes */
1261 pba_size = ALIGN(DIV_ROUND_UP(epf->msix_interrupts, 8), 8);
1262 }
1263 test_reg_size = test_reg_bar_size + msix_table_size + pba_size;
1264
1265 base = pci_epf_alloc_space(epf, test_reg_size, test_reg_bar,
1266 epc_features, PRIMARY_INTERFACE);
1267 if (!base) {
1268 dev_err(dev, "Failed to allocated register space\n");
1269 return -ENOMEM;
1270 }
1271 epf_test->reg[test_reg_bar] = base;
1272
1273 for (bar = BAR_0; bar < PCI_STD_NUM_BARS; bar++) {
1274 bar = pci_epc_get_next_free_bar(epc_features, bar);
1275 if (bar == NO_BAR)
1276 break;
1277
1278 if (bar == test_reg_bar)
1279 continue;
1280
1281 if (epc_features->bar[bar].type == BAR_FIXED)
1282 test_reg_size = epc_features->bar[bar].fixed_size;
1283 else
1284 test_reg_size = epf_test->bar_size[bar];
1285
1286 base = pci_epf_alloc_space(epf, test_reg_size, bar,
1287 epc_features, PRIMARY_INTERFACE);
1288 if (!base)
1289 dev_err(dev, "Failed to allocate space for BAR%d\n",
1290 bar);
1291 epf_test->reg[bar] = base;
1292 }
1293
1294 return 0;
1295 }
1296
pci_epf_test_free_space(struct pci_epf * epf)1297 static void pci_epf_test_free_space(struct pci_epf *epf)
1298 {
1299 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1300 int bar;
1301
1302 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) {
1303 if (!epf_test->reg[bar])
1304 continue;
1305
1306 pci_epf_free_space(epf, epf_test->reg[bar], bar,
1307 PRIMARY_INTERFACE);
1308 epf_test->reg[bar] = NULL;
1309 }
1310 }
1311
pci_epf_test_bind(struct pci_epf * epf)1312 static int pci_epf_test_bind(struct pci_epf *epf)
1313 {
1314 int ret;
1315 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1316 const struct pci_epc_features *epc_features;
1317 enum pci_barno test_reg_bar = BAR_0;
1318 struct pci_epc *epc = epf->epc;
1319
1320 if (WARN_ON_ONCE(!epc))
1321 return -EINVAL;
1322
1323 epc_features = pci_epc_get_features(epc, epf->func_no, epf->vfunc_no);
1324 if (!epc_features) {
1325 dev_err(&epf->dev, "epc_features not implemented\n");
1326 return -EOPNOTSUPP;
1327 }
1328
1329 test_reg_bar = pci_epc_get_first_free_bar(epc_features);
1330 if (test_reg_bar < 0)
1331 return -EINVAL;
1332
1333 epf_test->test_reg_bar = test_reg_bar;
1334 epf_test->epc_features = epc_features;
1335
1336 ret = pci_epf_test_alloc_space(epf);
1337 if (ret)
1338 return ret;
1339
1340 return 0;
1341 }
1342
pci_epf_test_unbind(struct pci_epf * epf)1343 static void pci_epf_test_unbind(struct pci_epf *epf)
1344 {
1345 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1346 struct pci_epc *epc = epf->epc;
1347
1348 cancel_delayed_work_sync(&epf_test->cmd_handler);
1349 if (epc->init_complete) {
1350 pci_epf_test_clean_dma_chan(epf_test);
1351 pci_epf_test_clear_bar(epf);
1352 }
1353 pci_epf_test_free_space(epf);
1354 }
1355
1356 #define PCI_EPF_TEST_BAR_SIZE_R(_name, _id) \
1357 static ssize_t pci_epf_test_##_name##_show(struct config_item *item, \
1358 char *page) \
1359 { \
1360 struct config_group *group = to_config_group(item); \
1361 struct pci_epf_test *epf_test = \
1362 container_of(group, struct pci_epf_test, group); \
1363 \
1364 return sysfs_emit(page, "%zu\n", epf_test->bar_size[_id]); \
1365 }
1366
1367 #define PCI_EPF_TEST_BAR_SIZE_W(_name, _id) \
1368 static ssize_t pci_epf_test_##_name##_store(struct config_item *item, \
1369 const char *page, \
1370 size_t len) \
1371 { \
1372 struct config_group *group = to_config_group(item); \
1373 struct pci_epf_test *epf_test = \
1374 container_of(group, struct pci_epf_test, group); \
1375 int val, ret; \
1376 \
1377 /* \
1378 * BAR sizes can only be modified before binding to an EPC, \
1379 * because pci_epf_test_alloc_space() is called in .bind(). \
1380 */ \
1381 if (epf_test->epf->epc) \
1382 return -EOPNOTSUPP; \
1383 \
1384 ret = kstrtouint(page, 0, &val); \
1385 if (ret) \
1386 return ret; \
1387 \
1388 if (!is_power_of_2(val)) \
1389 return -EINVAL; \
1390 \
1391 epf_test->bar_size[_id] = val; \
1392 \
1393 return len; \
1394 }
1395
1396 PCI_EPF_TEST_BAR_SIZE_R(bar0_size, BAR_0)
1397 PCI_EPF_TEST_BAR_SIZE_W(bar0_size, BAR_0)
1398 PCI_EPF_TEST_BAR_SIZE_R(bar1_size, BAR_1)
1399 PCI_EPF_TEST_BAR_SIZE_W(bar1_size, BAR_1)
1400 PCI_EPF_TEST_BAR_SIZE_R(bar2_size, BAR_2)
1401 PCI_EPF_TEST_BAR_SIZE_W(bar2_size, BAR_2)
1402 PCI_EPF_TEST_BAR_SIZE_R(bar3_size, BAR_3)
1403 PCI_EPF_TEST_BAR_SIZE_W(bar3_size, BAR_3)
1404 PCI_EPF_TEST_BAR_SIZE_R(bar4_size, BAR_4)
1405 PCI_EPF_TEST_BAR_SIZE_W(bar4_size, BAR_4)
1406 PCI_EPF_TEST_BAR_SIZE_R(bar5_size, BAR_5)
1407 PCI_EPF_TEST_BAR_SIZE_W(bar5_size, BAR_5)
1408
1409 CONFIGFS_ATTR(pci_epf_test_, bar0_size);
1410 CONFIGFS_ATTR(pci_epf_test_, bar1_size);
1411 CONFIGFS_ATTR(pci_epf_test_, bar2_size);
1412 CONFIGFS_ATTR(pci_epf_test_, bar3_size);
1413 CONFIGFS_ATTR(pci_epf_test_, bar4_size);
1414 CONFIGFS_ATTR(pci_epf_test_, bar5_size);
1415
1416 static struct configfs_attribute *pci_epf_test_attrs[] = {
1417 &pci_epf_test_attr_bar0_size,
1418 &pci_epf_test_attr_bar1_size,
1419 &pci_epf_test_attr_bar2_size,
1420 &pci_epf_test_attr_bar3_size,
1421 &pci_epf_test_attr_bar4_size,
1422 &pci_epf_test_attr_bar5_size,
1423 NULL,
1424 };
1425
1426 static const struct config_item_type pci_epf_test_group_type = {
1427 .ct_attrs = pci_epf_test_attrs,
1428 .ct_owner = THIS_MODULE,
1429 };
1430
pci_epf_test_add_cfs(struct pci_epf * epf,struct config_group * group)1431 static struct config_group *pci_epf_test_add_cfs(struct pci_epf *epf,
1432 struct config_group *group)
1433 {
1434 struct pci_epf_test *epf_test = epf_get_drvdata(epf);
1435 struct config_group *epf_group = &epf_test->group;
1436 struct device *dev = &epf->dev;
1437
1438 config_group_init_type_name(epf_group, dev_name(dev),
1439 &pci_epf_test_group_type);
1440
1441 return epf_group;
1442 }
1443
1444 static const struct pci_epf_device_id pci_epf_test_ids[] = {
1445 {
1446 .name = "pci_epf_test",
1447 },
1448 {},
1449 };
1450
pci_epf_test_probe(struct pci_epf * epf,const struct pci_epf_device_id * id)1451 static int pci_epf_test_probe(struct pci_epf *epf,
1452 const struct pci_epf_device_id *id)
1453 {
1454 struct pci_epf_test *epf_test;
1455 struct device *dev = &epf->dev;
1456 enum pci_barno bar;
1457
1458 epf_test = devm_kzalloc(dev, sizeof(*epf_test), GFP_KERNEL);
1459 if (!epf_test)
1460 return -ENOMEM;
1461
1462 epf->header = &test_header;
1463 epf_test->epf = epf;
1464 for (bar = BAR_0; bar < PCI_STD_NUM_BARS; bar++)
1465 epf_test->bar_size[bar] = default_bar_size[bar];
1466
1467 INIT_DELAYED_WORK(&epf_test->cmd_handler, pci_epf_test_cmd_handler);
1468
1469 epf->event_ops = &pci_epf_test_event_ops;
1470
1471 epf_set_drvdata(epf, epf_test);
1472 return 0;
1473 }
1474
1475 static const struct pci_epf_ops ops = {
1476 .unbind = pci_epf_test_unbind,
1477 .bind = pci_epf_test_bind,
1478 .add_cfs = pci_epf_test_add_cfs,
1479 };
1480
1481 static struct pci_epf_driver test_driver = {
1482 .driver.name = "pci_epf_test",
1483 .probe = pci_epf_test_probe,
1484 .id_table = pci_epf_test_ids,
1485 .ops = &ops,
1486 .owner = THIS_MODULE,
1487 };
1488
pci_epf_test_init(void)1489 static int __init pci_epf_test_init(void)
1490 {
1491 int ret;
1492
1493 kpcitest_workqueue = alloc_workqueue("kpcitest",
1494 WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_PERCPU, 0);
1495 if (!kpcitest_workqueue) {
1496 pr_err("Failed to allocate the kpcitest work queue\n");
1497 return -ENOMEM;
1498 }
1499
1500 ret = pci_epf_register_driver(&test_driver);
1501 if (ret) {
1502 destroy_workqueue(kpcitest_workqueue);
1503 pr_err("Failed to register pci epf test driver --> %d\n", ret);
1504 return ret;
1505 }
1506
1507 return 0;
1508 }
1509 module_init(pci_epf_test_init);
1510
pci_epf_test_exit(void)1511 static void __exit pci_epf_test_exit(void)
1512 {
1513 if (kpcitest_workqueue)
1514 destroy_workqueue(kpcitest_workqueue);
1515 pci_epf_unregister_driver(&test_driver);
1516 }
1517 module_exit(pci_epf_test_exit);
1518
1519 MODULE_DESCRIPTION("PCI EPF TEST DRIVER");
1520 MODULE_AUTHOR("Kishon Vijay Abraham I <kishon@ti.com>");
1521 MODULE_LICENSE("GPL v2");
1522