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