]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: pci_endpoint: Migrate to Kselftest framework
authorManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Thu, 16 Jan 2025 17:16:50 +0000 (22:46 +0530)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 21 Jan 2025 20:17:55 +0000 (14:17 -0600)
Migrate the PCI endpoint test to Kselftest framework. All the tests that
were part of the previous pcitest.sh file were migrated.

Below is the list of tests converted:

   1. BAR0 Test
   2. BAR1 Test
   3. BAR2 Test
   4. BAR3 Test
   5. BAR4 Test
   6. BAR5 Test
   7. Consecutive BAR Tests
   8. Legacy IRQ Tests
   9. MSI Interrupt Tests (MSI1 to MSI32)
  10. MSI-X Interrupt Tests (MSI-X1 to MSI-X2048)
  11. Read Tests - MEMCPY (For 1, 1024, 1025, 10240001024001 Bytes)
  12. Write Tests - MEMCPY (For 1, 1024, 1025, 10240001024001 Bytes)
  13. Copy Tests - MEMCPY (For 1, 1024, 1025, 10240001024001 Bytes)
  14. Read Tests - DMA (For 1, 1024, 1025, 10240001024001 Bytes)
  15. Write Tests - DMA (For 1, 1024, 1025, 10240001024001 Bytes)
  16. Copy Tests - DMA (For 1, 1024, 1025, 10240001024001 Bytes)

BAR, DMA and MEMCPY tests are added as fixture variants and can be executed
separately as below:

  $ pci_endpoint_test -v BAR0
  $ pci_endpoint_test -v dma
  $ pci_endpoint_test -v memcpy

Link: https://lore.kernel.org/r/20250116171650.33585-5-manivannan.sadhasivam@linaro.org
Co-developed-by: Aman Gupta <aman1.gupta@samsung.com>
Co-developed-by: Padmanabhan Rajanbabu <p.rajanbabu@samsung.com>
[mani: reworked based on the IOCTL fix, cleanups, documentation, commit message]
Signed-off-by: Aman Gupta <aman1.gupta@samsung.com>
Signed-off-by: Padmanabhan Rajanbabu <p.rajanbabu@samsung.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Documentation/PCI/endpoint/pci-test-howto.rst
tools/testing/selftests/Makefile
tools/testing/selftests/pci_endpoint/.gitignore
tools/testing/selftests/pci_endpoint/Build [deleted file]
tools/testing/selftests/pci_endpoint/Makefile
tools/testing/selftests/pci_endpoint/config [new file with mode: 0644]
tools/testing/selftests/pci_endpoint/pci_endpoint_test.c [new file with mode: 0644]
tools/testing/selftests/pci_endpoint/pcitest.c [deleted file]
tools/testing/selftests/pci_endpoint/pcitest.sh [deleted file]

index c4ae7af50ede2870f86c25feeea792fbf1007952..aafc17ef3fd31f6ada38c82c8df133b87f7a1ae1 100644 (file)
@@ -81,8 +81,8 @@ device, the following commands can be used::
 
        # echo 0x104c > functions/pci_epf_test/func1/vendorid
        # echo 0xb500 > functions/pci_epf_test/func1/deviceid
-       # echo 16 > functions/pci_epf_test/func1/msi_interrupts
-       # echo 8 > functions/pci_epf_test/func1/msix_interrupts
+       # echo 32 > functions/pci_epf_test/func1/msi_interrupts
+       # echo 2048 > functions/pci_epf_test/func1/msix_interrupts
 
 
 Binding pci-epf-test Device to EP Controller
@@ -123,9 +123,9 @@ above::
 Using Endpoint Test function Device
 -----------------------------------
 
-pcitest.sh added in tools/testing/selftests/pci_endpoint can be used to run all
-the default PCI endpoint tests. To compile this tool the following commands
-should be used::
+Kselftest added in tools/testing/selftests/pci_endpoint can be used to run all
+the default PCI endpoint tests. To build the Kselftest for PCI endpoint
+subsystem, the following commands should be used::
 
        # cd <kernel-dir>
        # make -C tools/testing/selftests/pci_endpoint
@@ -133,104 +133,73 @@ should be used::
 or if you desire to compile and install in your system::
 
        # cd <kernel-dir>
-       # make -C tools/testing/selftests/pci_endpoint install
+       # make -C tools/testing/selftests/pci_endpoint INSTALL_PATH=/usr/bin install
 
-The tool and script will be located in <rootfs>/usr/bin/
+The test will be located in <rootfs>/usr/bin/
 
-
-pcitest.sh Output
-~~~~~~~~~~~~~~~~~
+Kselftest Output
+~~~~~~~~~~~~~~~~
 ::
 
-       # pcitest.sh
-       BAR tests
-
-       BAR0:           OKAY
-       BAR1:           OKAY
-       BAR2:           OKAY
-       BAR3:           OKAY
-       BAR4:           NOT OKAY
-       BAR5:           NOT OKAY
-
-       Interrupt tests
-
-       SET IRQ TYPE TO LEGACY:         OKAY
-       LEGACY IRQ:     NOT OKAY
-       SET IRQ TYPE TO MSI:            OKAY
-       MSI1:           OKAY
-       MSI2:           OKAY
-       MSI3:           OKAY
-       MSI4:           OKAY
-       MSI5:           OKAY
-       MSI6:           OKAY
-       MSI7:           OKAY
-       MSI8:           OKAY
-       MSI9:           OKAY
-       MSI10:          OKAY
-       MSI11:          OKAY
-       MSI12:          OKAY
-       MSI13:          OKAY
-       MSI14:          OKAY
-       MSI15:          OKAY
-       MSI16:          OKAY
-       MSI17:          NOT OKAY
-       MSI18:          NOT OKAY
-       MSI19:          NOT OKAY
-       MSI20:          NOT OKAY
-       MSI21:          NOT OKAY
-       MSI22:          NOT OKAY
-       MSI23:          NOT OKAY
-       MSI24:          NOT OKAY
-       MSI25:          NOT OKAY
-       MSI26:          NOT OKAY
-       MSI27:          NOT OKAY
-       MSI28:          NOT OKAY
-       MSI29:          NOT OKAY
-       MSI30:          NOT OKAY
-       MSI31:          NOT OKAY
-       MSI32:          NOT OKAY
-       SET IRQ TYPE TO MSI-X:          OKAY
-       MSI-X1:         OKAY
-       MSI-X2:         OKAY
-       MSI-X3:         OKAY
-       MSI-X4:         OKAY
-       MSI-X5:         OKAY
-       MSI-X6:         OKAY
-       MSI-X7:         OKAY
-       MSI-X8:         OKAY
-       MSI-X9:         NOT OKAY
-       MSI-X10:        NOT OKAY
-       MSI-X11:        NOT OKAY
-       MSI-X12:        NOT OKAY
-       MSI-X13:        NOT OKAY
-       MSI-X14:        NOT OKAY
-       MSI-X15:        NOT OKAY
-       MSI-X16:        NOT OKAY
-       [...]
-       MSI-X2047:      NOT OKAY
-       MSI-X2048:      NOT OKAY
-
-       Read Tests
-
-       SET IRQ TYPE TO MSI:            OKAY
-       READ (      1 bytes):           OKAY
-       READ (   1024 bytes):           OKAY
-       READ (   1025 bytes):           OKAY
-       READ (1024000 bytes):           OKAY
-       READ (1024001 bytes):           OKAY
-
-       Write Tests
-
-       WRITE (      1 bytes):          OKAY
-       WRITE (   1024 bytes):          OKAY
-       WRITE (   1025 bytes):          OKAY
-       WRITE (1024000 bytes):          OKAY
-       WRITE (1024001 bytes):          OKAY
-
-       Copy Tests
-
-       COPY (      1 bytes):           OKAY
-       COPY (   1024 bytes):           OKAY
-       COPY (   1025 bytes):           OKAY
-       COPY (1024000 bytes):           OKAY
-       COPY (1024001 bytes):           OKAY
+       # pci_endpoint_test
+       TAP version 13
+       1..16
+       # Starting 16 tests from 9 test cases.
+       #  RUN           pci_ep_bar.BAR0.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR0.BAR_TEST
+       ok 1 pci_ep_bar.BAR0.BAR_TEST
+       #  RUN           pci_ep_bar.BAR1.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR1.BAR_TEST
+       ok 2 pci_ep_bar.BAR1.BAR_TEST
+       #  RUN           pci_ep_bar.BAR2.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR2.BAR_TEST
+       ok 3 pci_ep_bar.BAR2.BAR_TEST
+       #  RUN           pci_ep_bar.BAR3.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR3.BAR_TEST
+       ok 4 pci_ep_bar.BAR3.BAR_TEST
+       #  RUN           pci_ep_bar.BAR4.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR4.BAR_TEST
+       ok 5 pci_ep_bar.BAR4.BAR_TEST
+       #  RUN           pci_ep_bar.BAR5.BAR_TEST ...
+       #            OK  pci_ep_bar.BAR5.BAR_TEST
+       ok 6 pci_ep_bar.BAR5.BAR_TEST
+       #  RUN           pci_ep_basic.CONSECUTIVE_BAR_TEST ...
+       #            OK  pci_ep_basic.CONSECUTIVE_BAR_TEST
+       ok 7 pci_ep_basic.CONSECUTIVE_BAR_TEST
+       #  RUN           pci_ep_basic.LEGACY_IRQ_TEST ...
+       #            OK  pci_ep_basic.LEGACY_IRQ_TEST
+       ok 8 pci_ep_basic.LEGACY_IRQ_TEST
+       #  RUN           pci_ep_basic.MSI_TEST ...
+       #            OK  pci_ep_basic.MSI_TEST
+       ok 9 pci_ep_basic.MSI_TEST
+       #  RUN           pci_ep_basic.MSIX_TEST ...
+       #            OK  pci_ep_basic.MSIX_TEST
+       ok 10 pci_ep_basic.MSIX_TEST
+       #  RUN           pci_ep_data_transfer.memcpy.READ_TEST ...
+       #            OK  pci_ep_data_transfer.memcpy.READ_TEST
+       ok 11 pci_ep_data_transfer.memcpy.READ_TEST
+       #  RUN           pci_ep_data_transfer.memcpy.WRITE_TEST ...
+       #            OK  pci_ep_data_transfer.memcpy.WRITE_TEST
+       ok 12 pci_ep_data_transfer.memcpy.WRITE_TEST
+       #  RUN           pci_ep_data_transfer.memcpy.COPY_TEST ...
+       #            OK  pci_ep_data_transfer.memcpy.COPY_TEST
+       ok 13 pci_ep_data_transfer.memcpy.COPY_TEST
+       #  RUN           pci_ep_data_transfer.dma.READ_TEST ...
+       #            OK  pci_ep_data_transfer.dma.READ_TEST
+       ok 14 pci_ep_data_transfer.dma.READ_TEST
+       #  RUN           pci_ep_data_transfer.dma.WRITE_TEST ...
+       #            OK  pci_ep_data_transfer.dma.WRITE_TEST
+       ok 15 pci_ep_data_transfer.dma.WRITE_TEST
+       #  RUN           pci_ep_data_transfer.dma.COPY_TEST ...
+       #            OK  pci_ep_data_transfer.dma.COPY_TEST
+       ok 16 pci_ep_data_transfer.dma.COPY_TEST
+       # PASSED: 16 / 16 tests passed.
+       # Totals: pass:16 fail:0 xfail:0 xpass:0 skip:0 error:0
+
+
+Testcase 16 (pci_ep_data_transfer.dma.COPY_TEST) will fail for most of the DMA
+capable endpoint controllers due to the absence of the MEMCPY over DMA. For such
+controllers, it is advisable to skip this testcase using this
+command::
+
+       # pci_endpoint_test -f pci_ep_bar -f pci_ep_basic -v memcpy -T COPY_TEST -v dma
index 2401e973c35963c415c1041bc622f06c8a7ec251..50931cd6aff2efa0b80e8321bb3f2fa969e5e2f1 100644 (file)
@@ -72,6 +72,7 @@ TARGETS += net/packetdrill
 TARGETS += net/rds
 TARGETS += net/tcp_ao
 TARGETS += nsfs
+TARGETS += pci_endpoint
 TARGETS += pcie_bwctrl
 TARGETS += perf_events
 TARGETS += pidfd
index 29ab47c484843b90de77a62cca49f652bf23c508..6a4837a3e034dac9d0757377c421c2640abf542b 100644 (file)
@@ -1,3 +1,2 @@
 # SPDX-License-Identifier: GPL-2.0-only
-*.o
-pcitest
+pci_endpoint_test
diff --git a/tools/testing/selftests/pci_endpoint/Build b/tools/testing/selftests/pci_endpoint/Build
deleted file mode 100644 (file)
index c375aea..0000000
+++ /dev/null
@@ -1 +0,0 @@
-pcitest-y += pcitest.o
index 3c6fe18e32ccd5c2d92443180493e3d0de49f012..bf21ebf20b4af600f96fd55f464eed8e0cd8d2b6 100644 (file)
@@ -1,58 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
-include ../../../scripts/Makefile.include
+CFLAGS += -O2 -Wl,-no-as-needed -Wall $(KHDR_INCLUDES)
+LDFLAGS += -lrt -lpthread -lm
 
-bindir ?= /usr/bin
+TEST_GEN_PROGS = pci_endpoint_test
 
-ifeq ($(srctree),)
-srctree := $(patsubst %/tools/testing/selftests/,%,$(dir $(CURDIR)))
-endif
-
-# Do not use make's built-in rules
-# (this improves performance and avoids hard-to-debug behaviour);
-MAKEFLAGS += -r
-
-CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include
-
-ALL_TARGETS := pcitest
-ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
-
-SCRIPTS := pcitest.sh
-
-all: $(ALL_PROGRAMS)
-
-export srctree OUTPUT CC LD CFLAGS
-include $(srctree)/tools/build/Makefile.include
-
-#
-# We need the following to be outside of kernel tree
-#
-$(OUTPUT)include/linux/: ../../../../include/uapi/linux/
-       mkdir -p $(OUTPUT)include/linux/ 2>&1 || true
-       ln -sf $(CURDIR)/../../../../include/uapi/linux/pcitest.h $@
-
-$(info ${CURDIR})
-prepare: $(OUTPUT)include/linux/
-
-PCITEST_IN := $(OUTPUT)pcitest-in.o
-$(PCITEST_IN): prepare FORCE
-       $(Q)$(MAKE) $(build)=pcitest
-$(OUTPUT)pcitest: $(PCITEST_IN)
-       $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
-
-clean:
-       rm -f $(ALL_PROGRAMS)
-       rm -rf $(OUTPUT)include/
-       find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
-
-install: $(ALL_PROGRAMS)
-       install -d -m 755 $(DESTDIR)$(bindir);          \
-       for program in $(ALL_PROGRAMS); do              \
-               install $$program $(DESTDIR)$(bindir);  \
-       done;                                           \
-       for script in $(SCRIPTS); do                    \
-               install $$script $(DESTDIR)$(bindir);   \
-       done
-
-FORCE:
-
-.PHONY: all install clean FORCE prepare
+include ../lib.mk
diff --git a/tools/testing/selftests/pci_endpoint/config b/tools/testing/selftests/pci_endpoint/config
new file mode 100644 (file)
index 0000000..7cdcf11
--- /dev/null
@@ -0,0 +1,4 @@
+CONFIG_PCI_ENDPOINT=y
+CONFIG_PCI_ENDPOINT_CONFIGFS=y
+CONFIG_PCI_EPF_TEST=m
+CONFIG_PCI_ENDPOINT_TEST=m
diff --git a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c b/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c
new file mode 100644 (file)
index 0000000..c267b82
--- /dev/null
@@ -0,0 +1,221 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Kselftest for PCI Endpoint Subsystem
+ *
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *             https://www.samsung.com
+ * Author: Aman Gupta <aman1.gupta@samsung.com>
+ *
+ * Copyright (c) 2024, Linaro Ltd.
+ * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include "../../../../include/uapi/linux/pcitest.h"
+
+#include "../kselftest_harness.h"
+
+#define pci_ep_ioctl(cmd, arg)                 \
+({                                             \
+       ret = ioctl(self->fd, cmd, arg);        \
+       ret = ret < 0 ? -errno : 0;             \
+})
+
+static const char *test_device = "/dev/pci-endpoint-test.0";
+static const unsigned long test_size[5] = { 1, 1024, 1025, 1024000, 1024001 };
+
+FIXTURE(pci_ep_bar)
+{
+       int fd;
+};
+
+FIXTURE_SETUP(pci_ep_bar)
+{
+       self->fd = open(test_device, O_RDWR);
+
+       ASSERT_NE(-1, self->fd) TH_LOG("Can't open PCI Endpoint Test device");
+}
+
+FIXTURE_TEARDOWN(pci_ep_bar)
+{
+       close(self->fd);
+}
+
+FIXTURE_VARIANT(pci_ep_bar)
+{
+       int barno;
+};
+
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR0) { .barno = 0 };
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR1) { .barno = 1 };
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR2) { .barno = 2 };
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR3) { .barno = 3 };
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR4) { .barno = 4 };
+FIXTURE_VARIANT_ADD(pci_ep_bar, BAR5) { .barno = 5 };
+
+TEST_F(pci_ep_bar, BAR_TEST)
+{
+       int ret;
+
+       pci_ep_ioctl(PCITEST_BAR, variant->barno);
+       EXPECT_FALSE(ret) TH_LOG("Test failed for BAR%d", variant->barno);
+}
+
+FIXTURE(pci_ep_basic)
+{
+       int fd;
+};
+
+FIXTURE_SETUP(pci_ep_basic)
+{
+       self->fd = open(test_device, O_RDWR);
+
+       ASSERT_NE(-1, self->fd) TH_LOG("Can't open PCI Endpoint Test device");
+}
+
+FIXTURE_TEARDOWN(pci_ep_basic)
+{
+       close(self->fd);
+}
+
+TEST_F(pci_ep_basic, CONSECUTIVE_BAR_TEST)
+{
+       int ret;
+
+       pci_ep_ioctl(PCITEST_BARS, 0);
+       EXPECT_FALSE(ret) TH_LOG("Consecutive BAR test failed");
+}
+
+TEST_F(pci_ep_basic, LEGACY_IRQ_TEST)
+{
+       int ret;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 0);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set Legacy IRQ type");
+
+       pci_ep_ioctl(PCITEST_LEGACY_IRQ, 0);
+       EXPECT_FALSE(ret) TH_LOG("Test failed for Legacy IRQ");
+}
+
+TEST_F(pci_ep_basic, MSI_TEST)
+{
+       int ret, i;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 1);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set MSI IRQ type");
+
+       for (i = 1; i <= 32; i++) {
+               pci_ep_ioctl(PCITEST_MSI, i);
+               EXPECT_FALSE(ret) TH_LOG("Test failed for MSI%d", i);
+       }
+}
+
+TEST_F(pci_ep_basic, MSIX_TEST)
+{
+       int ret, i;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 2);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set MSI-X IRQ type");
+
+       for (i = 1; i <= 2048; i++) {
+               pci_ep_ioctl(PCITEST_MSIX, i);
+               EXPECT_FALSE(ret) TH_LOG("Test failed for MSI-X%d", i);
+       }
+}
+
+FIXTURE(pci_ep_data_transfer)
+{
+       int fd;
+};
+
+FIXTURE_SETUP(pci_ep_data_transfer)
+{
+       self->fd = open(test_device, O_RDWR);
+
+       ASSERT_NE(-1, self->fd) TH_LOG("Can't open PCI Endpoint Test device");
+}
+
+FIXTURE_TEARDOWN(pci_ep_data_transfer)
+{
+       close(self->fd);
+}
+
+FIXTURE_VARIANT(pci_ep_data_transfer)
+{
+       bool use_dma;
+};
+
+FIXTURE_VARIANT_ADD(pci_ep_data_transfer, memcpy)
+{
+       .use_dma = false,
+};
+
+FIXTURE_VARIANT_ADD(pci_ep_data_transfer, dma)
+{
+       .use_dma = true,
+};
+
+TEST_F(pci_ep_data_transfer, READ_TEST)
+{
+       struct pci_endpoint_test_xfer_param param = {};
+       int ret, i;
+
+       if (variant->use_dma)
+               param.flags = PCITEST_FLAGS_USE_DMA;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 1);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set MSI IRQ type");
+
+       for (i = 0; i < ARRAY_SIZE(test_size); i++) {
+               param.size = test_size[i];
+               pci_ep_ioctl(PCITEST_READ, &param);
+               EXPECT_FALSE(ret) TH_LOG("Test failed for size (%ld)",
+                                        test_size[i]);
+       }
+}
+
+TEST_F(pci_ep_data_transfer, WRITE_TEST)
+{
+       struct pci_endpoint_test_xfer_param param = {};
+       int ret, i;
+
+       if (variant->use_dma)
+               param.flags = PCITEST_FLAGS_USE_DMA;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 1);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set MSI IRQ type");
+
+       for (i = 0; i < ARRAY_SIZE(test_size); i++) {
+               param.size = test_size[i];
+               pci_ep_ioctl(PCITEST_WRITE, &param);
+               EXPECT_FALSE(ret) TH_LOG("Test failed for size (%ld)",
+                                        test_size[i]);
+       }
+}
+
+TEST_F(pci_ep_data_transfer, COPY_TEST)
+{
+       struct pci_endpoint_test_xfer_param param = {};
+       int ret, i;
+
+       if (variant->use_dma)
+               param.flags = PCITEST_FLAGS_USE_DMA;
+
+       pci_ep_ioctl(PCITEST_SET_IRQTYPE, 1);
+       ASSERT_EQ(0, ret) TH_LOG("Can't set MSI IRQ type");
+
+       for (i = 0; i < ARRAY_SIZE(test_size); i++) {
+               param.size = test_size[i];
+               pci_ep_ioctl(PCITEST_COPY, &param);
+               EXPECT_FALSE(ret) TH_LOG("Test failed for size (%ld)",
+                                        test_size[i]);
+       }
+}
+TEST_HARNESS_MAIN
diff --git a/tools/testing/selftests/pci_endpoint/pcitest.c b/tools/testing/selftests/pci_endpoint/pcitest.c
deleted file mode 100644 (file)
index b96cc11..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/**
- * Userspace PCI Endpoint Test Module
- *
- * Copyright (C) 2017 Texas Instruments
- * Author: Kishon Vijay Abraham I <kishon@ti.com>
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-#include <linux/pcitest.h>
-
-static char *irq[] = { "LEGACY", "MSI", "MSI-X" };
-
-struct pci_test {
-       char            *device;
-       char            barnum;
-       bool            consecutive_bar_test;
-       bool            legacyirq;
-       unsigned int    msinum;
-       unsigned int    msixnum;
-       int             irqtype;
-       bool            set_irqtype;
-       bool            get_irqtype;
-       bool            clear_irq;
-       bool            read;
-       bool            write;
-       bool            copy;
-       unsigned long   size;
-       bool            use_dma;
-};
-
-static int run_test(struct pci_test *test)
-{
-       struct pci_endpoint_test_xfer_param param = {};
-       int ret = -EINVAL;
-       int fd;
-
-       fd = open(test->device, O_RDWR);
-       if (fd < 0) {
-               perror("can't open PCI Endpoint Test device");
-               return -ENODEV;
-       }
-
-       if (test->barnum >= 0 && test->barnum <= 5) {
-               ret = ioctl(fd, PCITEST_BAR, test->barnum);
-               fprintf(stdout, "BAR%d:\t\t", test->barnum);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->consecutive_bar_test) {
-               ret = ioctl(fd, PCITEST_BARS);
-               fprintf(stdout, "Consecutive BAR test:\t\t");
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->set_irqtype) {
-               ret = ioctl(fd, PCITEST_SET_IRQTYPE, test->irqtype);
-               fprintf(stdout, "SET IRQ TYPE TO %s:\t\t", irq[test->irqtype]);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->get_irqtype) {
-               ret = ioctl(fd, PCITEST_GET_IRQTYPE);
-               fprintf(stdout, "GET IRQ TYPE:\t\t");
-               if (ret < 0) {
-                       fprintf(stdout, "NOT OKAY\n");
-               } else {
-                       fprintf(stdout, "%s\n", irq[ret]);
-                       ret = 0;
-               }
-       }
-
-       if (test->clear_irq) {
-               ret = ioctl(fd, PCITEST_CLEAR_IRQ);
-               fprintf(stdout, "CLEAR IRQ:\t\t");
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->legacyirq) {
-               ret = ioctl(fd, PCITEST_LEGACY_IRQ, 0);
-               fprintf(stdout, "LEGACY IRQ:\t");
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->msinum > 0 && test->msinum <= 32) {
-               ret = ioctl(fd, PCITEST_MSI, test->msinum);
-               fprintf(stdout, "MSI%u:\t\t", test->msinum);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->msixnum > 0 && test->msixnum <= 2048) {
-               ret = ioctl(fd, PCITEST_MSIX, test->msixnum);
-               fprintf(stdout, "MSI-X%u:\t\t", test->msixnum);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->write) {
-               param.size = test->size;
-               if (test->use_dma)
-                       param.flags = PCITEST_FLAGS_USE_DMA;
-               ret = ioctl(fd, PCITEST_WRITE, &param);
-               fprintf(stdout, "WRITE (%7lu bytes):\t\t", test->size);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->read) {
-               param.size = test->size;
-               if (test->use_dma)
-                       param.flags = PCITEST_FLAGS_USE_DMA;
-               ret = ioctl(fd, PCITEST_READ, &param);
-               fprintf(stdout, "READ (%7lu bytes):\t\t", test->size);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       if (test->copy) {
-               param.size = test->size;
-               if (test->use_dma)
-                       param.flags = PCITEST_FLAGS_USE_DMA;
-               ret = ioctl(fd, PCITEST_COPY, &param);
-               fprintf(stdout, "COPY (%7lu bytes):\t\t", test->size);
-               if (ret < 0)
-                       fprintf(stdout, "NOT OKAY\n");
-               else
-                       fprintf(stdout, "OKAY\n");
-       }
-
-       fflush(stdout);
-       close(fd);
-       return ret;
-}
-
-int main(int argc, char **argv)
-{
-       int c;
-       struct pci_test *test;
-
-       test = calloc(1, sizeof(*test));
-       if (!test) {
-               perror("Fail to allocate memory for pci_test\n");
-               return -ENOMEM;
-       }
-
-       /* since '0' is a valid BAR number, initialize it to -1 */
-       test->barnum = -1;
-
-       /* set default size as 100KB */
-       test->size = 0x19000;
-
-       /* set default endpoint device */
-       test->device = "/dev/pci-endpoint-test.0";
-
-       while ((c = getopt(argc, argv, "D:b:Cm:x:i:deIlhrwcs:")) != EOF)
-       switch (c) {
-       case 'D':
-               test->device = optarg;
-               continue;
-       case 'b':
-               test->barnum = atoi(optarg);
-               if (test->barnum < 0 || test->barnum > 5)
-                       goto usage;
-               continue;
-       case 'C':
-               test->consecutive_bar_test = true;
-               continue;
-       case 'l':
-               test->legacyirq = true;
-               continue;
-       case 'm':
-               test->msinum = atoi(optarg);
-               if (test->msinum < 1 || test->msinum > 32)
-                       goto usage;
-               continue;
-       case 'x':
-               test->msixnum = atoi(optarg);
-               if (test->msixnum < 1 || test->msixnum > 2048)
-                       goto usage;
-               continue;
-       case 'i':
-               test->irqtype = atoi(optarg);
-               if (test->irqtype < 0 || test->irqtype > 2)
-                       goto usage;
-               test->set_irqtype = true;
-               continue;
-       case 'I':
-               test->get_irqtype = true;
-               continue;
-       case 'r':
-               test->read = true;
-               continue;
-       case 'w':
-               test->write = true;
-               continue;
-       case 'c':
-               test->copy = true;
-               continue;
-       case 'e':
-               test->clear_irq = true;
-               continue;
-       case 's':
-               test->size = strtoul(optarg, NULL, 0);
-               continue;
-       case 'd':
-               test->use_dma = true;
-               continue;
-       case 'h':
-       default:
-usage:
-               fprintf(stderr,
-                       "usage: %s [options]\n"
-                       "Options:\n"
-                       "\t-D <dev>             PCI endpoint test device {default: /dev/pci-endpoint-test.0}\n"
-                       "\t-b <bar num>         BAR test (bar number between 0..5)\n"
-                       "\t-C                   Consecutive BAR test\n"
-                       "\t-m <msi num>         MSI test (msi number between 1..32)\n"
-                       "\t-x <msix num>        \tMSI-X test (msix number between 1..2048)\n"
-                       "\t-i <irq type>        \tSet IRQ type (0 - Legacy, 1 - MSI, 2 - MSI-X)\n"
-                       "\t-e                   Clear IRQ\n"
-                       "\t-I                   Get current IRQ type configured\n"
-                       "\t-d                   Use DMA\n"
-                       "\t-l                   Legacy IRQ test\n"
-                       "\t-r                   Read buffer test\n"
-                       "\t-w                   Write buffer test\n"
-                       "\t-c                   Copy buffer test\n"
-                       "\t-s <size>            Size of buffer {default: 100KB}\n"
-                       "\t-h                   Print this help message\n",
-                       argv[0]);
-               return -EINVAL;
-       }
-
-       return run_test(test);
-}
diff --git a/tools/testing/selftests/pci_endpoint/pcitest.sh b/tools/testing/selftests/pci_endpoint/pcitest.sh
deleted file mode 100644 (file)
index 770f4d6..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: GPL-2.0
-
-echo "BAR tests"
-echo
-
-bar=0
-
-while [ $bar -lt 6 ]
-do
-       pcitest -b $bar
-       bar=`expr $bar + 1`
-done
-pcitest -C
-echo
-
-echo "Interrupt tests"
-echo
-
-pcitest -i 0
-pcitest -l
-
-pcitest -i 1
-msi=1
-
-while [ $msi -lt 33 ]
-do
-        pcitest -m $msi
-        msi=`expr $msi + 1`
-done
-echo
-
-pcitest -i 2
-msix=1
-
-while [ $msix -lt 2049 ]
-do
-        pcitest -x $msix
-        msix=`expr $msix + 1`
-done
-echo
-
-echo "Read Tests"
-echo
-
-pcitest -i 1
-
-pcitest -r -s 1
-pcitest -r -s 1024
-pcitest -r -s 1025
-pcitest -r -s 1024000
-pcitest -r -s 1024001
-echo
-
-echo "Write Tests"
-echo
-
-pcitest -w -s 1
-pcitest -w -s 1024
-pcitest -w -s 1025
-pcitest -w -s 1024000
-pcitest -w -s 1024001
-echo
-
-echo "Copy Tests"
-echo
-
-pcitest -c -s 1
-pcitest -c -s 1024
-pcitest -c -s 1025
-pcitest -c -s 1024000
-pcitest -c -s 1024001
-echo