Lines Matching refs:test
114 static inline u32 pci_endpoint_test_readl(struct pci_endpoint_test *test, in pci_endpoint_test_readl() argument
117 return readl(test->base + offset); in pci_endpoint_test_readl()
120 static inline void pci_endpoint_test_writel(struct pci_endpoint_test *test, in pci_endpoint_test_writel() argument
123 writel(value, test->base + offset); in pci_endpoint_test_writel()
126 static inline u32 pci_endpoint_test_bar_readl(struct pci_endpoint_test *test, in pci_endpoint_test_bar_readl() argument
129 return readl(test->bar[bar] + offset); in pci_endpoint_test_bar_readl()
132 static inline void pci_endpoint_test_bar_writel(struct pci_endpoint_test *test, in pci_endpoint_test_bar_writel() argument
135 writel(value, test->bar[bar] + offset); in pci_endpoint_test_bar_writel()
140 struct pci_endpoint_test *test = dev_id; in pci_endpoint_test_irqhandler() local
143 reg = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_irqhandler()
145 test->last_irq = irq; in pci_endpoint_test_irqhandler()
146 complete(&test->irq_raised); in pci_endpoint_test_irqhandler()
149 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_STATUS, in pci_endpoint_test_irqhandler()
155 static void pci_endpoint_test_free_irq_vectors(struct pci_endpoint_test *test) in pci_endpoint_test_free_irq_vectors() argument
157 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_free_irq_vectors()
162 static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, in pci_endpoint_test_alloc_irq_vectors() argument
166 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_alloc_irq_vectors()
194 test->num_irqs = irq; in pci_endpoint_test_alloc_irq_vectors()
199 static void pci_endpoint_test_release_irq(struct pci_endpoint_test *test) in pci_endpoint_test_release_irq() argument
202 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_release_irq()
205 for (i = 0; i < test->num_irqs; i++) in pci_endpoint_test_release_irq()
206 devm_free_irq(dev, pci_irq_vector(pdev, i), test); in pci_endpoint_test_release_irq()
208 test->num_irqs = 0; in pci_endpoint_test_release_irq()
211 static bool pci_endpoint_test_request_irq(struct pci_endpoint_test *test) in pci_endpoint_test_request_irq() argument
215 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_request_irq()
218 for (i = 0; i < test->num_irqs; i++) { in pci_endpoint_test_request_irq()
221 IRQF_SHARED, DRV_MODULE_NAME, test); in pci_endpoint_test_request_irq()
249 static bool pci_endpoint_test_bar(struct pci_endpoint_test *test, in pci_endpoint_test_bar() argument
255 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_bar()
257 if (!test->bar[barno]) in pci_endpoint_test_bar()
262 if (barno == test->test_reg_bar) in pci_endpoint_test_bar()
266 pci_endpoint_test_bar_writel(test, barno, j, 0xA0A0A0A0); in pci_endpoint_test_bar()
269 val = pci_endpoint_test_bar_readl(test, barno, j); in pci_endpoint_test_bar()
277 static bool pci_endpoint_test_legacy_irq(struct pci_endpoint_test *test) in pci_endpoint_test_legacy_irq() argument
281 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, in pci_endpoint_test_legacy_irq()
283 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 0); in pci_endpoint_test_legacy_irq()
284 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_legacy_irq()
286 val = wait_for_completion_timeout(&test->irq_raised, in pci_endpoint_test_legacy_irq()
294 static bool pci_endpoint_test_msi_irq(struct pci_endpoint_test *test, in pci_endpoint_test_msi_irq() argument
298 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_msi_irq()
300 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, in pci_endpoint_test_msi_irq()
303 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, msi_num); in pci_endpoint_test_msi_irq()
304 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_msi_irq()
307 val = wait_for_completion_timeout(&test->irq_raised, in pci_endpoint_test_msi_irq()
312 if (pci_irq_vector(pdev, msi_num - 1) == test->last_irq) in pci_endpoint_test_msi_irq()
318 static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size) in pci_endpoint_test_copy() argument
325 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_copy()
332 size_t alignment = test->alignment; in pci_endpoint_test_copy()
361 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_SRC_ADDR, in pci_endpoint_test_copy()
364 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_SRC_ADDR, in pci_endpoint_test_copy()
387 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_DST_ADDR, in pci_endpoint_test_copy()
389 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_DST_ADDR, in pci_endpoint_test_copy()
392 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, in pci_endpoint_test_copy()
395 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_copy()
396 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_copy()
397 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_copy()
400 wait_for_completion(&test->irq_raised); in pci_endpoint_test_copy()
417 static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size) in pci_endpoint_test_write() argument
423 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_write()
428 size_t alignment = test->alignment; in pci_endpoint_test_write()
459 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_CHECKSUM, in pci_endpoint_test_write()
462 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_SRC_ADDR, in pci_endpoint_test_write()
464 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_SRC_ADDR, in pci_endpoint_test_write()
467 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size); in pci_endpoint_test_write()
469 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_write()
470 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_write()
471 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_write()
474 wait_for_completion(&test->irq_raised); in pci_endpoint_test_write()
476 reg = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); in pci_endpoint_test_write()
486 static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size) in pci_endpoint_test_read() argument
491 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_read()
496 size_t alignment = test->alignment; in pci_endpoint_test_read()
524 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_LOWER_DST_ADDR, in pci_endpoint_test_read()
526 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_UPPER_DST_ADDR, in pci_endpoint_test_read()
529 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_SIZE, size); in pci_endpoint_test_read()
531 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); in pci_endpoint_test_read()
532 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); in pci_endpoint_test_read()
533 pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, in pci_endpoint_test_read()
536 wait_for_completion(&test->irq_raised); in pci_endpoint_test_read()
539 if (crc32 == pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_CHECKSUM)) in pci_endpoint_test_read()
547 static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test, in pci_endpoint_test_set_irq() argument
550 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_set_irq()
561 pci_endpoint_test_release_irq(test); in pci_endpoint_test_set_irq()
562 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_set_irq()
564 if (!pci_endpoint_test_alloc_irq_vectors(test, req_irq_type)) in pci_endpoint_test_set_irq()
567 if (!pci_endpoint_test_request_irq(test)) in pci_endpoint_test_set_irq()
574 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_set_irq()
584 struct pci_endpoint_test *test = to_endpoint_test(file->private_data); in pci_endpoint_test_ioctl() local
585 struct pci_dev *pdev = test->pdev; in pci_endpoint_test_ioctl()
587 mutex_lock(&test->mutex); in pci_endpoint_test_ioctl()
595 ret = pci_endpoint_test_bar(test, bar); in pci_endpoint_test_ioctl()
598 ret = pci_endpoint_test_legacy_irq(test); in pci_endpoint_test_ioctl()
602 ret = pci_endpoint_test_msi_irq(test, arg, cmd == PCITEST_MSIX); in pci_endpoint_test_ioctl()
605 ret = pci_endpoint_test_write(test, arg); in pci_endpoint_test_ioctl()
608 ret = pci_endpoint_test_read(test, arg); in pci_endpoint_test_ioctl()
611 ret = pci_endpoint_test_copy(test, arg); in pci_endpoint_test_ioctl()
614 ret = pci_endpoint_test_set_irq(test, arg); in pci_endpoint_test_ioctl()
622 mutex_unlock(&test->mutex); in pci_endpoint_test_ioctl()
640 struct pci_endpoint_test *test; in pci_endpoint_test_probe() local
648 test = devm_kzalloc(dev, sizeof(*test), GFP_KERNEL); in pci_endpoint_test_probe()
649 if (!test) in pci_endpoint_test_probe()
652 test->test_reg_bar = 0; in pci_endpoint_test_probe()
653 test->alignment = 0; in pci_endpoint_test_probe()
654 test->pdev = pdev; in pci_endpoint_test_probe()
662 test->test_reg_bar = test_reg_bar; in pci_endpoint_test_probe()
663 test->alignment = data->alignment; in pci_endpoint_test_probe()
667 init_completion(&test->irq_raised); in pci_endpoint_test_probe()
668 mutex_init(&test->mutex); in pci_endpoint_test_probe()
684 if (!pci_endpoint_test_alloc_irq_vectors(test, irq_type)) in pci_endpoint_test_probe()
687 if (!pci_endpoint_test_request_irq(test)) in pci_endpoint_test_probe()
697 test->bar[bar] = base; in pci_endpoint_test_probe()
701 test->base = test->bar[test_reg_bar]; in pci_endpoint_test_probe()
702 if (!test->base) { in pci_endpoint_test_probe()
709 pci_set_drvdata(pdev, test); in pci_endpoint_test_probe()
719 misc_device = &test->miscdev; in pci_endpoint_test_probe()
744 if (test->bar[bar]) in pci_endpoint_test_probe()
745 pci_iounmap(pdev, test->bar[bar]); in pci_endpoint_test_probe()
747 pci_endpoint_test_release_irq(test); in pci_endpoint_test_probe()
750 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_probe()
763 struct pci_endpoint_test *test = pci_get_drvdata(pdev); in pci_endpoint_test_remove() local
764 struct miscdevice *misc_device = &test->miscdev; in pci_endpoint_test_remove()
771 misc_deregister(&test->miscdev); in pci_endpoint_test_remove()
775 if (test->bar[bar]) in pci_endpoint_test_remove()
776 pci_iounmap(pdev, test->bar[bar]); in pci_endpoint_test_remove()
779 pci_endpoint_test_release_irq(test); in pci_endpoint_test_remove()
780 pci_endpoint_test_free_irq_vectors(test); in pci_endpoint_test_remove()