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