xref: /linux/drivers/pci/endpoint/functions/pci-epf-test.c (revision 66498c75b4f8017f62d720d9b59675bdf3abce91)
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